Как установить Graylog 6 в 2026: пошаговая настройка с OpenSearch 2.x и MongoDB 7 | AdminWiki

Как установить Graylog 6 в 2026: пошаговая настройка с OpenSearch 2.x и MongoDB 7

30 сентября 2026 13 мин. чтения
Содержание статьи

Рабочая связка на конец 2026 года: Graylog 6.x, OpenSearch 2.x, MongoDB 6.0 или 7.0 и OpenJDK 17. Graylog принимает и обрабатывает сообщения, OpenSearch хранит индексы и обслуживает поиск, MongoDB держит конфигурацию: пользователей, потоки, правила, дашборды. Java нужна Graylog и OpenSearch, MongoDB работает на собственном движке.

Все три сервиса поднимаются на одном хосте, если поток логов не превышает 10 ГБ в день. При потоке 10-50 ГБ в день выносите OpenSearch на отдельный сервер или хотя бы на отдельный том: индексы активно пишутся, а MongoDB и Graylog в это же время читают свою конфигурацию.

Минимальные требования: 4 vCPU, 8 ГБ RAM, SSD на 50 ГБ под систему и отдельный диск под индексы. Комфортный старт небольшого продакшена: 8 vCPU и 16-32 ГБ RAM. OpenSearch не запустится, пока vm.max_map_count меньше 262144.

КомпонентВерсияНазначениеПорт по умолчанию
Graylog Server6.xприём, обработка, веб-интерфейс9000 (UI и REST), 12201 (GELF), 514 (Syslog)
OpenSearch2.xхранение индексов и поиск9200 (HTTP), 9300 (transport)
MongoDB6.0/7.0конфигурация Graylog27017
OpenJDK17среда для Graylog и OpenSearch-

Что понадобится для установки Graylog в 2026

Если хранилище логов ещё не выбрано, сначала пройдитесь по критериям из материала о централизованном сборе логов в 2026 году: там Graylog, Elastic Stack, OpenSearch и Loki разобраны по ресурсам, сложности эксплуатации и сценариям.

Минимальные требования к серверу и ОС

РесурсМинимумДля продакшенаПримечание
CPU4 vCPU8 vCPUJVM и OpenSearch чувствительны к количеству ядер
RAM8 ГБ16-32 ГБминимум 4 ГБ остаётся ОС и файловому кэшу
Системный диск50 ГБ SSD100 ГБ SSDпакеты, журнал Graylog, логи OpenSearch
Диск под индексыотдельный томNVMeрастёт пропорционально потоку логов
ОСUbuntu 22.04 LTS, Debian 12Ubuntu 24.04 LTS, RHEL 9, Rocky 9пакеты есть для apt и dnf

Проверьте хост до установки:
nproc
free -h
df -h
lsblk
grep -o avx /proc/cpuinfo | head -1
sysctl vm.max_map_count

Две последние команды важны для MongoDB. Сборки MongoDB 5.0 и новее требуют поддержки инструкций AVX: на Xeon E5 v1/v2 и части старых AMD mongod падает с ошибкой Illegal instruction. Команда grep должна вернуть avx. Пустой вывод означает, что нужен другой хост: ветки MongoDB до 5.0 с Graylog 6.x несовместимы.

Значение vm.max_map_count в большинстве дистрибутивов равно 65530, OpenSearch требует 262144. При меньшем значении узел не проходит bootstrap checks и не стартует.

Матрица совместимости Graylog, OpenSearch и MongoDB

GraylogХранилище индексовMongoDBJava
6.1OpenSearch 2.11-2.156.0, 7.0OpenJDK 17
6.0OpenSearch 2.9-2.156.0, 7.0OpenJDK 17
5.2OpenSearch 2.4-2.115.0, 6.0OpenJDK 17
4.3Elasticsearch 7.x, OpenSearch 1.x4.4, 5.0OpenJDK 11

Диапазоны в таблице отражают ветки, совместимость с которыми заявлена для релиза. Перед обновлением минорной версии сверяйтесь с release notes конкретного патча: поддержка новых мажорных версий OpenSearch появляется не в день релиза, а через один-два минорных выпуска Graylog.

Elasticsearch остался вариантом для старых веток Graylog 4.x. Если у вас уже работает Elasticsearch 7.x под Graylog 4.x, миграцию на OpenSearch планируйте одновременно с обновлением Graylog: настроить новый сервер рядом и переключить elasticsearch_hosts получится без простоя.

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

Подготовка хоста и установка зависимостей

Порядок работ: обновление пакетов, Java 17, параметры ядра, репозитории, затем установка сервисов. Шаг с vm.max_map_count не пропускайте, иначе OpenSearch придётся перенастраивать после первой же ошибки.

Установка Java 17 и проверка версии

Ubuntu и Debian:
apt update
apt upgrade -y
apt install -y openjdk-17-jre-headless curl gnupg lsb-release pwgen

RHEL 9 и Rocky 9:
dnf update -y
dnf install -y java-17-openjdk-headless curl gnupg2 pwgen

Проверка:
java -version

Ожидаемый вывод: openjdk version 17.0.x. Graylog 6.x требует Java 17, Java 21 в этой ветке не поддерживается. Если в системе несколько JDK, переключитесь командой update-alternatives --config java и выберите 17.

Настройка vm.max_map_count и swap

sysctl -w vm.max_map_count=262144
echo "vm.max_map_count=262144" больше /etc/sysctl.d/99-opensearch.conf
sysctl --system
sysctl vm.max_map_count

Отключение swap:
swapoff -a
sed -i '/ swap / s/^/#/' /etc/fstab
free -h

OpenSearch деградирует при свопе: страницы индексов уходят на диск, latency поиска растёт, а при нехватке памяти ядро убивает процесс по OOM. Если swap нужен другим сервисам на хосте, оставьте его и задайте в opensearch.yml параметр bootstrap.memory_lock: true вместе с лимитом памяти в systemd-юните.

Добавление репозиториев MongoDB, OpenSearch и Graylog

Пакеты ставьте только из официальных репозиториев вендоров, не из сторонних PPA. Состав шагов одинаков для всех трёх продуктов: импорт GPG-ключа, файл репозитория, обновление индекса пакетов.

Ubuntu и Debian, общая схема:
1) скачайте GPG-ключ вендора и сохраните его через gpg --dearmor в /usr/share/keyrings/
2) создайте файл репозитория в /etc/apt/sources.list.d/ с атрибутом signed-by на этот ключ
3) apt update

Для MongoDB 7.0 используйте файл /etc/apt/sources.list.d/mongodb-org-7.0.list и ключ /usr/share/keyrings/mongodb-server-7.0.gpg. Для OpenSearch 2.x имя файла opensearch-2.x.list и ключ opensearch.gpg. Для Graylog 6.x достаточно установить пакет репозитория graylog-6.x-repository, он положит ключ и файл списка сам.

RHEL и Rocky:
rpm --import со ключом вендора
создайте /etc/yum.repos.d/mongodb-org-7.0.repo, /etc/yum.repos.d/opensearch-2.x.repo, /etc/yum.repos.d/graylog.repo
dnf makecache

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

Установка и первичная настройка MongoDB

apt install -y mongodb-org
systemctl enable --now mongod
systemctl status mongod
mongosh --eval 'db.runCommand({ping:1})'

Ответ с ok: 1 подтверждает, что демон слушает порт 27017. В /etc/mongod.conf задайте net.port: 27017 и net.bindIp: 127.0.0.1, затем перезапустите сервис: systemctl restart mongod.

Не открывайте 27017 во внешнюю сеть. Graylog на том же хосте обращается к MongoDB через loopback, доступ извне не нужен. Ролевую модель, TLS и лимиты памяти для mongod разбираем в отдельном руководстве по MongoDB в продакшене.

Создание пользователя и базы для Graylog

Пароль сгенерируйте, а не придумайте:
openssl rand -base64 24

Дальше в mongosh:
use graylog
db.createUser({ user: "graylog", pwd: "ВСТАВЬТЕ_СГЕНЕРИРОВАННЫЙ_ПАРОЛЬ", roles: [ { role: "readWrite", db: "graylog" } ] })

Проверка подключения под новым пользователем:
mongosh -u graylog -p --authenticationDatabase graylog

Роль readWrite на базу graylog даёт Graylog ровно те права, которые нужны: чтение и запись своей конфигурации без доступа к системным базам.

Установка и настройка OpenSearch

apt install -y opensearch
systemctl enable --now opensearch

Настройка opensearch.yml для Graylog

Минимальный набор строк для /etc/opensearch/opensearch.yml:
cluster.name: graylog
node.name: node-1
path.data: /var/lib/opensearch
path.logs: /var/log/opensearch
network.host: 127.0.0.1
http.port: 9200
discovery.type: single-node
bootstrap.memory_lock: true
plugins.security.disabled: true

discovery.type: single-node снимает проверки кворума для одного узла. network.host: 127.0.0.1 закрывает 9200 от сети, Graylog на том же хосте ходит на localhost. cluster.name должен совпадать с тем, что вы потом укажете в elasticsearch_hosts, иначе Graylog не увидит кластер.

plugins.security.disabled: true отключает плагин безопасности OpenSearch. Режим допустим только в закрытом контуре, где 9200 слушает loopback. В продакшене включайте плагин, выпускайте сертификаты для HTTP и transport слоёв и прописывайте логин с паролем в строке подключения Graylog.

Расчёт JVM heap и проверка cluster health

Правило heap: половина RAM, но не более 32 ГБ, выше этого порога JVM перестаёт использовать сжатые указатели. Для хоста с 16 ГБ RAM ставьте -Xms8g -Xmx8g в /etc/opensearch/jvm.options. Значения Xms и Xmx держите равными, иначе JVM будет перераспределять память на старте.

Перезапуск и проверки:
systemctl restart opensearch
curl -s localhost:9200/_cat/nodes?v
curl -s localhost:9200/_cluster/health?pretty

green означает, что все primary и replica шарды размещены. yellow на одиночном узле нормален, если replicas больше нуля: реплику некуда положить, поставьте Replicas: 0 в настройках Index Set Graylog. red показывает потерю primary шардов: проверьте df -h, curl -s localhost:9200/_cat/allocation?v и /var/log/opensearch/opensearch.log. По умолчанию OpenSearch переводит индексы в read-only при заполнении диска на 95%.

Политики жизненного цикла индексов OpenSearch (ISM) и шаблоны индексов описаны в руководстве по сбору логов в OpenSearch.

Установка Graylog и генерация секретов

apt install -y graylog-server, для RHEL и Rocky: dnf install -y graylog-server.

Генерация password_secret и root_password_sha2

pwgen -N 1 -s 96 создаёт 96-символьный password_secret. Альтернатива без pwgen: openssl rand -hex 48. Хеш пароля администратора: echo -n 'ВашПароль' | sha256sum.

password_secret шифрует пароли пользователей и токены API. После первого запуска его менять нельзя: все сохранённые секреты станут нечитаемыми, а пользователи потеряют доступ. root_password_sha2 хранит только SHA-256 хеш пароля admin, сам пароль в конфиг не попадает. Держите оба значения в менеджере секретов, а не в git рядом с конфигами.

Разбор server.conf: ключевые параметры

ПараметрЧто задаётПример значения
password_secretсоль шифрования паролей и токенов96 случайных символов
root_password_sha2хеш пароля adminвывод sha256sum
root_timezoneчасовой пояс интерфейсаUTC
http_bind_addressадрес веб-интерфейса127.0.0.1:9000 за reverse proxy
http_external_uriвнешний URL для ссылок в UIhttps://graylog.example.com/
elasticsearch_hostsадреса OpenSearchhttp://127.0.0.1:9200
mongodb_uriстрока подключения к MongoDBmongodb://graylog:ПАРОЛЬ@127.0.0.1:27017/graylog
message_journal_dirжурнал необработанных сообщений/var/lib/graylog-server/journal
journal_sizeлимит журнала в байтах5 ГБ по умолчанию

После правки /etc/graylog/server/server.conf запуск и проверка:
systemctl enable --now graylog-server
systemctl status graylog-server
tail -f /var/log/graylog-server/server.log

message_journal_dir выносите на отдельный диск. Когда OpenSearch недоступен, Graylog складывает входящие сообщения в журнал, и на медленном системном разделе он быстро займёт место. Для потока 20 ГБ в день поднимайте journal_size до 20-30 ГБ, чтобы пережить перезапуск хранилища без потери логов.

Первый вход и создание input для syslog и GELF

Веб-интерфейс открывается по адресу сервера на порту 9000, логин admin, пароль из root_password_sha2. Сразу после входа смените этот пароль в меню пользователя.

Syslog UDP input: настройка и проверка

System - Inputs - Select input - Syslog UDP - Launch new input. Заполните поля: Title (например, syslog-udp), Bind address 0.0.0.0, Port 514. Для непривилегированного запуска и контейнеров берите 1514: порты ниже 1024 требуют прав root.

Проверка с другого хоста:
logger -n 127.0.0.1 -P 514 "test message"
В Search ищите запросом message:test или source:*

Если сообщений нет, сначала проверьте firewall: ufw allow 514/udp или, для firewalld, добавьте правило для порта 514/udp с флагом --permanent и перезагрузите правила через firewall-cmd --reload. Второй частый виновник: input слушает 127.0.0.1, а пакеты приходят на внешний интерфейс.

GELF UDP и GELF HTTP: когда что использовать

GELF UDP даёт низкую задержку и не гарантирует доставку: подходит Docker и приложениям, которые шлют много коротких сообщений. GELF HTTP работает по TCP и подходит сервисам, умеющим только HTTP POST, а также скриптам, где важно знать, что сообщение принято.

Подключение Docker-контейнера:
--log-driver gelf --log-opt gelf-address=udp://graylog.example.com:12201

Отправка через curl:
curl -X POST -H "Content-Type: application/json" -d '{"version":"1.1","host":"test","short_message":"hello"}' http://127.0.0.1:12201/gelf

Для GELF HTTP заголовок Content-Type: application/json обязателен, без него Graylog вернёт 400. Проверка UDP-канала: echo "test" | nc -u -w1 127.0.0.1 12201. Маршрутизация по потокам, pipelines и дашборды собраны в отдельном руководстве по Graylog: централизованный сбор и анализ логов.

Ротация индексов и ретенция: чтобы диск не переполнился

По умолчанию Graylog ротирует индекс при достижении 20 ГБ или 30 дней. Для активного потока это слишком крупно: индекс на 20 ГБ долго восстанавливается, а поиск по нему идёт медленнее, чем по нескольким мелким.

Настройка Index Set и rotation strategy

System - Indices - Default index set - Edit. Поля: Index prefix (graylog), Shards, Replicas, Rotation strategy, Rotation period, Max size per index.

Поток логов в деньRotation periodMax size per indexShards
до 5 ГБ7 дней5 ГБ1
10-50 ГБ1 день10-20 ГБ1-2
больше 50 ГБ1 день20-30 ГБ2-3

Стратегия Index Time Size Optimization ротирует индекс при достижении лимита по размеру, но не чаще заданного периода. Для одного узла ставьте Replicas: 0, иначе кластер останется в статусе yellow. Новые параметры применяются к индексам, созданным после сохранения настроек, уже существующие остаются с прежними значениями. Период в один час без причины не ставьте: получите сотни мелких шардов и рост нагрузки на cluster state.

Retention strategy: удаление старых индексов

В том же окне Retention strategy. Варианты: Delete Index, Close Index, Do Nothing. Для продакшена берите Delete Index с ограничением по числу индексов или по возрасту.

Расчёт простой: 30 индексов по одному дню дают 30 дней хранения. Для аудита ставьте 90 индексов, но проверьте запас места: 90 индексов по 10 ГБ это около 900 ГБ диска.

Проверка:
curl -s localhost:9200/_cat/indices?v | grep graylog | wc -l
curl -s localhost:9200/_cat/indices?v | grep graylog
df -h /var/lib/opensearch

Не удаляйте индексы graylog_ напрямую через API OpenSearch. Graylog ведёт собственный список индексов, и ручное удаление оставит в нём ссылки на отсутствующие данные: поиск по диапазону дат начнёт падать с ошибкой, а часть сообщений станет недоступной.

Типовые ошибки первого запуска и как их диагностировать

Graylog не стартует: куда смотреть в первую очередь

systemctl status graylog-server
journalctl -u graylog-server -n 200 --no-pager
tail -n 100 /var/log/graylog-server/server.log

Что искать в выводе:

  • упоминание password_secret - параметр пустой или отсутствует в server.conf;
  • root_password_sha2 not set - не задан хеш пароля admin;
  • Unable to connect to MongoDB - неверный mongodb_uri, остановленный mongod или bindIp без нужного адреса;
  • Couldn't connect to Elasticsearch - недоступен 9200 либо в elasticsearch_hosts указан чужой cluster.name;
  • Address already in use - порт 9000 занят, проверьте ss -tulpn | grep 9000.

OpenSearch: red/yellow cluster и что с этим делать

Команды диагностики:
curl -s localhost:9200/_cluster/health?pretty
curl -s localhost:9200/_cat/shards?v
curl -s localhost:9200/_cat/allocation?v
df -h
tail -n 100 /var/log/opensearch/opensearch.log

yellow на одиночном узле лечится настройкой Replicas: 0. red означает потерю primary шардов, и причин обычно три: закончилось место на диске, узел убит по OOM, индекс повреждён после аварийного выключения. Освободите место и снимите блокировку записи, после чего дождитесь восстановления шардов.

СимптомПричинаКоманда проверкиРешение
Graylog не стартует, в логе про password_secretсекрет не заданjournalctl -u graylog-server -n 100прописать password_secret в server.conf
Ошибка подключения к MongoDBневерный URI или net.bindIpsystemctl status mongod; mongosh -u graylog -p --authenticationDatabase graylogисправить mongodb_uri, добавить 127.0.0.1 в bindIp
Authentication failedпароль в URI не совпадает с паролем пользователяmongosh --authenticationDatabase graylogпересоздать пользователя graylog или обновить строку подключения
OpenSearch не запускаетсяvm.max_map_count меньше 262144sysctl vm.max_map_countsysctl -w vm.max_map_count=262144 и файл /etc/sysctl.d/99-opensearch.conf
Кластер в статусе redнет места на диске или упал узелdf -h; curl -s localhost:9200/_cat/allocation?vосвободить место, вывести индексы из read-only
Input активен, сообщений нетfirewall или неверный Bind addressss -ulpn | grep 514открыть порт, поставить Bind address 0.0.0.0
Порт 9000 занятконфликт с другим сервисомss -tulpn | grep 9000сменить http_bind_address

Минимальная безопасность и продакшн-готовность

Firewall и закрытие портов

Правило простое: 9000 и 9200 доступны только из доверенной сети или через VPN, 514/udp и 12201 принимают трафик только от источников логов, 27017 закрыт полностью.

Ubuntu, ufw:
ufw allow from 10.0.0.0/8 to any port 9000 proto tcp
ufw allow from 10.0.0.0/8 to any port 514 proto udp
ufw allow from 10.0.0.0/8 to any port 12201
ufw deny 9200
ufw deny 27017
ufw enable

RHEL и Rocky, firewalld:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.0/8" port port="9000" protocol="tcp" accept'
firewall-cmd --reload

Проверка: ss -tulpn на самом хосте и скан с внешней машины, например nmap -p 9000,9200,27017 graylog.example.com.

Reverse proxy и TLS для Graylog

Пример серверного блока Nginx:
server {
listen 443 ssl http2;
server_name graylog.example.com;
ssl_certificate /etc/letsencrypt/live/graylog.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/graylog.example.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:9000;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}

В server.conf при работе за прокси задайте http_bind_address = 127.0.0.1:9000 и http_external_uri = https://graylog.example.com/. Без http_external_uri ссылки в интерфейсе и в уведомлениях будут вести на внутренний адрес. Проверка: curl -I https://graylog.example.com.

Дальше по списку: смена пароля admin, отдельные роли для чтения логов и администрирования через RBAC, TLS между Graylog и OpenSearch. Плагин безопасности OpenSearch включайте вместе с сертификатами для HTTP и transport слоёв, иначе строку подключения придётся править в момент, когда логи уже идут.

Чек-лист проверки после установки

  1. systemctl status mongod, opensearch, graylog-server показывают active (running).
  2. mongosh --eval 'db.runCommand({ping:1})' возвращает ok: 1.
  3. curl -s localhost:9200/_cluster/health?pretty возвращает green, yellow допустим только при Replicas больше нуля.
  4. Вход в веб-интерфейс под admin выполнен, пароль изменён.
  5. Создан минимум один input (Syslog UDP или GELF) со статусом Running.
  6. Тестовое сообщение найдено в Search по запросу message:test.
  7. В Index Set заданы rotation period и max size per index.
  8. Включена retention strategy Delete Index с лимитом по числу индексов.
  9. curl -s localhost:9200/_cat/indices?v показывает индексы graylog_ с текущей датой.
  10. Firewall закрывает 9200 и 27017 для внешних адресов, проверено ss -tulpn и сканом с другого хоста.
  11. Graylog отдаётся по HTTPS через reverse proxy, http_external_uri указывает на внешний домен.
  12. df -h показывает запас места, а tail -n 200 /var/log/graylog-server/server.log | grep ERROR не выдаёт строк за последние 15 минут.

Начинайте с первых трёх пунктов: если Graylog стартует, а кластер зелёный, останется приёма логов и хранение. Тестовое сообщение отправляйте сразу после создания input, иначе пустой Search не подскажет, где искать проблему: в firewall, в bind address или в конфиге сервера.

Поделиться: