Использование связки Elasticsearch + Kibana + Logstash на Linux

Мы предоставляем услуги удаленного администрирования серверов

Использование связки Elasticsearch + Kibana + Logstash на Linux

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

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

В данной инструкции мы рассмотрим пример установки серверной части ELK на Linux CentOS. Также мы настроим сбор логов с 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, поэтому не будут работать без соответствующей платформы на сервере. Для ее установки необходимо загрузить дистрибутив с сайта Oracle и выполнить его установку.

Переходим на страницу загрузки Java — на открывшейся странице принимаем лицензионное соглашение:

После появятся ссылки на платформу — кликаем по ссылке для скачивания RPM пакета:

Нас перебросит на страницу ввода логина и пароля — необходимо авторизоваться или зарегистрироваться. После начнется процесс загрузки пакета, и когда он завершится, перекидываем файл на сервер CentOS, например, при помощи WinSCP.

Если у нас нет аккаунта на портале Oracle и нет возможности его зарегистрировать, то можно скачать более раннюю версию java командой:
curl -L -C — -b «oraclelicense=accept-securebackup-cookie» -O ‘http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm’

Устанавливаем скачанный пакет командой:

rpm -ivh jdk-*

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

java -version

Она должна вернуть, примерно, следующее:

openjdk version «1.8.0_212»
OpenJDK Runtime Environment (build 1.8.0_212-b04)
OpenJDK 64-Bit Server VM (build 25.212-b04, mixed mode)

Elasticsearch

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

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

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

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

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

rpm -ivh elasticsearch-*

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

systemctl enable elasticsearch

systemctl start elasticsearch

Kibana

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

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

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

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

rpm -ivh kibana-*

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

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. Если мы увидим сообщение «kibana not ready yet», просто ждем создания индекса (на это может уйти до 10 минут). После снова пробуем открыть страницу.

Мы должны увидеть страницу приветствия с заголовком «Welcome to Kibana».

Logstash

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

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

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

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

rpm -ivh logstash-*

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

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 — копируем ссылку на установочный пакет:

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

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

* если система вернет ошибку, устанавливаем wget командой yum install wget

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

rpm -ivh filebeat-*

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

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

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

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

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

dpkg -i 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

Открываем наш веб-интерфейс с кибаной и переходим в разделы ManagementIndex Patterns:

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

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

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

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

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

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

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

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

В открывшемся окне следуем инструкции — в моем случае, версия была 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