«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