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

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

Roman Bogachev VMware Specialist | Drone Pilot | Traveler

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

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

Минимальные требования

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

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

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

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

Установка Java

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

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

1
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

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

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

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

1
2
3
4
# 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

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

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

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

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

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

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

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

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

1
rpm -ivh elasticsearch-6.6.2.rpm

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

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

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

1
bootstrap.memory_lock: true

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

1
2
network.host: localhost
http.port: 9200

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

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

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

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

1
LimitMEMLOCK=infinity

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

1
MAX_LOCKED_MEMORY=unlimited

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

1
2
3
systemctl daemon-reload
systemctl enable elasticsearch
systemctl start elasticsearch

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

1
2
3
# 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

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

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

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

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

1
rpm -ivh kibana-6.6.2-x86_64.rpm

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

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

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

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

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

1
2
systemctl enable kibana
systemctl start kibana

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

1
2
3
# 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

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

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

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

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

1
rpm -ivh logstash-6.6.2.rpm

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

1
2
systemctl restart logstash
systemctl enable logstash

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

Установка NGINX

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

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

Установка Nginx.

1
yum install nginx

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

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

1
systemctl enable nginx.service

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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.

1
systemctl start nginx.service

Проверяем: