Graylog - программное обеспечение для сбора, агрегации и последующего анализа логов с оборудования и серверов.
Graylog работает, опираясь на Elasticsearch и MongoDB
Обобщенная схема взаимодействия компонентов представлена на рисунке:
Различные версии Graylog опираются на разные версии Elasticsearch.
Установим graylog4, который работает с версией elasticsearch 7.x
Для начала обновляемся и устанавливаем JAVA
# yum update
# dnf upgrade --refresh
# yum install java-17-openjdk java-17-openjdk-devel
# yum install pwgen
Создаем пользователя, под которым будет работать демон elasticsearch:
# useradd -M -r -s /bin/false elasticsearch
Для корректной работы Elasticsearch в Linux необходимо снять ограничения при открытии файлов для пользователя elasticsearch. Для этого вносим настройки в файл /etc/security/limits.conf.
# nano /etc/security/limits.conf
В конце файла прописываем:
* soft nofile 65536
* hard nofile 131072
elasticsearch soft memlock unlimited
elasticsearch hard memlock unlimited
elasticsearch soft nproc 4096
elasticsearch hard nproc 4096
Так как Elasticsearch очень требователен к ресурсам рекомендуется отключить использование файла подкачки:
# swapoff -a
Для увеличения быстродействия Elasticsearch так же рекомендуется увеличить количество адресов виртуальной памяти:
# nano /etc/sysctl.conf
vm.max_map_count = 262144
Проверка изменений:
# sysctl -p
Установим 7ую версию elasticsearch в директорию /usr/local/elasticsearch7.
# mkdir /usr/local/elasticsearch7
Установить через репозитарий сервис elasticsearch в России не получиться, так ка российские IP адреса заблокированы. См https://www.elastic.co/blog/elastic-stands-with-ukraine.
Легче всего через VPN скачать архив tar.gz исходных кодов стабильного релиза 7.17 и поместить архив в директорию /usr/local/elasticsearch7
# cd /usr/local/elasticsearch7
Распаковываем и назначаем права доступа:
# tar -xvf elasticsearch-7.17.9-linux-x86_64.tar.gz
# cd elasticsearch-7.17.9/
# chown -R elasticsearch:elasticsearch /usr/local/elasticsearch7
Создаем директории, которые Elasticsearch будет использовать в работе. Опция -p нужна что бы создать сразу несколько вложенных каталогов, а не создавать отдельно каталог /data, потом вложенный в него каталог /data/elasticsearch и т.д.
# mkdir -p /data/elasticsearch7/data
# mkdir -p /data/elasticsearch7/logs
# mkdir -p /data/elasticsearch7/pid
# chown -R elasticsearch:elasticsearch /data/elasticsearch7
Теперь следует внести правки в файл конфигурации Elasticsearch
# nano /usr/local/elasticsearch7/elasticsearch-7.17.9/config/elasticsearch.yml
cluster.name: graylog (в секции Cluster)
node.name: node-1 (в секции Node)
path.data: /data/elasticsearch7/data (в секции Paths)
path.logs: /data/elasticsearch7/logs (в секции Paths)
bootstrap.memory_lock: true (в секции Memory)
network.host: 0.0.0.0 (в секции Network)
discovery.seed_hosts: ["127.0.0.1"] (в секции Discovery)
cluster.initial_master_nodes: ["node-1"] (в секции Discovery)
action.auto_create_index: false (В секции Various добавить этот параметр)
Пробуем первый запуск в режиме демона:
# sudo -u elasticsearch /usr/local/elasticsearch7/elasticsearch-7.17.9/bin/elasticsearch -d -p /data/elasticsearch7/pid/elasticsearch.pid
После запуска ошибок быть не должно.
Проверка работы сервиса:
# ps ax | grep elastic
Мы должны увидеть два запущенных процесса - основной процесс и процесс координатора.
Проверяем открытые порты:
# ss -ntlp | grep java
Должны увидеть два открытых порта - 9200 и 9300
Собственно демон elasticsearch, отвечающий за поиск и индексацию работает на порту 9200. Дополнительный демон-координатор для обмена данными между несколькими экземплярами elasticsearch в кластере работает на порту 9300.
Для остановки сервиса, который запустили вручную нужно убить основной процесс.
# kill <НОМЕР_ПРОЦЕССА>
Создаем юнит systemd для запуска и остановки демона Elasticsearch:
# nano /etc/systemd/system/elasticsearch.service
Содержимое файла
[Unit]
Description=Elasticsearch
Wants=network-online.target
After=network-online.target
[Service]
Type=forking
PIDFile=/data/elasticsearch7/pid/elasticsearch.pid
PrivateTmp=true
User=elasticsearch
Group=elasticsearch
ExecStart=/usr/local/elasticsearch7/elasticsearch-7.17.9/bin/elasticsearch -d -p /data/elasticsearch7/pid/elasticsearch.pid
StandardOutput=journal
StandardError=inherit
LimitNOFILE=65535
LimitNPROC=4096
LimitAS=infinity
LimitFSIZE=infinity
TimeoutStopSec=0
KillSignal=SIGTERM
KillMode=process
SendSIGKILL=no
SuccessExitStatus=143
TimeoutStartSec=900
LimitMEMLOCK=infinity
[Install]
WantedBy=multi-user.target
Затем стартуем сервис:
# systemctl daemon-reload
# systemctl start elasticsearch.service
# systemctl enable elasticsearch.service
Проверка работы:
# systemctl status elasticsearch.service
Теперь проверяем работу интерфейса пользователя:
# curl http://localhost:9200
{
"name" : "node-1",
"cluster_name" : "graylog",
"cluster_uuid" : "2GW5T0y_TFe_2FxV2rM2dA",
"version" : {
"number" : "7.17.9",
"build_flavor" : "default",
"build_type" : "tar",
"build_hash" : "ef48222227ee6b9e70e502f0f0daa52435ee634d",
"build_date" : "2023-01-31T05:34:43.305517834Z",
"build_snapshot" : false,
"lucene_version" : "8.11.1",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
Для работы Graylog кроме Elasticsearch необходима база данных MongoDB.
Добавляем репозитарий MongoDB
# nano /etc/yum.repos.d/mongodb-org-6.0.repo
[mongodb-org-6.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/6.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-6.0.asc
Устанавливаем:
# dnf install mongodb-org
# systemctl start mongod
# systemctl enable mongod
Файл конфигурации сервера MongoDB расположен тут: /etc/mongod.conf
Наконец-то устанавливаем Graylog. Но тут ждет сюрприз несовместимости Graylog и Rocky Linux 9. Дело в том, что программное обеспечение Graylog подписывается с помощью ключа типа SHA-1.
Это неприемлемо в Rocky Linux 9.
Для решения проблемы временно изменяем политики безопасности для возможности принимать ключ SHA-1 в системе.
# update-crypto-policies --set LEGACY
Требуется перезагрузка:
# shutdown -r now
После перезагрузки устанавливаем Graylog4:
# rpm -Uvh https://packages.graylog2.org/repo/packages/graylog-4.2-repository_latest.rpm
# yum install graylog-server
И если процесс прошел без ошибок, радуемся и возвращаем политики по умолчанию:
# update-crypto-policies --set DEFAULT
Снова перезагружаемся:
# shutdown -r now
Далее Graylog необходимо сгенерировать сложные пароли для прописывания их в переменные password_secret и root_password_sha2 конфигурационного файла /etc/graylog/server/server.conf.
Сгенерируем и сохраним пароль из 96 символов:
# pwgen -N 1 -s 96
G0xgdQkMmtubJTNDd6rk8Mk74sbIoFiUxqYQzgyqidVKmx62IhkrMT5vl7Sh6hr0kyZNmWQ3nuY3cixIbGOniQjyBQJQqo14
Этот пароль должен быть одинаковый для всех кластеров Graylog. С помощью этого ключа буду защищаться все зашифрованные данные пользователей системы Graylog.
Сгенерим и сохраним хеш пароля для суперпользователя системы Graylog.
Имя суперпользователя Graylog по умолчанию - admin.
Этот пароль для суперпользователя admin жестко прописывается в конфигурации, изменить его через web-интерфейс нельзя.
# echo -n <МОЙ ПАРОЛЬ> | sha256sum
103a5db5fea66183590df6fc7965d7a9dc2c141e4426d44298867a2d7feb015c -
Прописываем пароли в конфигурационный файл и определяем интерфейсы, на которых будет работать Graylog
# nano /etc/graylog/server/server.conf
password_secret = G0xgdQkMmtubJT......niQjyBQJQqo14
root_password_sha2 = 103a5db5fea6......7feb019c
root_timezone = Europe/Moscow
http_bind_address = 0.0.0.0:9000
elasticsearch_hosts = http://localhost:9200
elasticsearch_shards=1
Запускам сервис
# systemctl daemon-reload
# systemctl start graylog-server.service
# systemctl enable graylog-server.service
Проверка работы сервиса:
# systemctl status graylog-server.service
Проверка прослушивания порта 9000, на котором работает интерфейс Graylog4:
# ss -tunelp | grep 9000
В Firewalld необходимо открыть порт 9000 для доступа к этому порту извне.
# firewall-cmd --permanent --add-port=9000/tcp
# firewall-cmd --reload
Доступ к web-интерфейсу Graylog4: http://<IPадрес>:9000/ (например, http://10.10.49.166:9000/)
Пользователь по умолчанию - admin
Пароль - <МОЙ ПАРОЛЬ>, тот что зашифровывали ранее.
Мы должны увидеть web-интерфейс сервиса graylog4. В моем случае он выглядел так:
На этом установка завершена.
Обратившись к обзорной страницы System ->Overview мы попадаем на страницу описывающую состояние сервиса Graylog. Первое уведомление сообщает нам, что в системе не настроены источники приема данных. Это действительно так. Их нужно настраивать, но это уже совсем другая история.