Как установить стек ELK: Elasticsearch + Logstash + Kibana на RHEL

Если вы занимаетесь или занимались в прошлом проверкой и анализом системных журналов в 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

  1. Импортируйте открытый GPG-ключ Elasticsearch в менеджер пакетов rpm.
    rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
  2. Вставьте следующие строки в файл конфигурации репозитория /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
  3. Установите пакет Elasticsearch.
    yum install --enablerepo=elasticsearch elasticsearch

    После завершения установки вам будет предложено запустить и включить службу elasticsearch:
  4. Запустите и включите службу.
    systemctl daemon-reload
    systemctl enable elasticsearch
    systemctl start elasticsearch
  5. Разрешите трафик через TCP-порт 9200 в вашем брандмауэре:
    firewall-cmd --add-port=9200/tcp
    firewall-cmd --add-port=9200/tcp --permanent
  6. Проверьте, отвечает ли Elasticsearch на простые запросы по HTTP с помощью команды curl:
    curl -X GET http://localhost:9200

    Вывод вышеуказанной команды должен быть похож на:

Убедитесь, что вы выполнили вышеуказанные шаги, а затем приступайте к установке Logstash. Поскольку и Logstash, и Kibana используют общий ключ Elasticsearch GPG, нет необходимости повторно импортировать его перед установкой пакетов.

Установка Logstash в RHEL

  1. Вставьте следующие строки в файл конфигурации репозитория /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
  2. Установите пакет Logstash:
    yum install logstash
  3. Добавьте SSL сертификат на основе IP-адреса сервера ELK в следующей строке под секцией [ v3_ca ] в /etc/pki/tls/openssl.cnf:
    [ v3_ca ]
    subjectAltName = IP: 192.168.100.247
  4. Сгенерируйте самоподписанный сертификат, действительный в течение 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
  5. Настройте входные, выходные и фильтрующие файлы 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}» } }
date { match =>[ «timestamp», «MMM d HH:mm:ss», «MMM dd HH:mm:ss» ] } } }
  1. Запустите и включите logstash:
    systemctl daemon-reload
    systemctl start logstash
    systemctl enable logstash
  2. Настройте брандмауэр, чтобы Logstash мог получать журналы от клиентов (TCP-порт 5044):
    firewall-cmd --add-port=5044/tcp
    firewall-cmd --add-port=5044/tcp --permanent

Установка Kibana в RHEL

  1. Вставьте следующие строки в файл конфигурации репозитория /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
  2. Установите пакет Kibana:
    yum install kibana
  3. Запустите и включите Kibana.
    systemctl daemon-reload
    systemctl start kibana
    systemctl enable kibana
  4. Убедитесь, что вы можете получить доступ к веб-интерфейсу Kibana с другого компьютера (разрешите трафик на TCP-порт 5601):
    firewall-cmd --add-port=5601/tcp
    firewall-cmd --add-port=5601/tcp --permanent
  5. Запустите Kibana, чтобы убедиться, что вы можете получить доступ к веб-интерфейсу:
    http://localhost:5601
    OR
    http://IP.com:5601

Установка Filebeat на клиентской машине

Мы покажем, как это сделать для Client #1 (затем повторите для Client #2, изменив пути, если это применимо к вашему дистрибутиву).

  1. Скопируйте SSL-сертификат с сервера на клиенты с помощью команды scp:
    scp /etc/pki/tls/certs/logstash-forwarder.crt [email protected]:/etc/pki/tls/certs/
  2. Импортируйте открытый GPG-ключ Elasticsearch в менеджер пакетов rpm на клиентской машине:
    rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
  3. Создайте репозиторий для 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
  4. Настройте источник для установки 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
  5. Установите пакет Filebeat:
    yum install filebeat   [On RHEL and based Distros]
    apt install filebeat   [On Debian and its derivatives]
  6. Запустите и включите 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 минут (см. правый верхний угол), но вы можете изменить это поведение, выбрав другой временной интервал:

Зарубин Иван Эксперт по Linux и Windows

Парашютист со стажем. Много читаю и слушаю подкасты. Люблю посиделки у костра, песни под гитару и приближающиеся дедлайны. Люблю путешествовать.

Вдохновлен www.tecmint.com

Похожие статьи

Комментарии (0)