Запуск связки Elasticsearch + Logstash + Kibana на Docker Compose
В этой статье мы запустим связку для удобной работы с вашими логами. Для реализации нам понадобится: Elasticsearch - одно из лучших решений по полнотекстовому поиску и фильтрации данных, Logstash - удобный интерфейс к Elasticsearch для записи логов (фильтрация, сбор и трансформация), ну а Kibana - это веб-интерфейс для визуализации и чтения данных из Elasticsearch.
Всю эту связку проще запустить в контейнерах, которые будет контролировать Docker Compose. Для этих целей хорошо подходит проект docker-elk, в который входит всё что нам нужно, настроим его и запустим.
Установка Docker Compose и ELK
Помимо docker.io и docker-compose нам ещё понадобится git:
Я использую свой приватный форк, в котором переопределены настройки для Elasticsearch и Logstash, рекомендую вам иметь тоже свой форк, а не использовать оригинал. Так вы сможете хранить свои изменения и делиться ими со своей командой.
Настройка ELK
Чтобы была возможность работы с Docker от вашего пользователя, необходимо его добавить в группу "docker":
sudo usermod -a -G docker <USERNAME>
Чтобы после перезапуска контейнера не потерялись данные, которые хранятся в Elasticsearch, рекомендую подключить свой Volume. Для этого надо добавить запись в volumes секции elasticsearch файла docker-compose.yml:
services:
elasticsearch:
volumes:
- ./elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro
- <Абсолютный путь до вашего хранилища>elasticsearch/data:/usr/share/elasticsearch/data:rw
Теперь если перезапустить контейнер данные подцепятся к вашему Elasticsearch автоматически.
Запуск ELK
Перейдём в каталог "docker-elk" и запустим команду, которая поднимет нам все 3 сервиса, объединенные в одну сеть:
cd docker-elk
docker-compose up
Если все запустилось без ошибок, то остановим контейнеры по Ctrl+C и ниже напишем service-файл для systemd, чтобы после перезагрузки системы он сам запускал и следил за состоянием запущенных контейнеров.
Настроим Nginx
Сначала создадим htpasswd-файл для Базовой HTTP авторизации. Укажите свой USERNAME и по запросу введите пароль:
Для примера хост для Elasticsearch будет "elastic.example.org", а хост для Kibana "kibana.example.org". Теперь создайте файл /etc/nginx/sites-available/elk.conf и разместите в нём следующее содержимое:
server {
listen 80;
server_name elastic.example.org kibana.example.org;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_certificate /etc/nginx/certs/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/nginx/certs/privkey.pem; # managed by Certbot
ssl_session_cache shared:SSL:10m;
client_max_body_size 20M;
server_name elastic.example.org;
satisfy any;
allow <TRUSTED IP ADDRESS HERE>; # Укажите IP адрес, которому вы доверяете (например соседний сервер откуда вы отправляете запросы к Elastic)
allow <LOCAL IP ADDRESS HERE>; # Если вы на одном сервере запустились, то укажите локальный адрес (127.0.0.1, 192.168.0.1 или какой-либо другой, посмотрите через какой интерфейс осуществяется передача данных)
# allow 172.17.0.0/24;
deny all;
auth_basic "closed site";
auth_basic_user_file htpasswd;
location / {
proxy_pass http://localhost:9200;
}
}
server {
listen 443 ssl;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_certificate /etc/nginx/certs/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/nginx/certs/privkey.pem; # managed by Certbot
ssl_session_cache shared:SSL:10m;
client_max_body_size 20M;
server_name kibana.example.org;
auth_basic "closed site";
auth_basic_user_file htpasswd;
location / {
proxy_pass http://localhost:5601;
}
}
Зайдём браузером по адресу kibana.example.org, вы должны увидеть примерно следующий интерфейс:
Перейдите в Management > Index Patterns и нажмите на кнопку Create Index Pattern, введите "logstash-*" в поле Index pattern, а в качестве значения для поля Time Filter field name укажите "datetime", таким образом вы настроите шаблон для матчинга всех данных от Logstash.
Комментарии
"надо добавить запись в volumes секции elasticsearch:"
Если у вас свой форк вы бы хоть файл конфигурационный указывали куда это надо добавить
Спасибо, добавил в статье путь к файлу. Про форк не понял, зачем вы его упомянули в предложении?
Ещё бы nginx тоже в тот же стэк впилить
@drros да, было бы удобно
В этой сборке Kibana генерит на elasticsearch огромное число логов, которые не несут никакой полезной нагрузки.
Оставьте свой комментарий