Graylog — это система централизованного сбора и анализа логов. Серверы, сетевое оборудование и приложения отправляют ей логи, а она хранит их, разбирает на поля и позволяет искать, строить дашборды и получать оповещения об ошибках.
Из чего состоит:
- Graylog Server: приём логов, обработка, веб-интерфейс.
- MongoDB: настройки, пользователи, дашборды.
- Data Node (OpenSearch): хранение и индексация самих логов.
Как принимает логи: Syslog, GELF, Beats (Filebeat, Winlogbeat), HTTP/JSON, NetFlow и другие. Агенты настраиваются централизованно через Sidecar.
Основные понятия:
- Input: порт, на котором Graylog принимает логи.
- Stream: правила, по которым сообщения раскладываются по потокам.
- Index set: хранилище со своим сроком хранения.
- Pipeline: разбор и обогащение сообщений.
- Dashboard и Event: графики и оповещения.
Для нескольких компаний: для каждой делаете отдельные stream, index set и роль, тогда данные и сроки хранения разделены. Изоляция логическая, в рамках одного экземпляра. Если нужна жёсткая изоляция, ставьте отдельный Graylog на компанию.
Лицензия: Graylog Open бесплатен, лицензия SSPL. Часть функций (аудит действий, расширенные парсеры) только в платных версиях.
Плюсы: простой поиск, удобные дашборды и оповещения, хорошо подходит для логов серверов и сетевых устройств.
Минусы: требовательнее к ресурсам, чем Loki (нужно минимум 8 ГБ RAM), три компонента нужно обслуживать, нет полноценной мультитенантности.
Из чего состоит
- Graylog Server принимает логи, обрабатывает и показывает веб-интерфейс.
- MongoDB хранит настройки, пользователей, права и дашборды (сами логи в ней не лежат).
- Data Node / OpenSearch хранит и индексирует сами логи. В новых версиях Graylog есть собственный Data Node, который упрощает установку.
Все три компонента ставятся на один сервер для небольших объёмов или разносятся для больших.
Как логи попадают в Graylog
- Syslog (UDP/TCP): сетевое оборудование, Linux через rsyslog, MikroTik, firewall’ы.
- GELF: собственный формат Graylog, удобен для приложений и Docker.
- Beats (Filebeat, Winlogbeat): чтение файлов логов и журнала Windows.
- Sidecar: центральное управление конфигурацией сборщиков (Filebeat и др.) прямо из интерфейса Graylog.
- Также HTTP/JSON, NetFlow, IPFIX и другие входы.
В Graylog Open поддерживаются Syslog, CEF, GELF, Beats, HTTP-JSON, IPFIX, Netflow и обычный текст, а также Sidecar, потоки (Streams) и конвейеры (Pipelines). graylog
Типичная схема подключения: серверы клиента отправляют логи на ваш Graylog по TLS (Syslog TLS или Beats) либо через VPN (WireGuard). Либо в сети клиента стоит небольшой пересылающий сервер (rsyslog или Graylog Forwarder), который шлёт логи наружу одним каналом.
Лицензия и ограничения (важно)
- Graylog Open бесплатен для самостоятельной установки, но лицензирован по SSPL v1: это не одобренная OSI лицензия, хотя использовать Graylog бесплатно можно. Для внутреннего использования и администрирования клиентов это обычно не мешает, но юридическую сторону стоит прочитать, если вы планируете предлагать «логи как услугу». tech-insider
- В Open доступны основные функции: входы, потоки, конвейеры, поиск, дашборды, алерты. Часть возможностей только в платных версиях, например журнал аудита действий пользователей и Enterprise Forwarder. graylog
- Готовые пакеты разбора логов (Illuminate) в Open ограничены: Open поддерживает очень небольшое число парсеров, а для установки Illuminate нужно подключить Enterprise-плагин. graylog
- Цены на платные версии указываются по запросу, ориентиры из обзоров: Enterprise от 15 000 долларов в год. Для небольших объёмов вроде бы есть бесплатная Enterprise-лицензия (ссылаются на порог 5 ГБ/день), но условия лучше проверить на graylog.org/pricing, они меняются.
Стек из трёх служб: MongoDB (настройки), Data Node (хранит и индексирует логи, это управляемый OpenSearch) и Graylog Server. Ресурсы: каждая из трёх служб потребляет 1-2 ГБ памяти, поэтому берите минимум 4 vCPU, 8 ГБ RAM (лучше 16) и быстрый диск под ваши логи.
0. Подготовка
bash
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl gnupg wget pwgen chrony
sudo timedatectl set-timezone Europe/Warsaw # свой часовой пояс
Точное время важно: по нему строятся индексы и поиск, поэтому стоит chrony.
Data Node (OpenSearch) требует увеличить лимит карт памяти:
bash
echo "vm.max_map_count=262144" | sudo tee /etc/sysctl.d/99-graylog.conf
sudo sysctl --system
1. MongoDB 7.0
bash
curl -fsSL https://www.mongodb.org/static/pgp/server-7.0.asc | sudo gpg -o /usr/share/keyrings/mongodb-server-7.0.gpg --dearmor
echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list
sudo apt update
sudo apt install -y mongodb-org
sudo apt-mark hold mongodb-org
sudo systemctl enable --now mongod
sudo systemctl status mongod
Репозиторий jammy используется и на Ubuntu 24.04 (так делают в протестированных инструкциях). apt-mark hold не даёт MongoDB случайно обновиться до версии, которую Graylog не поддерживает.
2. Репозиторий Graylog и Data Node
Ссылку на актуальный пакет репозитория возьмите на странице Ubuntu Installation в документации. Для 7.0 она по шаблону выглядит так (раньше, например, было graylog-5.2-repository_latest.deb):
bash
wget https://packages.graylog2.org/repo/packages/graylog-7.0-repository_latest.deb
sudo dpkg -i graylog-7.0-repository_latest.deb
sudo apt update
sudo apt install -y graylog-datanode
Секрет, общий для Data Node и Graylog
bash
pwgen -N 1 -s 96
Сохраните вывод: это password_secret, он должен быть одинаковым на Data Node и на сервере Graylog. Им шифруются данные в MongoDB и связь между компонентами.
Настройте Data Node:
bash
sudo nano /etc/graylog/datanode/datanode.conf
ini
password_secret = <ваш_секрет_из_pwgen>
mongodb_uri = mongodb://localhost/graylog
# при необходимости задайте память OpenSearch (не более половины RAM):
# opensearch_heap = 4g
Запуск:
bash
sudo systemctl daemon-reload
sudo systemctl enable --now graylog-datanode
sudo systemctl status graylog-datanode
3. Graylog Server
bash
sudo apt install -y graylog-server
Пароль администратора хранится в виде SHA-256:
bash
echo -n "Ваш_надёжный_пароль" | shasum -a 256
Правим конфиг:
bash
sudo nano /etc/graylog/server/server.conf
ini
password_secret = <тот_же_секрет_что_в_datanode>
root_password_sha2 = <хэш_из_команды_выше>
http_bind_address = 0.0.0.0:9000
http_external_uri = http://<IP-или-имя-сервера>:9000/
По умолчанию веб-интерфейс слушает только 127.0.0.1, поэтому http_bind_address нужно менять, иначе снаружи он недоступен. Если закрываете его reverse-прокси с HTTPS, оставьте 127.0.0.1 и укажите http_external_uri с внешним https://-адресом.
Запуск:
bash
sudo systemctl daemon-reload
sudo systemctl enable --now graylog-server
4. Первоначальная настройка (preflight)
При первом запуске с Data Node Graylog открывает режим предварительной настройки. Временные логин и пароль для него выводятся в журнал:
bash
sudo journalctl -u graylog-server | grep -i -A2 "initial configuration"
# или
sudo tail -n 100 /var/log/graylog-server/server.log
- Откройте
http://<IP-сервера>:9000и войдите временными данными из журнала. - Дождитесь, пока Data Node определится в списке.
- Создайте центр сертификации (CA) и выдайте сертификат для Data Node (мастер на странице всё предложит).
- Нажмите Resume startup и дождитесь загрузки Graylog.
- Войдите постоянными данными: логин
admin, пароль, из которого вы делали хэш.
5. Файрвол
bash
sudo ufw allow 9000/tcp # веб-интерфейс (лучше только из вашей сети/VPN)
sudo ufw allow 1514/tcp # Syslog
sudo ufw allow 1514/udp
sudo ufw allow 12201/udp # GELF
sudo ufw allow 5044/tcp # Beats
Порты 9200, 9300, 8999 (Data Node) и 27017 (MongoDB) наружу не открывайте: они нужны только самим компонентам. Для клиентских сетей разрешайте входящие только с их IP или через VPN. Лучше использовать TLS на входах для внешних клиентов.
Syslog лучше принимать на порту 1514, а не 514: порты ниже 1024 требуют привилегий, а Graylog работает не от root.
6. Первый приём логов
В интерфейсе: System → Inputs → Select input → Syslog TCP → Launch new input.
- Bind address:
0.0.0.0, Port:1514. - Сохраните и запустите (Start input).
Проверка с любого Linux-сервера:
bash
sudo apt install -y rsyslog
echo '*.* @@<IP-graylog>:1514;RSYSLOG_SyslogProtocol23Format' | sudo tee /etc/rsyslog.d/90-graylog.conf
sudo systemctl restart rsyslog
logger "тестовое сообщение для Graylog"
Откройте Search: сообщение должно появиться через несколько секунд.
7. Что сделать сразу, чтобы не переделывать
- Streams и Index sets под каждую компанию: System → Indices (срок хранения и ротация) и Streams (правила попадания сообщений). Делайте это до массового подключения серверов.
- Роли и пользователи: System → Users and Teams, с привязкой к потокам компаний.
- HTTPS для веб-интерфейса: проще всего через nginx или Caddy перед Graylog.
- Резервное копирование: MongoDB (
mongodump) и снимки индексов Data Node, плюс сохранениеpassword_secret: без него данные из MongoDB не расшифровать. - Запрет автообновления:
sudo apt-mark hold graylog-server graylog-datanode, обновляйте по инструкции и после бэкапа.
8. Частые проблемы
| Симптом | Что проверить |
|---|---|
| Data Node не стартует | journalctl -u graylog-datanode -f; sysctl vm.max_map_count; хватает ли RAM |
| Graylog не стартует | /var/log/graylog-server/server.log; одинаков ли password_secret; запущена ли MongoDB |
| Интерфейс не открывается снаружи | http_bind_address, файрвол, `ss -tlnp |
| Сообщения не приходят | запущен ли Input (зелёный статус), порт и протокол (TCP/UDP), файрвол на обеих сторонах |
| Нет места на диске | сроки хранения в Index set, ротация и удаление старых индексов |