Стек ELK (Elastic Stack) — набор бесплатных приложений с открытым исходным кодом (Open-source software), позволяющий анализировать файлы журналов (логи сервера). Например, анализ логов позволяет SEO-специалистам понимать поведение ботов поисковых систем, чтобы улучшить качество сканирования.
Из этого руководства узнаете как установить и настроить Elasticsearch, Logstash, Kibana, Filebeat на Linux Ubuntu 20.04. Для Debian и Centos 7 команды будут немного отличаться.
Elastic Stack — мощный инструмент мониторинга — при помощи Filebeat будете автоматически отправлять логи в Logstash, которые будут преобразовываться в необходимую структуру и отправляться для хранения и обработки в Elasticsearch, а Kibana позволит удобно взаимодействовать с этими данными.
1. Установка дополнительного софта
Java 8
Для работы стека ELK необходим Java 8. Чтобы проверить наличие Java в вашей системе, воспользуйтесь командой
1 | java -version |
Если получили результат 1.8.х_ххх, то переходите к установке NGINX. Если же Java не установлена в системе, то переходите к процессу установки
1 | sudo apt install openjdk-8-jdk -y |
Nginx
Nginx необходим для настройки доступа с паролем для Kibana — панели визуализации данных.
1 | sudo apt install nginx -y |
2. Добавляем репозиторий Elastic в Ubuntu
Репозиторий Elastic обеспечивает доступ ко всем программам из стека ELK.
Импортируем ключ GPG:
1 | wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add - |
Далее установим пакет apt-transport-https:
1 | sudo apt install apt-transport-https |
И осталось добавить репозиторий Elastic в список репозиторий нашей системы:
1 | echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list |
3. Установка и настройка Elasticsearch
Elasticsearch — утилита полнотекстового поиска и аналитики данных, позволяющая в режиме реального времени быстро записывать, искать, анализировать большие объемы данных.
Во-первых, обновим репозитории:
1 | sudo apt update |
И установим Elasticsearch:
1 | sudo apt install elasticsearch |
Для управления Elasticsearch отконфигурируем файл:
1 | sudo nano /etc/elasticsearch/elasticsearch.yml |
Необходимо найти и расскоментировать следующие строки:
1 | network.host: localhost |
1 | http.port: 9200 |
Если необходимо, чтобы Elasticsearch был доступен и для других узлов сети, то для network.host укажите необходимый адрес. Или установите значение 0.0.0.0 — для доступа со всех адресов сетевых интерфейсов.
Т.к. настраиваем одноузловой кластер, то чуть ниже добавим строку:
1 | discovery.type: single-node |
Зададим начальный и максимальный размер памяти в куче (JVM heap size), используя -Xms и -Xmx соответственно. Рекомендуется устанавливать их не более чем на половину размера вашей общей памяти:
1 | sudo systemctl start elasticsearch.service |
Для автозапуска Elasticsearch после перезагрузки системы введем команду:
1 | sudo systemctl enable elasticsearch.service |
Чтобы протестировать работоспосбность Elasticsearch воспользуемся curl-командой:
1 | curl localhost:9200 |
3. Установка и настройка Logstash
Logstash — инструмент сбора и обработки данных, полученных из разных источников, способен преобразовывать их по заданным правилам и отправляеть в Elasticsearch.
Для установки Logstash выполните команду:
1 | sudo apt install logstash |
Для запуска службы введем:
1 | sudo systemctl enable logstash |
Файлы настройки конфигурации располагаются в директории /etc/logstash/conf.d/
Формат конфигурационного файла состоит из 3-х частей:
1 2 3 4 5 | input {...} filter {...} output {...} |
input — входная точка для логов — определяет по каким каналам логи сервера будут попадать в инструмент. Наиболее чаще всего используемые: beats, file, tcp, udp.
filter — настраивается обработка логов, например, разбивка по key = value, удаление ненужных параметров, преобразование. Используют фильтры: grok, mutate, date, kv, multiline.
output — указываются настройки для исходящих данных. Некоторые возможные варианты: stdout, file, elasticsearch, email.
Пример конфигурационного файла Logstash:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | input { beats { port => 5044 tags => "apache" } } filter { if "apache" in [tags] { mutate { replace => { "type" => "apache_access" } } grok { match => { "message" => "%{IP:client} %{USER:ident} %{USER:auth} \[%{HTTPDATE:apache_timestamp}\] \"%{WORD:method} /%{NOTSPACE:request_page} HTTP/%{NUMBER:http_version}\" %{ NUMBER:server_response} %{NUMBER:bytes} \"%{DATA:referrer}\" %{QS:user_agent}" } } } date { match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ] } } output { if "apache" in [tags] { elasticsearch { hosts => ["localhost:9200"] index => "apache-index" } } } |
Используйте деббагер для grok, чтобы выполнять правильную обработку логов:
4. Установка и настройка Kibana
Kibana — веб-интерфейс для Elasticsearch, чтобы взаимодействовать с собранными данными (строить графики, таблицы, добавлять/удалять индексы и т.д.).
Чтобы установить Kibana выполним команду:
1 | sudo apt install kibana |
Для настройки откройте файл:
1 | sudo nano /etc/kibana/kibana.yml |
Удалите символ «#»перед следующими параметрами:
1 | #server.port: 5601 |
1 | #server.host: “your-hostname” |
Если для server.host установить localhost, то подключиться удаленным пользователям будет нельзя. Чтобы им можно было подключаться устновить значение — 0.0.0.0.
1 | #elasticsearch.hosts: [“http://localhost:9200”] |
Чтобы запустить Kibana выполним команду:
1 | sudo systemctl start kibana |
Чтобы Kibana автоматически запускалась после перезагрузки системы выполним:
1 | sudo systemctl enable kibana |
Если используете файервол UFW, то необходимо разрешить трафик на порту 5601 для доступа к панели управления Kibana
1 | sudo ufw allow 5601/tcp |
Протестируем Kibana в браузере:
1 | http://localhost:5601 |
Если необходимо установить Kibana в операционной системе Windows, то скачайте Kibana для Windows, произведите конфигурацию файла ..\config\kibana.yml, как это было описано выше и запустите
1 | .\bin\kibana.bat |
5. Установка и настройка Filebeat
Filebeat — легковесный агент пересылки данных. В нашем случае будем пересылать логи с удаленного сервера в Logstash для дальнейшей их обработки.
Для запуска установки Filebeat введем:
1 | sudo atp install filebeat |
Откроем конфигурационный файл:
1 | sudo nano /etc/filebeat/filebeat.yml |
Добавим источник данных в paths:
Чуть ниже настроим отправку логов Apache в Logstash — в hosts укажем IP и порт:
Если используете файервол UFW, откройте порт 5044 на принимающем сервере:
1 | sudo ufw allow 5044/tcp |