====== Установка 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-накопители при интенсивной записи. ==== Установка Java ==== Компоненты стека **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 ==== **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'' Включаем [[https://www.elastic.co/guide/en/elasticsearch/reference/master/setup-configuration-memory.html#bootstrap-memory_lock|блокировку памяти]]: |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 ==== **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 ==== **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** в [[https://www.elastic.co/guide/en/logstash/current/configuration.html|официальной документации]]. ==== Установка NGINX ==== === Добавляем 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 | Проверяем: {{https://fatalex.cifro.net/lib/plugins/ckgedit/fckeditor/userfiles/image/devops/k8s/001.png?nolink&}}