Если вы занимаетесь или занимались в прошлом проверкой и анализом системных журналов в Linux, вы знаете, в какой кошмар может превратиться эта задача, если одновременно отслеживается множество сервисов.
В прошлом эту задачу приходилось решать в основном вручную, обрабатывая каждый тип журнала отдельно. К счастью, сочетание Elasticsearch, Logstash и Kibana на стороне сервера и Filebeat на стороне клиента превращает эту некогда сложную задачу в прогулку по парку.
Первые три компонента образуют так называемый стек ELK, основная цель которого – сбор логов с нескольких серверов одновременно (также известный как централизованное протоколирование).
Встроенный веб-интерфейс на базе java позволяет быстро просматривать логи с первого взгляда для облегчения сравнения и устранения неполадок. Эти клиентские журналы отправляются на центральный сервер с помощью Filebeat, который можно назвать агентом по отправке журналов.
Тестовая среда
Давайте посмотрим, как все эти части сочетаются друг с другом. Наша тестовая среда будет состоять из следующих машин:
Central Server: RHEL with IP address 192.168.100.247 Client Machine #1: Fedora with IP address 192.168.100.133 Client Machine #2: Debian with IP address 192.168.0.134
Примите во внимание, что требования к оперативной памяти для стека ELK (Elasticsearch, Logstash и Kibana) могут варьироваться в зависимости от таких факторов, как объем данных, сложность запросов и размер вашей среды.
Как установить стек ELK на RHEL
Начнем с установки стека ELK на сервер (это наша система RHEL 9), те же инструкции применимы к дистрибутивам на базе RHEL, таким как Rocky и Alma Linux.
Давайте разберемся, что делает каждый компонент:
- Elasticsearch хранит журналы, которые отправляют клиенты.
- Logstash обрабатывает эти журналы.
- Kibana предоставляет веб-интерфейс, который поможет нам проверять и анализировать журналы.
Установите следующие пакеты на сервере. Прежде всего, мы установим Java JDK 21 (последняя на момент написания статьи), которая является зависимостью компонентов ELK.
yum update cd /opt wget https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.rpm rpm -Uvh jdk-21_linux-x64_bin.rpm
Время проверки успешности установки:
java -version java version "21.0.2" 2024-01-16 LTS Java(TM) SE Runtime Environment (build 21.0.2+13-LTS-58) Java HotSpot(TM) 64-Bit Server VM (build 21.0.2+13-LTS-58, mixed mode, sharing)
Для установки последних версий Elasticsearch, Logstash и Kibana нам придется вручную создать репозитории следующим образом:
Установка Elasticsearch в RHEL
- Импортируйте открытый GPG-ключ Elasticsearch в менеджер пакетов rpm.
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
- Вставьте следующие строки в файл конфигурации репозитория
/etc/yum.repos.d/elasticsearch.repo
:
[elasticsearch] name=Elasticsearch repository for 8.x packages baseurl=https://artifacts.elastic.co/packages/8.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=0 autorefresh=1 type=rpm-md
- Установите пакет Elasticsearch.
yum install --enablerepo=elasticsearch elasticsearch
После завершения установки вам будет предложено запустить и включить службу elasticsearch:
- Запустите и включите службу.
systemctl daemon-reload systemctl enable elasticsearch systemctl start elasticsearch
- Разрешите трафик через TCP-порт 9200 в вашем брандмауэре:
firewall-cmd --add-port=9200/tcp firewall-cmd --add-port=9200/tcp --permanent
- Проверьте, отвечает ли Elasticsearch на простые запросы по HTTP с помощью команды curl:
curl -X GET http://localhost:9200
Вывод вышеуказанной команды должен быть похож на:
Убедитесь, что вы выполнили вышеуказанные шаги, а затем приступайте к установке Logstash. Поскольку и Logstash, и Kibana используют общий ключ Elasticsearch GPG, нет необходимости повторно импортировать его перед установкой пакетов.
Установка Logstash в RHEL
- Вставьте следующие строки в файл конфигурации репозитория
/etc/yum.repos.d/logstash.repo
:
[logstash-8.x] name=Elastic repository for 8.x packages baseurl=https://artifacts.elastic.co/packages/8.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md
- Установите пакет Logstash:
yum install logstash
- Добавьте SSL сертификат на основе IP-адреса сервера ELK в следующей строке под секцией
[ v3_ca ]
в/etc/pki/tls/openssl.cnf
:
[ v3_ca ] subjectAltName = IP: 192.168.100.247
- Сгенерируйте самоподписанный сертификат, действительный в течение 365 дней:
cd /etc/pki/tls openssl req -config /etc/pki/tls/openssl.cnf -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt
- Настройте входные, выходные и фильтрующие файлы Logstash:
Создайте файл/etc/logstash/conf.d/input.conf
и вставьте в него следующие строки. Это необходимо для того, чтобы Logstash научился обрабатывать биты, приходящие от клиентов. Убедитесь, что пути к сертификату и ключу совпадают с правильными путями, указанными в предыдущем шаге:
input { beats { port =>5044 ssl =>true ssl_certificate =>"/etc/pki/tls/certs/logstash-forwarder.crt" ssl_key =>"/etc/pki/tls/private/logstash-forwarder.key" } }
Выходной файл:
output { elasticsearch { hosts =>["localhost:9200"] sniffing =>true manage_template =>false index =>"%{[
metadata][beat]}-%{+YYYY.MM.dd}" document_type =>"%{[
metadata][type]}" } }
Файл фильтра (/etc/logstash/conf.d/filter.conf
). Для простоты мы будем регистрировать сообщения syslog:
filter {
if [type] == «syslog» { grok { match =>{ «message» =>»%{SYSLOGLINE}» } }
- Запустите и включите logstash:
systemctl daemon-reload systemctl start logstash systemctl enable logstash
- Настройте брандмауэр, чтобы Logstash мог получать журналы от клиентов (TCP-порт 5044):
firewall-cmd --add-port=5044/tcp firewall-cmd --add-port=5044/tcp --permanent
Установка Kibana в RHEL
- Вставьте следующие строки в файл конфигурации репозитория
/etc/yum.repos.d/kibana.repo
:
[kibana-8.x] name=Kibana repository for 8.x packages baseurl=https://artifacts.elastic.co/packages/8.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md
- Установите пакет Kibana:
yum install kibana
- Запустите и включите Kibana.
systemctl daemon-reload systemctl start kibana systemctl enable kibana
- Убедитесь, что вы можете получить доступ к веб-интерфейсу Kibana с другого компьютера (разрешите трафик на TCP-порт 5601):
firewall-cmd --add-port=5601/tcp firewall-cmd --add-port=5601/tcp --permanent
- Запустите Kibana, чтобы убедиться, что вы можете получить доступ к веб-интерфейсу:
http://localhost:5601 OR http://IP.com:5601
Установка Filebeat на клиентской машине
Мы покажем, как это сделать для Client #1 (затем повторите для Client #2, изменив пути, если это применимо к вашему дистрибутиву).
- Скопируйте SSL-сертификат с сервера на клиенты с помощью команды
scp
:
scp /etc/pki/tls/certs/logstash-forwarder.crt [email protected]:/etc/pki/tls/certs/
- Импортируйте открытый GPG-ключ Elasticsearch в менеджер пакетов rpm на клиентской машине:
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
- Создайте репозиторий для Filebeat (
/etc/yum.repos.d/filebeat.repo
) в дистрибутивах на базе RHEL:
[elastic-8.x] name=Elastic repository for 8.x packages baseurl=https://artifacts.elastic.co/packages/8.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md
- Настройте источник для установки Filebeat в дистрибутивах на базе Debian:
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add - sudo apt-get install apt-transport-https echo "deb https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-8.x.list
- Установите пакет Filebeat:
yum install filebeat [On RHEL and based Distros] apt install filebeat [On Debian and its derivatives]
- Запустите и включите Filebeat:
systemctl start filebeat systemctl enable filebeat
Настройте Filebeat
Сразу предупреждаем. Конфигурация Filebeat хранится в файле YAML, который требует строгих отступов. Будьте внимательны при редактировании /etc/filebeat/filebeat.yml
следующим образом:
- В разделе paths укажите, какие файлы журналов должны быть «отправлены» на сервер ELK.
- В разделе prospectors:
input_type: log document_type: syslog
- В разделе output:
- Откомментируйте строку, начинающуюся с logstash .
- Укажите IP-адрес вашего сервера ELK и порт, на котором Logstash слушает в hosts .
- Убедитесь, что путь к сертификату указывает на фактический файл, который вы создали в Шаге I (раздел Logstash) выше.
Вышеописанные шаги показаны на следующем изображении:
Сохраните изменения, а затем перезапустите Filebeat на клиентах:
systemctl restart filebeat
После того как мы выполнили вышеописанные шаги на клиентах, можно приступать.
Тестирование Filebeat
Чтобы убедиться, что журналы с клиентов могут успешно отправляться и приниматься, выполните следующую команду на сервере ELK:
curl -XGET 'http://localhost:9200/filebeat-*/_search?pretty'
Вывод должен быть похож на следующий (обратите внимание, как сообщения из /var/log/messages и /var/log/secure принимаются от client1 и client2):
В противном случае проверьте конфигурационный файл Filebeat на ошибки.
journalctl -xe
После попытки перезапуска Filebeat укажет вам на ошибочную строку(и).
Тестирование Kibana
После того как мы убедились, что журналы отправляются клиентами и успешно принимаются на сервере. Первое, что нам нужно будет сделать в Kibana, это настроить шаблон индекса и установить его по умолчанию.
Вы можете описать индекс как полную базу данных в контексте реляционной базы данных. Мы будем использовать filebeat-*
(или вы можете использовать более точные критерии поиска, как объясняется в
официальная документация).
Введите filebeat-*
в поле Имя индекса или шаблон, а затем нажмите Создать:
Обратите внимание, что позже вам будет разрешено ввести более тонкие критерии поиска. Затем нажмите на звезду внутри зеленого прямоугольника, чтобы настроить ее как шаблон индекса по умолчанию:
Наконец, в меню Обнаружить вы найдете несколько полей, которые можно добавить в отчет о визуализации журнала. Просто наведите на них курсор и нажмите Add:
Результаты будут показаны в центральной области экрана, как показано выше. Не стесняйтесь играть (добавлять и удалять поля из отчета журнала), чтобы познакомиться с Kibana.
По умолчанию Kibana отображает записи, которые были обработаны за последние 15 минут (см. правый верхний угол), но вы можете изменить это поведение, выбрав другой временной интервал:
Комментарии (0)