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

установка mongodb

В моем случае для 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

Теперь нужно настроить параметры 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

Лимиты использования памяти java для OpenSearch

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

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

Запустите OpenSearch:

$ sudo systemctl enable --now opensearch

Использование памяти сервисом 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.

http_bind_address 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

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

Начальная настройка Graylog

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

веб интерфейс Graylog

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

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

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

Сборщик данных (Input) в Graylog

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

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

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

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

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

Правило stream

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

Создать новый Stream в Graylog

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

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

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

$ sudo apt install rsyslog

установка rsyslog в linux

$ 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 интерактивная. Вы выбираете различные свойства событий и в поисковой строке выбираете из предложенных вариантов.

поиск событий в Graylog

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

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

Использование поисковой строки в Graylog

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

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

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

Dashboard в Graylog

Настройка оповещений в 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*

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

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

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

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

EnglishRussianUkrainian