Установка ELK Stack (Elasticsearch, Logstash, Kibana)

Надежное решение для поиска, анализа и визуализации данных.

Elasticsearch распространяет поисковую и аналитическую систему RESTful NoSQL на основе Lucene, облегчённый конвейер обработки данных, Logstash используется для управления событиями и журналами из разных источников, а Kibana, который является веб-приложением, используется для визуализации данных, который работает поверх Elsticsearch.

Процессор: 2
Оперативная память: 4Gb
ОС: CentOS/Debian/Ubuntu

В данной статье будет рассмотрен вариант с установкой ELK на систему CentOS 7.
Поскольку многие структуры ELK построены на Java, то память - основной ресурс потребления и чем её больше, тем лучше. Идеальное решение - 64Gb

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

Дисковая подсистема так же важна, особенно если строится кластерное решение. Использовать зеркалирование не обязательно, поскольку Elastic прекрасно кластеризуется, а сохранив RAID0 можно получить существенный прирост в скорости.
Всё рекомендую использовать SSD-накопители при интенсивной записи.

Компоненты стека ELK работают на Java. Поддерживает как OpenJDK, так и Oracle Java.
Я рекомендую использовать Oracle JDK 1.8.

Загружаем RPM с последней стабильной версией, на момент написания статьи - это 8u201.

wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http:%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" https://download.oracle.com/otn-pub/java/jdk/8u201-b09/42970487e3af4f5aa5bca3f542482c60/jdk-8u201-linux-x64.rpm

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

rpm -ivh jdk-8u201-linux-x64.rpm

Проверяем установку:

# java -version
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)

Elasticsearch — масштабируемая поисковая система полнотекстового поиска и аналитики данных с открытым исходным кодом. Данная утилита позволяет в режиме реального времени хранить, искать и анализировать большие объемы данных.

Приступим к установке компонентов ELK.

Установим и настроим Elasticsearch .

Добавим ключ elastic.co в систему:

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

Загружаем пакет Elasticsearch с официального сайта:

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

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

rpm -ivh elasticsearch-6.6.2.rpm

Выполняем базовую конфигурацию Elasticsearch

Редактируем файл /etc/elasticsearch/elasticsearch.yml

Включаем блокировку памяти:

bootstrap.memory_lock: true

Раскомментируем сетевые настройки сервиса:

network.host: localhost
http.port: 9200

Сохраняем файл конфигурации.

Редактируем настройки Elasticsearch

Вносим изменения в конфигурационный файл сервиса /usr/lib/systemd/system/elasticsearch.service для конфигурации блокировки памяти.

Раскомментируем или добавим параметр:

LimitMEMLOCK=infinity

А так же расскоментируем параметр MAX_LOCKED_MEMORY в файле /etc/sysconfig/elasticsearch

MAX_LOCKED_MEMORY=unlimited

Перезагружаем настройки systemd, добавляем сервис в автозапуск и стартуем:

systemctl daemon-reload
systemctl enable elasticsearch
systemctl start elasticsearch

Проверяем состояние работы сервиса

# lsof -i :9200 -Pn
COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
java    5751 elasticsearch  201u  IPv4  27935      0t0  TCP 127.0.0.1:9200 (LISTEN)

Kibana — утилита с открытым исходным кодом которая визуализирует работу Elasticsearch. Он используется для взаимодействия с данными, хранящимися в индексах Elasticsearch. Kibana имеет веб-интерфейс, который позволяет быстро создавать и обмениваться динамическими панелями мониторинга, отображающими изменения в запросах Elasticsearch в реальном времени.

Загружаем пакет Kibana с официального сайта:

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

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

rpm -ivh kibana-6.6.2-x86_64.rpm

Редактируем настройки Kibana

Редактируем конфигурационный файл Kibana /etc/kibana/kibana.yml. Оставляем работать сервис Kibana на локальном IP, а проксировать приложение будем при помощи NGINX.

Раскомментируем строки:

server.port: 5601
server.host: "localhost"
elasticsearch.url: "http://localhost:9200"

Сохраняем конфигурационный файл и запускаем сервис:

systemctl enable kibana
systemctl start kibana

Проверяем состояние раборты сервиса

# lsof -i :5601 -Pn
COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
node    5853 kibana   18u  IPv4  27799   0t0  TCP 127.0.0.1:5601 (LISTEN)

Logstash — механизм сбора событий, который обеспечивает конвейер в реальном времени. Он может принимать данные из нескольких источников и преобразовывать их в документы JSON.

Загружаем пакет Logstash с официального сайта:

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

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

rpm -ivh logstash-6.6.2.rpm

Запускаем сервис и добавляем в автозагрузку:

systemctl restart logstash
systemctl enable logstash

Конфигурация Logstash зависит от ваших личных предпочтений и плагинов, которые вы будете использовать. Вы можете найти больше информации о том, как настроить Logstash в официальной документации.

Добавляем CentOS 7 Nginx репозиторий.

rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

Установка Nginx .

yum install nginx

Проверить, что веб-сервер запущен можно по адресу http://example.com/ Мы увидим дефолтную страницу Nginx.

После проверки успешного запуска, добавим сервис в автозагрузку при старте системы.

systemctl enable nginx.service

Добавим новый виртуальный хост

Создадим новый конфигурационный файл в директории NGINX /etc/nginx/conf.d/elk.devservers.network.conf

server {
    listen 80;

    server_name elk.devservers.network;

    location / {
   proxy_pass http://localhost:5601;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

Запускаем NGINX .

systemctl start nginx.service

Проверяем: