15 KiB
title, summary, date, draft, tags
| title | summary | date | draft | tags | ||
|---|---|---|---|---|---|---|
| Graylog | Краткое руководство по установки Graylog | 11 07 2024 | false |
|
Введение
Graylog — это платформа с открытым исходным кодом, предназначенная для управления логами. Она собирает и извлекает важные данные из логов сервера, которые обычно отправляются с помощью протокола Syslog.
Возможности Graylog:
- Поиск и визуализация логов в веб-интерфейсе.
- Настройка фильтрации и поиска логов.
- Мониторинг и отправка оповещений.
- Graylog позволяет отправлять логи и журналы событий с сотен сетевых устройств, включая серверы на Linux, Windows, сетевые устройства и другое оборудование.
Архитектура Graylog
Стек Graylog включает следующие компоненты:
- Сервер Graylog — веб-интерфейс для визуализации и настройки.
- MongoDB — используется для хранения метаданных.
- ElasticSearch или его форк OpenSearch — для хранения и полнотекстового поиска в структурированных и неструктурированных логах.
- Java (OpenJDK) — среда выполнения для OpenSearch (Elasticsearch). Мы будем использовать стек OpenSearch для хранения журналов, который является бесплатным аналогом стека ELK (Elasticsearch + Logstash + Kibana).
Причины выбора Graylog
- Распространенность и проверенность временем.
- Открытый исходный код.
- Бесплатная версия включает все необходимое.
- Минимальный функционал, оптимальный для наших задач.
- "Из коробки" решение требует минимальных настроек.
- Низкая ресурсоемкость по сравнению с ELK.
Подготовка сервера
| Параметры | Значения |
|---|---|
| Кол-во ядер процессора | 4 CPU |
| Размер ОЗУ | 8 GB |
| Размер DISK | 90 GB |
| Сетевой интерфейс | 2 eth / 2 подсети |
Для стабильной работы используйте следующие версии
| Дистрибутив | Версия |
|---|---|
| Debian | 12 |
| MongoDB | 6.0 |
| Graylog | 5.2 |
| OpenSearch | 2.17 |
Проверьте архитектуру системы, поскольку MongoDB 6.0 поддерживает только x64 Debian:
uname -m
# Нужно получить
# x86_64
Авторизуемся под рутом
su -
Password:
Устанавливаем sudo
apt install sudo
# Сразу добавим пользователю права на будущее
nano /etc/sudoers
Ниже этой строки пользователя root добавляем своего <username> ALL=(ALL:ALL) ALL
# User privilege specification
root ALL=(ALL:ALL) ALL
<username> ALL=(ALL:ALL) ALL
Настройка часового пояса (если не указано при установке ОС)
timedatectl set-timezone Asia/Yakutsk
Установка необходимых пакетов
# Обновляем пакеты
apt update -y && apt upgrade -y && apt dist-upgrade -y
# Устанавливаем целевые пакеты
apt install -y net-tools mc htop git wget curl make gcc neofetch lsb-release ca-certificates gnupg gnupg2 tar lbzip2 zip unzip screen pwgen
Так же рекомендуется воспользоваться настройками для начальной защиты сервера на Linux
Если вы настроили firewalld то дополните настройки:
# Если не используем ipv6 - лучше отключить:
firewall-cmd --remove-service=dhcpv6-client
# Добавляем порты в файрвол
firewall-cmd --permanent --add-port=9000/tcp
firewall-cmd --permanent --add-port=514/tcp
firewall-cmd --permanent --add-port=514/udp
firewall-cmd --permanent --zone=itsoft --add-service=https
firewall-cmd --permanent --zone=itsoft --add-service=http
# После добавления/удаления перезагрузим сервис:
firewall-cmd --reload
Настойка neofetch
# Первый запуск для создания ~/.config/neofetch/config.conf
neofetch
# Далее добавляем в .bashrc в самый конец файла
echo "neofetch" >> ~/.bashrc
# Далее идем редактировать конфиг
nano ~/.config/neofetch/config.conf
Я использую вот такие параметры для вывода минимально необходимого при подключении к серверу.
print_info() {
info title
info underline
info "OS" distro
info "Host" model
info "Kernel" kernel
info "Uptime" uptime
#info "Packages" packages
info "Shell" shell
#info "Resolution" resolution
#info "DE" de
#info "WM" wm
#info "WM Theme" wm_theme
#info "Theme" theme
#info "Icons" icons
info "Terminal" term
info "Terminal Font" term_font
info "CPU" cpu
#info "GPU" gpu
info "Memory" memory
# info "GPU Driver" gpu_driver # Linux/macOS only
# info "CPU Usage" cpu_usage
info "Disk" disk
# info "Battery" battery
# info "Font" font
# info "Song" song
# [[ "$player" ]] && prin "Music Player" "$player"
info "Local IP" local_ip
# info "Public IP" public_ip
# info "Users" users
# info "Locale" locale # This only works on glibc systems.
#info cols
}
Установка MongoDB 6
# Добавление публичного ключа:
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
Если при установке вы получили сообщение об unmet dependencies
The following packages have unmet dependencies:
mongodb-org-mongos : Depends: libssl1.1 (>= 1.1.1) but it is not installable
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
И повторяем установку mongodb-org
sudo apt-get install -y mongodb-org
Запуск сервиса MongoDB:
sudo systemctl daemon-reload
sudo systemctl enable mongod.service
sudo systemctl restart mongod.service
# Посмотреть статус сервиса
sudo systemctl --type=service --state=active | grep mongod
Переходим к развёртыванию OpenSearch
# Добавление публичного ключа для OpenSearch:
curl -o- https://artifacts.opensearch.org/publickeys/opensearch.pgp | sudo gpg --dearmor --batch --yes -o /usr/share/keyrings/opensearch-keyring
# Добавление репозитория OpenSearch:
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-get update
Установка OpenSearch с генерацией пароля администратора:
sudo OPENSEARCH_INITIAL_ADMIN_PASSWORD=$(tr -dc A-Z-a-z-0-9_@#%^-_=+ < /dev/urandom | head -c${1:-32}) apt-get install opensearch
Настройка OpenSearch
# Редактирование конфигурации OpenSearch:
sudo nano /etc/opensearch/opensearch.yml
cluster.name: graylog
node.name: ${HOSTNAME}
path.data: /var/lib/opensearch
path.logs: /var/log/opensearch
network.host: 0.0.0.0
# Добавляем в параметров перед plugins
discovery.type: single-node
action.auto_create_index: false
plugins.security.disabled: true
indices.query.bool.max_clause_count: 32768
Настройка параметров Java:
sudo nano /etc/opensearch/jvm.options
В параметрах Xms и Xmx установите половину объема ОЗУ сервера. Например, для сервера с 8 ГБ укажите:
-Xms4g
-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, доступная по подписке.
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
# Получаем сгенерированный пароль
XzN25fRfHv7NGbVODAGDcRWhzd6QAQQa11RXLIVgSXCgaDZexaxE4VlLA1abmEQjN25BlRVyEp3LNhN6HcJL8GYjV3RQgwkA
# Отправляем пароль для получения HEX ключа
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.
password_secret = <сгенерированный_пароль>
root_password_sha2 = <HEX_ключа>
http_bind_address = <IP_адрес_сервера>:9000
Запустите сервер graylog:
sudo systemctl enable --now graylog-server
sudo systemctl status graylog-server
настройка Graylog
Теперь нужно посмотреть логи сервера 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.
Initial configuration is accessible at 0.0.0.0:9000, with username 'admin' and password 'eDluAYfeaX'.
Try clicking on http://admin:eDluAYfeaX@0.0.0.0:9000
Видна ссылка для первого входа по временному паролю http://admin:eDluAYfeaX@0.0.0.0:9000
В первый раз нужно зайти под временным паролем, который указан в лог файле. Воспользуйтесь простым мастером начальной конфигурации. Режим Graylog data node используется для настройки OpenSearch кластера из нескольких нод. Для простой конфигурации из одного сервера логов, этот этап можно пропустить.
После первой настройки рекомендуется создать отдельного пользователя в System -> Users and Teams, назначив ему роль admin. Некоторые настройки встроенного администратора нельзя кастомизировать, поэтому лучше работать под отдельным пользователя. Назначьте пользователю роль admin и задайте email адрес.
Создайте сборщики данных в виде Input для разных устройств, например, Syslog UDP для Linux. Для каждого класса устройств лучше делать отдельный input (Linux сервера, сетевое оборудование, Windows хосты и т.д.).
Нужно указать его название, и порт, на котором сервер будет принимать данные. Остальные настройки оставить по-умолчанию.
Создайте индекс для класса Linux в System -> Indices, указав имя и настройки хранения логов.
Нужно указать имя, описание и префикс (например linux_indx ). Здесь можно также настроить сколько дней нужно хранить старые логи, и когда можно удалять старые индекс, а также максимальный размер индекса.
Для каждого input лучше создать отдельный Stream. Так разные сообщений от разных классов устройства будут находится в разных индексах. Перейдите в Stream -> Create Stream -> укажите название потока и выберите индекс, который нужно использовать.
В настройках Stream добавьте новое правило. Правило определят какие логи нужно отнести к этому потоку. В нашем случае выбираем match input -> выберите ваш Linux Input.
После этого запустите stream.