Elasticsearch + Kibana + Logstash на CentOS

Обновлено Обновлено: Опубликовано Опубликовано:

Если в двух словах, Elasticsearch предоставляет механизм хранения данных и их поиска, Kibana — веб-интерфейс для работы с данными, хранящимися в Elasticsearch, Logstash — инструмент для преобразования полученных от агента логов и их передачи в Elasticsearch. Таким образом, связка Elasticsearch + Kibana + Logstash (или ELK Stack) является инструментом по получению и хранению журналов. При этом поддерживаются разные платформы (Windows, Linux, BSD).

В данной инструкции мы рассмотрим пример установки серверной части ELK на Linux CentOS. Также мы настроим сбор логов с помощью Filebeat в CentOS, Ubuntu, Windows.

Подготовка сервера

Прежде чем начать, подготовим к установке и настройке наш сервер.

1. Установка wget

В процессе установки пакетов нам понадобиться скачивать установочные файлы. Для этого в системе должен быть установлен wget:

yum install wget

2. Настройка брандмауэра

Открываем порты для работы ELK:

firewall-cmd --permanent --add-port={5044,5601}/tcp

firewall-cmd --reload

где:

  • 5044 — порт, на котором слушаем Logstash.
  • 5601 — Kibana.

3. SELinux

Отключаем SELinux двумя командами:

setenforce 0

sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config

* первая команда выключит систему безопасности до перезагрузки сервера, вторая — навсегда.

Установка Java

Все программные продукты стека ELK разработаны на Java, поэтому не будут работать без соответствующей платформы на сервере.

Выполним установку LTS-версии openjdk:

yum install java-11-openjdk

Проверяем:

java --version

Мы должны увидеть что-то на подобие:

openjdk 11.0.20 2023-07-18 LTS
OpenJDK Runtime Environment (Red_Hat-11.0.20.0.8-1.el7_9) (build 11.0.20+8-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-11.0.20.0.8-1.el7_9) (build 11.0.20+8-LTS, mixed mode, sharing)

Подробнее процесс описан на странице Установка OpenJDK на Linux.

Elasticsearch

Переходим на страницу загрузки эластика и копируем ссылку на последнюю версию пакета RPM:

Скачиваем ссылку на RPM пакет для Elasticsearch

... и скачиваем по ней сам пакет:

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.9.1-x86_64.rpm

* в моем случае была версия 8.9.1.

Мы можем получить ошибку ERROR 403: Forbidden, так как загрузка файлов с официального сайта для российский IP-адресов может быть заблокирована. Используем VPN, прокси или браузер Tor.

После устанавливаем эластик на наш сервер:

rpm -ivh elasticsearch-*.rpm

По завершении инсталляции мы должны были увидеть сообщение типа:

----------------- Security autoconfiguration information --------------------
...
The generated password for the elastic built-in superuser is : qVeTdew73OFkaZn_VCwp
...
-----------------------------------------------------------------------------

* где qVeTdew73OFkaZn_VCwp — пароль для пользователя elastic. Его записываем — он нам пригодится позже.

Если мы захотим сменить данный пароль, вводим:

/usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic

Разрешаем автозапуск сервиса и запускаем его:

systemctl enable elasticsearch --now

Проверяем работоспособность сервиса:

curl -k -u elastic:qVeTdew73OFkaZn_VCwp https://localhost:9200

* где elastic:qVeTdew73OFkaZn_VCwp — логин elastic и пароль, который мы получили после установки.

Мы должны увидеть что-то на подобие:

{
  "name" : "monitoring",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "ddE_7u9zRBGvufj1Wgdjvw",
  "version" : {
    "number" : "8.9.1",
    "build_flavor" : "default",
    "build_type" : "rpm",
    "build_hash" : "a813d015ef1826148d9d389bd1c0d781c6e349f0",
    "build_date" : "2023-08-10T05:02:32.517455352Z",
    "build_snapshot" : false,
    "lucene_version" : "9.7.0",
    "minimum_wire_compatibility_version" : "7.17.0",
    "minimum_index_compatibility_version" : "7.0.0"
  },
  "tagline" : "You Know, for Search"
}

Идем дальше.

Kibana

Переходим на страницу загрузки Kibana и копируем ссылку на последнюю вервию пакета RPM:

Скачиваем ссылку на RPM пакет для Kibana

Скачиваем по ней пакет для установки kibana:

wget https://artifacts.elastic.co/downloads/kibana/kibana-8.9.1-x86_64.rpm

Устанавливаем приложение:

rpm -ivh kibana-*.rpm

Открываем на редактирование конфигурационный файл:

vi /etc/kibana/kibana.yml

Редактируем параметр host:

server.host: 192.168.1.10

* в данном примере мы говорим, что сервер должен слушать на интерфейсе 192.168.1.10.

Разрешаем автозапуск Kibana и запускаем ее:

systemctl enable kibana

systemctl start kibana

Открываем браузер и переходим по ссылке http://<IP-адрес сервера>:5601. Мы должны увидеть форму ввода токена.

Переходим на сервер и вводим команду для получения токена:

/usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana

На экране отобразится последовательность из символов — копируем ее и вставляем в Kibana. Кликаем по Configure Elastic:

Вводим токен для подключения к Elasticsearch

Откроется окно с вводом проверочного кода. Возвращаемся на сервер и вводим команду:

/usr/share/kibana/bin/kibana-verification-code

Мы получим 6-ти значный код. Вводим его в окне Kibana:

Вводим полученный проверочный код

Нажимаем Verify — начнется процесс настройки. После его завершения мы увидим окно ввода логина и пароля. На этом пока останавливаемся и переходим к настройке Logstash.

Logstash

Процесс установки Logstash аналогичен — переходим на страницу загрузки программного продукта, копируем ссылку на пакет RPM:

Скачиваем ссылку на RPM пакет для Logstash

Скачиваем пакет на нашем сервере:

wget https://artifacts.elastic.co/downloads/logstash/logstash-8.9.1-x86_64.rpm

... и устанавливаем его:

rpm -ivh logstash-*.rpm

Разрешаем автозапуск и стартуем сервис:

systemctl enable logstash

systemctl start logstash

Настройка Logstash

Настройки для логстэша хранятся в каталоге /etc/logstash/conf.d в файлах формата JSON. Для конфигурации используются следующие секции:

  1. input (входные данные).
  2. filter (фильтры).
  3. output (выходные данные).

Для каждой из них мы создадим свой файл.

vi /etc/logstash/conf.d/input.conf

input {
  beats {
    port => 5044
  }
}

* в данном примере мы настроили logstash для приема логов на порту 5044.

vi /etc/logstash/conf.d/filter.conf

filter {
  if [type] == "syslog" {
    grok {
      match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
      add_field => [ "received_at", "%{@timestamp}" ]
      add_field => [ "received_from", "%{host}" ]
    }
    date {
      match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
    }
  }
}

vi /etc/logstash/conf.d/output.conf

output {
  elasticsearch { hosts => ["localhost:9200"]
    hosts => "localhost:9200"
    manage_template => false
    index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
    document_type => "%{[@metadata][type]}"
  }
}

Перезапускаем сервис logstash:

systemctl restart logstash

Немного подождем — приложению нужно около 1 минуты, чтобы запуститься. После, введя команду:

ss -tunlp | grep 5044

... мы увидим что-то на подобие:

tcp  LISTEN   0   128   :::5044   :::*   users:(("java",pid=11745,fd=114))

Сервис запустился и готов принимать логи.

Установка и настройка клиента

Для отправки логов на сервер, мы будем использовать пакет Filebeat. Он поддерживается для различных систем — Linux, Windows, Mac. Мы разберем процедуру установки и настройки для первых двух.

Установка на Linux CentOS

Инструкция подходит для CentOS / Red Hat / Fedora. Переходим на страницу загрузки Filebeat — копируем ссылку на установочный пакет:

Скачиваем ссылку на RPM пакет для Filebeat

Используя скопированную ссылку, скачиваем пакет на сервере:

wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.9.1-x86_64.rpm

Если система вернет ошибку, устанавливаем wget командой:

yum install wget

После устанавливаем пакет:

rpm -ivh filebeat-*.rpm

Установка на Linux Ubuntu

Инструкция подходит для Ubuntu / Debian. Переходим на страницу загрузки Filebeat — копируем ссылку на установочный пакет:

Скачиваем ссылку на DEB пакет для Filebeat

Используя скопированную ссылку, скачиваем пакет на сервере:

wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.9.1-amd64.deb

После устанавливаем пакет:

dpkg -i filebeat-*.deb

Установка на Windows

Переходим на страницу загрузки Filebeat — скачиваем архив для Windows:

Скачиваем архив Filebeat для Windows

Распаковываем его в папку C:\Program Files (где C: — диск, на котором установлена система).

Открываем Powershell и вводим команду:

set-executionpolicy unrestricted

На запрос «Вы хотите изменить политику выполнения?» отвечаем утвердительно:

(значением по умолчанию является "N"):Y

Переходим в каталог с Filebeat:

cd "C:\Program Files\Filebeat\"

... и запускаем скрипт установки сервиса:

.\install-service-filebeat.ps1

Настройка после установки

Открываем конфигурационный файл для filebeat.

а) в Linux

vi /etc/filebeat/filebeat.yml

б) в Windows открываем файл filebeat.yml любым текстовым редактором (сам файл находится в каталоге, который мы распаковали скаченный архив).

Находим раздел filebeat.inputs, в нем «type: log». Нам интересны две опции — enabled и paths:

...
  enabled: true
   ...
  paths:
    - /var/log/*.log
    #- c:\programdata\elasticsearch\logs\*
    - /var/log/secure
    - /var/log/messages
...

* в данном примере мы включили опцию сбора лога (enabled: true) и добавили отправку логов безопасности (/var/log/secure) и системных событий (/var/log/messages).
* для Windows пути будут другие, например, C:\Windows\*.log

Находим опцию output.elasticsearch и комментируем 2 строки:

#output.elasticsearch:
  # Array of hosts to connect to.
#  hosts: ["localhost:9200"]

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

Находим настройку отправки лога в Logstash и снимаем комментарии, меняем адрес сервера logstash и добавляем строки с template — должно получиться:

output.logstash:
  # The Logstash hosts
  hosts: ["192.168.1.10:5044"]
  template.name: "filebeat"
  template.path: "filebeat.template.json"
  template.overwrite: false

* где 192.168.1.10 — адрес, на котором крутится наш сервер.

Разрешаем автозапуск filebeat и стартуем сервис:

systemctl enable filebeat

systemctl start filebeat

Просмотр логов в Kibana

Открываем наш веб-интерфейс с кибаной. Вводим логин elastic и пароль, который мы получили с помощью команды elasticsearch-reset-password (в нашем примере, qVeTdew73OFkaZn_VCwp).

Кликаем по символу меню - в разделе Analytics переходим в Discover:

Создание Index Patterns в Kibana

В окне справа кликаем по Create Index Pattern:

Create Index Pattern

В строке ввода текста вводим filebeat-*:

Create Index Pattern

* filebeat — это значение параметра template.name, которое мы задавали на стадии настройки filebeat.

... и нажимаем Next Step.

В поле «Time field name» выбираем значение @timestamp и нажимаем Create index pattern:

В поле «Time field name» выбираем значение @timestamp

Очистка устаревших данных

Разберем пример удаления логов, которые старше 30 дней. Для этого будем использовать Elasticsearch Curator. Для установки последнего переходим на страницу Curator Reference, выбираем текущую версию программного продукта и кликаем по Installation:

Установка Elasticsearch Curator

В открывшемся окне переходим на нужную инструкцию по установки (так как у нас CentOS, выбираем YUM Repository):

Установка Elasticsearch Curator

В открывшемся окне следуем инструкции — в моем случае, версия была 5.8.

Загружаем и устанавливаем публичный gpg-ключ, которым подписаны пакеты добавляемого репозитория:

rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch

Создаем файл репозитория:

vi /etc/yum.repos.d/curator.repo

[curator-5]
name=CentOS/RHEL 7 repository for Elasticsearch Curator 5.x packages
baseurl=https://packages.elastic.co/curator/5/centos/7
gpgcheck=1
gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1

* на момент написания статьи уже вышла версия CentOS 8, но куратор был только для 7. Вполне возможно, что в ближайшее время появится curator для новой версии операционной системы.

Выполняем установку командой yum:

yum install elasticsearch-curator

После установки куратора, создаем каталог для конфигурационных файлов:

mkdir /etc/curator

Создаем конфигурационный файл config.yml:

vi /etc/curator/config.yml

client:
  hosts:
    - 127.0.0.1
  port: 9200
  url_prefix:
  use_ssl: False
  certificate:
  client_cert:
  client_key:
  ssl_no_validate: False
  http_auth:
  timeout: 30
  master_only: False

* в данном файле нас интересует настройка hosts — мы указали, что curator должен подключаться к elasticsearch на локальном хосте (127.0.0.1) порту 9200.

vi /etc/curator/action.yml

actions:
  1:
    action: close
    description: >-
      Close indices older than 30 days (based on index name).
    options:
      ignore_empty_list: True
      delete_aliases: False
      disable_action: False
    filters:
    - filtertype: pattern
      kind: prefix
      value: filebeat-
    - filtertype: age
      source: name
      direction: older
      timestring: '%Y.%m.%d'
      unit: days
      unit_count: 30

  2:
    action: delete_indices
    description: >-
      Delete indices older than 30 days (based on index name).
    options:
      ignore_empty_list: True
      disable_action: False
    filters:
    - filtertype: pattern
      kind: prefix
      value: filebeat-
    - filtertype: age
      source: name
      direction: older
      timestring: '%Y.%m.%d'
      unit: days
      unit_count: 30

Запускаем curator для удаления устаревших логов:

curator --config /etc/curator/config.yml /etc/curator/action.yml

# CentOS # DevOps # Серверы
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет