Установка Graylog 6.1 на Debian 12

Graylog — это сервер сбора и анализа логов, в этой статье будет описана установка этого сервера версии 6.1 на Debian 12.

О решении Graylog

Graylog это сервер для сбора и анализа логов. Который позволяет собирать логи с других серверов или устройств (роутеров, принтеров) различными способами. Graylog может выполнять широкий спектр функций:

  • централизированный сбор логов;
  • аналитика собранных данных;
  • мониторинг за событиями безопасности;
  • обнаружение инцидентов и оповещения.

Официальную документацию по этому решению вы найдёте здесь.

Есть несколько версий данного решения:

  • Graylog Open. Бесплатная версия с открытым исходным кодом, доступна для разворачивания на своих серверах;
  • Graylog Enterprise. Платное решение предлагающее работу на своём железе. Предоставляет все возможности Graylog Open, а также дополнительные возможности и доступ к службе поддержки.
  • Graylog Security. Предоставляет все функции Graylog Enterprise, а также набор инструментов для обнаружения, расследования и реагирования на угрозы (TDIR). Ориентированный на обеспечение кибербезопасности.
  • Graylog Cloud. Облачный сервис, который сокращает издержки, обеспечивает быстрое развертывание и бесперебойное обновление.

Этот сервер работает на Java. Для хранения сообщений журнала и метаданных используется NoSQL база данных MongoDB. А в качестве поисковой системы можно использовать OpenSearch или ElasticSearch. Я же буду использовать DataNode — это самоуправляемый OpenSearch для Graylog.

Таким образом мы установим:

  • Java (на нём работает Graylog и DataNode);
  • MongoDB (хранит метаданные и конфигурационные данные, действует как постоянное хранилище данных для узлов OpenSearch);
  • DataNode (служба, которая управляет OpenSearch, так что вам не нужно устанавливать и настраивать OpenSearch отдельно);
  • Graylog (сервер сбора и анализа данных со встроенным веб-интерфейсом).

Кстати! Как заметили в комментариях, при установке Mongodb на KVM (proxmox), можно столкнуться с проблемой совместимости CPU, для решения можно установить тип процессора на host.

Системные требования

Что касается системных требований. На рисунке выше, сами разработчики предъявляют следующие системные требования:

  • При суточной загрузки логов в 1-10GB. Graylog + OpenSearch = 40 GB.

Сервер на самом деле потребляет очень много оперативной памяти. Но в моём случае (при суточной загрузке логов в 10 МБ) необходимо 5 GB оперативки. На это влияют три процесса сервера:

  • opensearch = 1.63 GB;
  • graylog = 1.27 GB;
  • graylog-datanode = 1GB.

То-есть, как минимум, у вас должно быть 5 GB оперативки, но лучше выделить 6 GB с запасом.

Установка Java

Установим Java и чтобы проверить правильность установки посмотрим на её версию:

# apt install -y openjdk-17-jre

# java -version

Установка MongoDB

Настроим репозиторий:

# apt install -y curl gnupg

# curl -fsSL https://www.mongodb.org/static/pgp/server-7.0.asc | gpg -o /usr/share/keyrings/mongodb-server-7.0.gpg --dearmor

# echo "deb [signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg] http://repo.mongodb.org/apt/debian bookworm/mongodb-org/7.0 main" > /etc/apt/sources.list.d/mongodb-org-7.0.list

Установим MongoDB:

# apt update

# apt install -y mongodb-org

Включим и добавим в автозагрузку службу сервера mongodb, проверим её статус и зафиксируем версию:

# systemctl enable --now mongod

# systemctl status mongod

# apt-mark hold mongodb-org

Установка Data Node

Настроим репозиторий:

# wget https://packages.graylog2.org/repo/packages/graylog-6.1-repository_latest.deb

# dpkg -i graylog-6.1-repository_latest.deb

Установим Data Node:

# apt update

# apt install -y graylog-datanode

Сгенерируем секретный пароль и запишем его в конфиг:

# head -c 96 /dev/urandom | base64 | tr -dc 'A-Za-z0-9' | head -c 96; echo

# nano /etc/graylog/datanode/datanode.conf
password_secret = <сгенерированный пароль>

По умолчанию Data Node использует каталог mmapfs для хранения своих индексов. Ограничения операционной системы по умолчанию на количество mmap, скорее всего, будут слишком низкими, что может привести к нехватке памяти. Исправим это:

# nano /etc/sysctl.d/graylog.conf
vm.max_map_count=262144

# sysctl -p /etc/sysctl.d/graylog.conf
vm.max_map_count = 262144

Включим службу сервера и добавим её в автозагрузку, а также посмотрим на статус службы:

# systemctl enable --now graylog-datanode

# systemctl status graylog-datanode

Установка Graylog

Установим Graylog сервер:

# apt install graylog-server

Сгенерируем хэш пароль от админки:

# echo -n '<пароль>' | sha256sum

В конфиг добавим секретный пароль (который мы генерировали для Data Node) и хеш пароля от админки. А также укажем, на каком адресе работает сервер:

# nano /etc/graylog/server/server.conf
password_secret = <сгенерированный секрет>
root_password_sha2 = <сгенерированный хэш пароль>
http_bind_address = <ip_сервера>:9000

Запустим службу сервера и добавим её в автозагрузку:

# systemctl daemon-reload

# systemctl enable --now graylog-server

# systemctl status graylog-server

После запуска посмотрим первые логи:

# tail /var/log/graylog-server/server.log

Там должна быть ссылка с логином и паролем для первого входа, например такая — http://admin:GjVZHoYPQU@192.168.0.28:9000. При первом входе перейдите по этой ссылке в вашем браузере.

Настройка сертификатов

При первом входе нужно будет настроить сертификаты. Вы можете загрузить на сервер свой CA файл, если у вас есть такой, или создать CA и использовать его. Я покажу как создать новый CA.

Выбираем вкладку «Create new CA» и нажимаем на кнопку «Create CA».

Дальше настроим политику обновления сертификатов, например я указал обновлять сертификаты раз в год:

Дальше нажмите на кнопку «Provision certificate and continue»:

Ну и наконец нажмите на кнопку «Resume startup»:

Первый вход в систему

После проделанного вы сможете зайти под пользователем admin и вашим придуманным паролем (вы для него создавали хэш):

Настройка Nginx как Reverse Proxy

Для удобства теперь мы можем установить и настроить Nginx в качестве Reverse Proxy.

Установим Nginx и настроим конфиг для проксирования на Graylog:

# apt install nginx

# nano /etc/nginx/sites-available/graylog.conf

server {
    listen 80;
    server_name srv-graylog;

    # Переадресация всех запросов на HTTPS
    return 301 https://$host$request_uri;
}

server {
        listen 443 ssl;
        server_name     srv-graylog;
        
        ssl_certificate     <путь к сертификату>;
        ssl_certificate_key <путь к ключу>;
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers HIGH:!aNULL:!MD5;
        
        location / {
          proxy_set_header Host $http_host;
          proxy_set_header X-Forwarded-Host $host;
          proxy_set_header X-Forwarded-Server $host;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header X-Graylog-Server-URL http://$server_name/;
          proxy_pass http://127.0.0.1:9000;
    }
}

Внимание! В примере выше у вас должны быть сертификаты TLS, их получение я в этой статье не рассматриваю. Пути к сертификату и ключу вы должны указать в параметрах ssl_certificate и ssl_certificate_key.

Применим изменения:

# rm -rf /etc/nginx/sites-enabled/default
# ln -s /etc/nginx/sites-available/graylog.conf /etc/nginx/sites-enabled/
# systemctl restart nginx

Перенастроим сервер Graylog:

# nano /etc/graylog/server/server.conf
http_bind_address = 127.0.0.1:9000
web_listen_uri = http://127.0.0.1:9000/
web_endpoint_uri = http://<адрес сервера>/api/

# systemctl restart graylog-server.service

Теперь доступ к Graylog будет не по 9000 порту, а по 443 (протокол https).

Итог

После того, как установка Graylog окончена, у вас в системе появятся три службы с конфигами:

  • graylog-server.service
    • /etc/graylog/server/server.conf
  • graylog-datanode.service
    • /etc/graylog/datanode/datanode.conf
  • mongod.service
    • /etc/mongod.conf

Дополнительно, но не знаю на сколько это повлияло на потребление памяти (в моём случае оно уменьшилось и больше не растёт), я в конфиг graylog добавил следующее:

# nano /etc/graylog/server/server.conf
enabled_index_rotation_strategies = count,size,time,time-size-optimizing
rotation_strategy = size
elasticsearch_max_size_per_index = 2147483648

То есть ротация индексов будет по размеру, а максимальный размер индекса равен 2 GB.

Дополнительно есть конфиг для opensearch (но его редактировать не получится, он управляется службой graylog-datanode и постоянно перегенерируется):

  • /var/lib/graylog-datanode/opensearch/config/opensearch/opensearch.yml

База данных opensearch лежит в каталогах:

  • данные — /var/lib/graylog-datanode/opensearch/data
  • логи — /var/log/graylog-datanode/opensearch

Логи сервера:

  • /var/log/graylog-server/server.log
  • /var/log/graylog-datanode/datanode.log
  • /var/log/mongodb/mongod.log

О том, как начать собирать логи с ваших серверов я опишу в отдельных статьях.

Если понравилась статья, подпишись на мой канал в VK или Telegram.

9 комментариев к “Установка Graylog 6.1 на Debian 12”

  1. Приветсвую.
    в статье не раскрыты минимальные и оптимальные системные требования.

    Ответить
    • Согласен, сам только начинаю использовать это решение, поэтому на момент написание статьи не знал сколько потребуется ресурсов. Уже знаю, так что добавлю в статью. Кстати, оперативной памяти требуется не мало, как минимум 5GB для 6 серверов и 2 роутеров, при хранении логов в течении 20 дней.

      Ответить
  2. Хочу обратить внимание, те кто будут устанавливать Mongodb на KVM (proxmox), могут столкнуться с проблемой совместимости CPU.

    Одно из решений, установить тип процессора на host

    Ответить
  3. Добрый день.
    Во многих инструкциях написано, что для работы GreyLog требуется Java. У вас так же указано, что ее необходимо установить.
    Но на оф сайте про нее ни слова…
    Прошел все по инструкции без установки Java и все работает.
    Не пойму, зачем тогда требуется Java?

    Ответить
    • Если вы установили Graylog, посмотрите какие процессы запущены, например с помощью top или htop, там должна быть Java. Возможно что Java в вашем случае была установлена по зависимостям, а я её устанавливал вручную. В конфигах Graylog даже можно управлять выделяемой памятью для Java. Посмотрите, есть у вас Java процессы?

      Ответить
      • Если проверить наличие java командой: java —version , то ничего не покажет, как будто она не установлена.
        Но вот в процессах она есть, запущена от имени сервиса greylog+. Возможно она ставится вместе с graylog-datanode

        Ответить
  4. Здравствуйте, нет доступа к репозиторию 403 ошибка, видимо он недоступен из России? Есть ли нормальное зеркало с файлами graylog?

    Ответить
    • Здравствуйте, вообще большая беда с этими блокировками, приходится обходными путями пользоваться. Но репозиторий не подскажу, сам не знаю, если найдёте напишите, добавлю его в статью.

      Ответить

Оставьте комментарий