«ELK» - это сокращение от трех проектов с открытым исходным кодом: Elasticsearch, Logstash и Kibana.
Начнем установку на Debian 10
1. Установка JAVA openjdk-8-jre:
Logstash requires Java 8 or Java 11. Use the official Oracle distribution or an open-source distribution such as OpenJDK.
Следует отметить, что платформа существует в 2 форматах:
1.1. Установка openjdk-8-jre:
Обновим пакетную базу Debian 10:
apt-get update
Предварительно установим платформу JAVA:
apt-get install openjdk-8-jre
Проверяем версию JAVA:
java -version openjdk version "1.8.0_222" OpenJDK Runtime Environment (build 1.8.0_222-8u222-b10-1~deb9u1-b10) OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode)
1.2. Установка openjdk-11-jdk (мы использовали её):
Ищем пакет:
apt search openjdk
Ставим openjdk-11-jdk:
sudo apt install openjdk-11-jdk
Переключаемся на версию openjdk-11-jdk:
update-alternatives –config java
Проверяем версию:
java -version openjdk version "11.0.5" 2019-10-15 OpenJDK Runtime Environment (build 11.0.5+10-post-Debian-1deb10u1) OpenJDK 64-Bit Server VM (build 11.0.5+10-post-Debian-1deb10u1, mixed mode, sharing)
2. Установка Elasticsearch:
Скачаем и добавляем ключ репозитория:
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | apt-key add - OK
Если у вас нет, скачаем и установим apt-transport-https пакет, позволяющий подключать репозитории по протоколу https (обычно репозитории подключаются через http или ftp):
apt-get install apt-transport-https
Добавляем репозиторий:
echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | tee -a /etc/apt/sources.list.d/elastic-6.x.list
* Вариант с 7.x у меня лично не стартовал сам сервис Elasticsearch:
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | tee -a /etc/apt/sources.list.d/elastic-7.x.list
Обновим еще раз информацию из репозиториев:
apt-get update
Установим интересующие нас пакеты:
apt-get install elasticsearch
*Установка занимает время! Установился elasticsearch 6.8.4. Версия 7.4.1 - Active: failed (Result: timeout).
После установки добавляем elasticsearch в автозагрузку:
systemctl daemon-reload systemctl enable elasticsearch.service Synchronizing state of elasticsearch.service with SysV service script with /lib/systemd/systemd-sysv-install. Executing: /lib/systemd/systemd-sysv-install enable elasticsearch Created symlink /etc/systemd/system/multi-user.target.wants/elasticsearch.service → /lib/systemd/system/elasticsearch.service.
Запускаем:
systemctl start elasticsearch.service
Проверяем, запуск:
systemctl status elasticsearch.service elasticsearch.service - Elasticsearch Loaded: loaded (/lib/systemd/system/elasticsearch.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2019-10-26 02:15:00 +05; 12s ago Docs: http://www.elastic.co Main PID: 20418 (java) Tasks: 14 (limit: 1797) Memory: 1.1G CGroup: /system.slice/elasticsearch.service └─20418 /bin/java -Xms1g -Xmx1g -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseC окт 26 02:15:00 debsv systemd[1]: Started Elasticsearch.
* Стартанул не с первого раза.
Что можно сделать, если не стартует Elasticsearch?
Если все работает, читаем дальше.
Настройки Elasticsearch находятся в файле:
/etc/elasticsearch/elasticsearch.yml
Отдельное внимание на параметр для директории с данными:
# Будет занимать значительное место path.data: /var/lib/elasticsearch # директория для хранения данных
2.1. Проверяем работу Elasticsearch
Смотрим кто сидит на 9200 порту:
netstat -lptun | grep 9200 tcp6 0 0 127.0.0.1:9200 :::* LISTEN 14869/java tcp6 0 0 ::1:9200 :::* LISTEN 14869/java
Вы можете проверить, работает ли ваш узел Elasticsearch, отправив HTTP-запрос на порт 9200 на localhost, прямо на самом сервере:
{ "name" : "03cLTJX", "cluster_name" : "elasticsearch", "cluster_uuid" : "mgWgSLZCRLedfLIJASpxKQ", "version" : { "number" : "6.8.4", "build_flavor" : "default", "build_type" : "deb", "build_hash" : "bca0c8d", "build_date" : "2019-10-16T06:19:49.319352Z", "build_snapshot" : false, "lucene_version" : "7.7.2", "minimum_wire_compatibility_version" : "5.6.0", "minimum_index_compatibility_version" : "5.0.0" }, "tagline" : "You Know, for Search" }
Если нет возможности получить доступ напрямую, можно удаленно отправить запрос:
curl -X GET 'http://localhost:9200' { "name" : "03cLTJX", "cluster_name" : "elasticsearch", "cluster_uuid" : "mgWgSLZCRLedfLIJASpxKQ", "version" : { "number" : "6.8.4", "build_flavor" : "default", "build_type" : "deb", "build_hash" : "bca0c8d", "build_date" : "2019-10-16T06:19:49.319352Z", "build_snapshot" : false, "lucene_version" : "7.7.2", "minimum_wire_compatibility_version" : "5.6.0", "minimum_index_compatibility_version" : "5.0.0" }, "tagline" : "You Know, for Search" }
По умолчанию Elasticsearch слушает все имеющиеся сетевые интерфейсы на порту 9200.
3. Установка Kibana:
Добавляем публичный ключ:
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | apt-key add -
Добавляем репозиторий Kibana:
echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | tee -a /etc/apt/sources.list.d/elastic-6.x.list
Запускаем установку Kibana:
apt-get update apt-get install kibana
Добавляем Kibana в автозагрузку
systemctl daemon-reload systemctl enable kibana.service
Запускаем Kibana:
systemctl start kibana.service
Проверяем состояние сервиса:
systemctl status kibana.service
* На данном этапе никаких проблем не возникло, единственный момент: Kibana медленно стартует, надо ждать!
Файл с настройками Кибана располагается:
/etc/kibana/kibana.yml
* По-умолчанию kibana слушает только localhost и не позволяет подключаться удаленно.
3.1. Проверяем работу Kibana:
Kibana слушает порт 5601:
netstat -lptun | grep 5601 tcp 0 0 127.0.0.1:5601 0.0.0.0:* LISTEN 15294/node
Так как мы настройку проводим удаленно, то в файле конфигурации прописали строчку:
server.host: "192.168.0.11"
Заходим с текущей машины через браузер, на адрес: http://192.168.0.11:5601
Подтверждаем, и видим что Все работает!
4. Установка Logstash:
Тут все проще, просто ставим:
apt-get install logstash
Добавляем в автозагрузку:
systemctl enable logstash.service
Настройки Logstash находятся в файле:
/etc/logstash/logstash.yml
4.1. Настройка Logstash:
Пока не запускаем, сначала его настроим. Его конфиг разделим по разным конфигурационным файлам в директории /etc/logstash/conf.d:
nano input.conf
Заполняем input.conf:
input { beats { port => 5044 } }
* Указываю, что принимаем информацию на 5044 порт. Этого достаточно.
Создаем output.conf:
nano output.conf
Заполняем output.conf:
output { elasticsearch { hosts => "localhost:9200" index => "nginx-%{+YYYY.MM.dd}" } #stdout { codec => rubydebug } }
Создаем filter.conf:
nano filter.conf
Заполняем filter.conf:
filter { if [type] == "nginx_access" { grok { match => { "message" => "%{IPORHOST:remote_ip} - %{DATA:user} \[%{HTTPDATE:access_time}\] \"%{WORD:http_method} %{DATA:url} HTTP/%{NUMBER:http_version}\" %{NUMBER:response_code} %{NUMBER:body_sent_bytes} \"%{DATA:referrer}\" \"%{DATA:agent}\"" } } } date { match => [ "timestamp" , "dd/MMM/YYYY:HH:mm:ss Z" ] } geoip { source => "remote_ip" target => "geoip" add_tag => [ "nginx-geoip" ] } }
Пояснение:
Для работы geoip фильтр достаточно описать его в конфиге и скачать базу адресов в папку /etc/logstash:
wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.mmdb.gz gunzip GeoLite2-City.mmdb.gz
Запускаем Logstash:
systemctl start logstash.service
Проверяем:
systemctl status logstash.service
Можно проверить логи: /var/log/logstash/logstash-plain.log
5. Установка Beats: Filebeat
Filebeat - это агент на сервере с nginx, для отправки логов веб сервера на сервер с ELK.
Ставим:
apt-get install filebeat
* Вариант установки 2, используя репозиторий:
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.4.0-amd64.deb dpkg -i filebeat-6.4.0-amd64.deb
Нам нужно, по сути, выполнить две основные задачи: указать, какие файлы брать и куда отправлять результат. В установках по умолчанию Filebeat собирает все файлы в пути /var/log/*.log, это означает, что Filebeat соберет все файлы в каталоге /var/log/, заканчивающиеся на .log.
Источники с одинаковым input_type, log_type и document_type можно указывать по одному в строке. Если они отличаются, то создается отдельная запись.
Редактируем файл настроек:
/etc/filebeat/filebeat.yml
Примерное содержание (дополняем файл):
filebeat.inputs: - type: log # меняем с false на true enabled: true # меняем с "/var/log/*.log" на nginx paths: - /var/log/nginx/access.log* # добавляем следующее: fields: type: nginx_access fields_under_root: true scan_frequency: 5s # повторяем для error.log - type: log enabled: true paths: - /var/log/nginx/error.log* fields: type: nginx_error fields_under_root: true scan_frequency: 5s # дополняем: output.logstash: hosts: ["192.168.0.11:5044"] # дополняем: xpack.monitoring: enabled: true elasticsearch: hosts: ["http://192.168.0.11:9200"]
Сводная информация:
Elasticsearch (хранение логов):
nano /etc/elasticsearch/elasticsearch.yml (у нас network.host: 192.168.0.11)
systemctl restart elasticsearch.service
systemctl status elasticsearch.service
Проверка порта: netstat -lptun | grep 9200
http://localhost:9200
http://192.168.0.11:9200 (у нас)
Logstash (обработка входящих логов):
/etc/logstash/conf.d
nano input.conf (слушает порт 5044)
nano output.conf (связка с Elasticsearch "localhost:9200", у нас "http://192.168.0.11:9200")
nano filter.conf
Проверка на ошибки конфига: service logstash configtest
systemctl restart logstash.service
systemctl status logstash.service
Проверка порта: netstat -lptun | grep 5044
Kibana (web-интерфейс):
nano /etc/kibana/kibana.yml
systemctl restart kibana.service
systemctl status kibana.service
Проверка порта: netstat -lptun | grep 5601
PORT: 5601
Filebeat (Отображение логов в режиме real-time Linux-систем):
nano /etc/filebeat/filebeat.yml
systemctl restart filebeat
systemctl status filebeat
У нас:
monitoring: "http://192.168.0.11:9200"
output.logstash: "http://192.168.0.11:5044"
Перезагрузить все сервисы:
systemctl restart elasticsearch.service ; systemctl restart kibana.service; systemctl restart logstash.service ; systemctl restart filebeat ;
systemctl stop elasticsearch.service ; systemctl stop kibana.service; systemctl stop logstash.service ; systemctl stop filebeat ;
systemctl status elasticsearch.service ; systemctl status kibana.service; systemctl status logstash.service ; systemctl status filebeat ;
5. Проверка работы
Чтобы мониторинг работал, его надо активировать в соответствующем разделе в Kibana — Monitoring. И не забудьте запустить elasticsearch на внешнем интерфейсе. В первоначальной настройке я указал слушать только локальный интерфейс.
Заходим в раздел: "Management" - "Kibana" - "Index Patterns", нажимаем на "Create index pattern", в поле "Index pattern" указываем nginx-*. Далее "Next step" - Выберите имя поля @timestamp и жмите Create Index Pattern.
Индекс добавлен, переходим в раздел Discover:
Все настроили. Всем спасибо, кто читал)
Источник: http://linuxsql.ru