Categories: linux

Graylog: централизированный сбор, хранение и анализ логов

Graylog это полноценное open-source решение для централизованного сбора, хранения, визуализации, фильтрации и поиска логов, мониторинга и отправки оповещений. В Graylog можно отправлять логи и журналы событий с сотен сетевых устройств, будь то сервера Linux, Windows, сетевые устройства и оборудование. Graylog эта мощная платформа, которое может хранить терабайты логов и при этом позволяет поиск в логах выполняется практически моментально. В этой статье мы рассмотрим процесс развертывания стека Graylog и базовые возможности — это системы логирования.

Стек Graylog состоит из следующих компонентов:

  • Сервер Graylog – веб интерфейс для визуализации и настройки
  • MongoDB – используется для хранения метаданных
  • ElasticSearch или его форк OpenSearch – для хранения и полнотекстового поиска в структурированных и неструктурированных логах
  • Java (OpenJDK) – среда выполнения OpenSearch (ElasticSearch)

Для хранения журналов мы будем использовать стэк OpenSearch, который является бесплатным аналогом с отрытым исходным кодом стеку ELK (Elasticsearch + Logstash + Kibana).

Установка стека Graylog на Linux

Инструкции по установки стека Graylog будут сильно отличаться от версии к версии. Поэтому рекомендуем вручную выбрать на сайте https://go2docs.graylog.org ваш дистрибутив Linux и версию Graylog. В нашем примере это Debian 12 и Graylog 5.2.

Graylog можно запустить через docker-compose, но в данном случае мы рассмотрим полноценное разверыванием всех компонентов.

Нам понадобятся:

  • OpenJDK 17
  • OpenSearch 2.x (или Elasticsearch 7.10.2 – это единственная версия совместимая с Graylog 5.2)
  • MongoDB 5.x или 6.x (использовать MongoDB 7 пока не рекомендуется)
  • На сервере Graylog должно быть не менее 2GB RAM для небольшой инсталляции

Установка MongoDB 6 :

$ sudo apt-get install gnupg curl
$ curl -fsSL https://www.mongodb.org/static/pgp/server-6.0.asc | sudo gpg -o /usr/share/keyrings/mongodb-server-6.0.gpg --dearmor
$ echo "deb [ signed-by=/usr/share/keyrings/mongodb-server-6.0.gpg] http://repo.mongodb.org/apt/debian bullseye/mongodb-org/6.0 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
$ sudo apt-get update

Теперь можно установить MongoDB:

$ sudo apt-get install -y mongodb-org

В моем случае для Debian 12 при установке mongodb появилась ошибка:
The following packages have unmet dependencies:_x000D_mongodb-org-mongos : Depends: libssl1.1 (>= 1.1.1) but it is not installable_x000D_mongodb-org-server : Depends: libssl1.1 (>= 1.1.1) but it is not installable

Пришлось установить:

$ sudo wget http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2_amd64.deb
$ sudo dpkg -i libssl1.1_1.1.1f-1ubuntu2_amd64.deb

Запустите сервис:

$ sudo systemctl daemon-reload
$ sudo systemctl enable mongod.service
$ sudo systemctl restart mongod.service
$ sudo systemctl --type=service --state=active | grep mongod

Затем переходим к развёртыванию OpenSearch:

$ sudo apt-get update && sudo apt-get -y install lsb-release ca-certificates curl gnupg2

$ Добавление репозитория:

$ curl -o- https://artifacts.opensearch.org/publickeys/opensearch.pgp | sudo gpg --dearmor --batch --yes -o /usr/share/keyrings/opensearch-keyring
$ echo "deb [signed-by=/usr/share/keyrings/opensearch-keyring] https://artifacts.opensearch.org/releases/bundle/opensearch/2.x/apt stable main" | sudo tee /etc/apt/sources.list.d/opensearch-2.x.list
$ sudo apt update

Начиная с OpenSearch 2.12 при установке нужно сразу сгенерировать пароль администратора:

$ sudo OPENSEARCH_INITIAL_ADMIN_PASSWORD=$(tr -dc A-Z-a-z-0-9_@#%^-_=+ < /dev/urandom  | head -c${1:-32}) apt-get install opensearch

Теперь нужно настроить параметры OpenSearch:

$ sudo nano /etc/opensearch/opensearch.yml

Для простейшей конфигурации из одной ноды достаточно настроить следующие параметры:

cluster.name: graylog_x000D_node.name: ${HOSTNAME}_x000D_path.data: /var/lib/opensearch_x000D_path.logs: /var/log/opensearch_x000D_ discovery.type: single-node_x000D_network.host: 0.0.0.0_x000D_action.auto_create_index: false_x000D_plugins.security.disabled: true_x000D_indices.query.bool.max_clause_count: 32768_x000D_

Настройте параметры SMTP сервера, через который вы будете отправлять email уведомления:

transport_email_enabled = true_x000D_transport_email_hostname = smtp.gmail.com_x000D_transport_email_port = 465_x000D_transport_email_use_auth = true_x000D_transport_email_use_tls = false_x000D_transport_email_use_ssl = true_x000D_transport_email_auth_username =_x000D_transport_email_auth_password =_x000D_transport_email_subject_prefix = [graylog]_x000D_transport_email_from_email =_x000D_transport_email_web_interface_url =_x000D_

Затем изменить настройки Java:

$ sudo nano /etc/opensearch/jvm.options

В параметрах Xms и Xmx нужно указать сколько памяти может исопльзовать виртуальная машина java. Здесь рекомендуется указать половину RAM сервера. Например, для хоста с 8 Гб, здесь нужно выделить 4 Гб:

-Xms4g_x000D_-Xmx4g

Измените параметры виртуальной памяти:

$ sudo sysctl -w vm.max_map_count=262144
$ sudo echo 'vm.max_map_count=262144' >> /etc/sysctl.conf

Запустите OpenSearch:

$ sudo systemctl enable --now opensearch

Теперь нужно установить сервер Graylog . Есть две версии Graylog: бесплатная Graylog Open и enterprise версия Graylog Operations, доступная по подписке.

Для установки Graylog Open:

$ wget https://packages.graylog2.org/repo/packages/graylog-5.2-repository_latest.deb
$ sudo dpkg -i graylog-5.2-repository_latest.deb
$ sudo apt-get update && sudo apt-get install graylog-server

Сгенерируйте пароли для двух переменных password_secret и root_password_sha2, без которых Graylog не запустится.

Пароль password_secret должен содержать минимум 64 символа:

$ pwgen -N 1 -s 96

Затем нужно получить хэш пароля администратора Graylog. Следующая команда сгенерирует хэш введенного вами пароля:

$ echo -n "Enter Password: " && head -1 </dev/stdin | tr -d 'n' | sha256sum | cut -d" " -f1

Скопируйте полученные значения password_secret и root_password_sha2 в файл /etc/graylog/server/server.conf.

В http_bind_address укажите IP адрес и порт, на котором будет запущен веб сервер Graylog.

Запустите сервер graylog:

$ sudo systemctl enable --now graylog-server

Пошаговая настройка Graylog

Теперь вы можете попробовать зайти в веб интерфейс Graylog под пользователем admin и пароль, хеш-сумму которого вы указали в файле конфигурации. Однако, при первом входе этот пароль не будет приниматься.

Если посмотреть логи сервера GrayLog, там вы обнаружите интересное сообщение:

$ cat /var/log/graylog-server/server.log

It seems you are starting Graylog for the first time. To set up a fresh install, a setup interface has been started. You must log in to it to perform the initial configuration and continue._x000D_Initial configuration is accessible at 0.0.0.0:9000, with username 'admin' and password 'eDluAYfeaX'._x000D_Try clicking on http://admin:[email protected]:9000

В первый раз нужно зайти под временным паролем, который указан в лог файле. Воспользуйтесь простым мастером начальной конфигурации. Режим Graylog data node используется для настройки OpenSearch кластера из нескольких нод. Для простой конфигурации из одного сервера логов, этот этап можно пропустить.

После этого вы сможете зайти в веб-интерфейс Graylog под пользователем admin и вашим паролем администратора, хэш которого вы указали в конфигурационном файле:

После входа рекомендуем создать отдельного пользователя System-> User and Teams. Некоторые настройки встроенного администратора нельзя кастомизировать, поэтому лучше работать под отдельным пользователя. Назначьте пользователю роль admin и задайте email адрес.

Теперь нужно создать сборщики данных Inputs . Для каждого класса устройств лучше делать отдельный input (Linux сервера, сетевое оборудование, Windows хосты и т.д.).

Мы создадим input типа Syslog UDP для Linux. Нужно указать его название, и порт, на котором сервер будет принимать данные. Остальные настройки оставить по-умолчанию.

Теперь перейдите в System -> Indices и создать отдельный индекс для класса Linux.

Нужно указать имя, описание и префикс (например linux_indx ). Здесь можно также настроить сколько дней нужно хранить старые логи, и когда можно удалять старые индекс, а также максимальный размер индекса.

Для каждого input лучше создать отдельный Stream . Так разные сообщений от разных классов устройства будут находится в разных индексах. Перейдите в Stream -> Create Stream -> укажите название потока и выберите индекс, который нужно использовать.

В настройках Stream добавьте новое правило. Правило определят какие логи нужно отнести к этому потоку. В нашем случае выбираем match input -> выберите ваш Linux Input.

После этого запустите stream.

Настройка отправки логов с клиентов в Graylog

Теперь можно настроить отправку логов с ваших устройств в Graylog. Graylog позволяется получать данные из различных источников: Filebeat, Winlogbeat, Nxlog, Syslog, Rsyslog и т.д.

Для Linux серверов можно использовать rsyslog.

$ sudo apt install rsyslog

$ sudo systemctl status rsyslog

После того, как служба rsyslog запущена, нужно настроить какие логи нужно отправлять в Graylog.

$ sudo nano /etc/rsyslog.d/60-graylog.conf

Добавьте в файл строку:

*.*@192.168.14.146:20514;RSYSLOG_SyslogProtocol23Format

В данном примере мы будем отправлять на Graylog сервер (192.168.14.146) на порт созданного вами Input (20514) все логи в формате Syslog (в реальной среде можно настроить отпрвку только определенных журналов).

Перезапустите rsyslog:

$ sudo systemctl restart rsyslog

Просмотр, фильтрации и анализ логов в GrayLog

Теперь перейдите на вкладку Search Graylog, выберите в списки потоков Linux и вы увидите все события от вашего сервера, которые были получены за последние 5 минут (можно изменить диапазон).

С помощью простых фильтров можно найти определенные события. Поисковая строка Graylog интерактивная. Вы выбираете различные свойства событий и в поисковой строке выбираете из предложенных вариантов.

Например, для поиска всех событий неудачных попыток SSH подключений к серверу, настройте следующий поисковый фильтр:

source:srv-ubun01 AND application_name:sshd AND message:Fail*

В данном случае мы явно указываем что ищем события, которые удовлетворяют всем трем условиям (параметр AND ). Если не указывать AND, graylog подразумевает что вы ищите события в режиме OR .

В таблице останутся события, которые соответствуют вашим критериям поиска. Вы можете развернуть и изучить их. Поисковые фильтры Graylog довольно простые и интуитивно понятны. Вы всегда можете развернуть любой событие, просмотреть его поля и использовать их значения для фильтрации и поиска событий.

В Graylog можно создать различные Dashboard-ы, в которых можно выводить информацию об интересующих вас событиях (количество событий, хосты, сгруппировать элементы, добавить графики или карты). Для кастомизации dashboard используются виджеты.

Настройка оповещений в Graylog

Вы можете настроить автоматическую отправку оповещений из Graylog при появлении определенных событий. Например, я хочу, чтобы Graylog отправлял мне на почту письмо, когда кто-то зашел на один серверов по SSH.

Перейдите в Alerts -> Alerts and Events . На вкладке Notification добавьте email адреса, на которые нужно высылать письма.

В Graylog есть встроенные шаблоны для отправки алертов в MS Teams и Slack. С помощью плагинов можно настроить отправку сообщений из Graylog в Telegram.

Затем на Event Definition нужно создать шаблон для поиска событий, о которых нужно уведомлять. Для отслеживания SSH входов на Linux хосты нужно выбрать соответствующий Stream и указать поисковый запрос:

application_name:sshd AND message:Accepted password*

В правом столбце появится список событий, которые соответствуют вашим критериям. Проверьте, что найдены все события. Если нет, отредактируйте поисковый запрос.

Осталось выбрать тип уведомления -> email. И Graylog начнет высылать вам оповещение при появлении в логах определенного события.

В этой статье мы рассмотрели базовые вопросы развертывания и использования системы сбора и анализа логов Graylog. В следующей статье мы рассмотрим, как использовать Graylog для централизованного сбора и поиска в логах от серверов Windows .

admin

Share
Published by
admin

Recent Posts

Консоль удаленного рабочего стола(rdp console)

Клиент удаленного рабочего стола (rdp) предоставляет нам возможность войти на сервер терминалов через консоль. Что…

2 недели ago

Настройка сети в VMware Workstation

В VMware Workstation есть несколько способов настройки сети гостевой машины: 1) Bridged networking 2) Network…

2 недели ago

Логи брандмауэра Windows

Встроенный брандмауэр Windows может не только остановить нежелательный трафик на вашем пороге, но и может…

2 недели ago

Правильный способ отключения IPv6

Вопреки распространенному мнению, отключить IPv6 в Windows Vista и Server 2008 это не просто снять…

2 недели ago

Ключи реестра Windows, отвечающие за параметры экранной заставки

Параметры экранной заставки для текущего пользователя можно править из системного реестра, для чего: Запустите редактор…

2 недели ago

Как управлять журналами событий из командной строки

В этой статье расскажу про возможность просмотра журналов событий из командной строки. Эти возможности можно…

2 недели ago