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.
Нам понадобятся:
- 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
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 адреса, на которые нужно высылать письма.
Затем на Event Definition нужно создать шаблон для поиска событий, о которых нужно уведомлять. Для отслеживания SSH входов на Linux хосты нужно выбрать соответствующий Stream и указать поисковый запрос:
application_name:sshd AND message:Accepted password*
В правом столбце появится список событий, которые соответствуют вашим критериям. Проверьте, что найдены все события. Если нет, отредактируйте поисковый запрос.
Осталось выбрать тип уведомления -> email. И Graylog начнет высылать вам оповещение при появлении в логах определенного события.
В этой статье мы рассмотрели базовые вопросы развертывания и использования системы сбора и анализа логов Graylog. В следующей статье мы рассмотрим, как использовать Graylog для централизованного сбора и поиска в логах от серверов Windows .