Это третья и заключительная часть по настройке мониторинга логов на основе Elasticsearch+Fluentd+Kibana
Первая часть и вторая части доступны здесь:
Настройка Elasticsearch+Fluentd+Curator+Cerebro на коллекторе(сервере) – Часть-1
Настройка Elasticsearch+Fluentd+Curator+Cerebro на коллекторе(сервере) – Часть-2
Нумерацию пунктов/разделов продолжим исходя из первой части статьи
7.Установка и настройка на целевом хосте Filebeat-агента, с помощью которого собираем только MySQL error/slow-логи
В данном случае используем версию filebeat 7.2 т.к. Elasticsearch имеет такую версию
Установка filebeat-агент для RPM-based дистрибутивов
1 |
# rpm -ivh https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.2.0-x86_64.rpm |
Установка filebeat-агента для DEB-based дистрибутивов
1 |
# curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.2.0-amd64.deb |
1 |
# dpkg -i filebeat-7.2.0-amd64.deb |
Настройка основного конфигурационного файла filebeat /etc/filebeat/filebeat.yml
1 |
# cp /etc/filebeat/filebeat.yml /etc/filebeat/filebeat.yml-original |
Все поддерживаемые filebeat-ом опции доступны в отдельном файле
1 |
/etc/filebeat/filebeat.reference.yml |
В дефолтном конфигурационного файла filebeat.yml были сделаны следующие изменения
1 |
# nano /etc/filebeat/filebeat.yml |
Настроено подключение к elasticsearch
1 2 3 4 5 6 7 8 |
output.elasticsearch: # Array of hosts to connect to. hosts: ["es_host:9200"] # Optional protocol and basic auth credentials. #protocol: "https" username: "fluentd" password: "fluentd_password" |
Отключена Index Lifecycle policy
1 2 3 |
#============================== Setup ILM ===================================== ### Disable Index lifecycle policy setup.ilm.enabled: false |
Отключено логирование метрик
1 2 3 |
#================================ Logging ====================================== ### Disable logging filebeat internal metrics logging.metrics.enabled: false |
Чтобы в логах filebeat не было записей типа
1 |
Jan 21 18:20:38 myhostname filebeat[28728]: 2020-01-21T18:20:38.818+0200 INFO [monitoring] log/log.go:145 Non-zero metrics in the last 30s {"monitoring": {"metrics": {"beat":{"cpu":{"system":{"ticks":700},"total":{"ticks":1670,"time":{"ms":16},"value":1670},"user":{"ticks":970,"time":{"ms":16}}},"handles":{"limit":{"hard":4096,"soft":1024},"open":7},"info":{"ephemeral_id":"22313d81-60cf-4ccf-985f-be5b5289b12a","uptime":{"ms":5190025}},"memstats":{"gc_next":4194304,"memory_alloc":2334840,"memory_total":73692712},"runtime":{"goroutines":39}},"filebeat":{"harvester":{"open_files":0,"running":0}},"libbeat":{"config":{"module":{"running":0}},"pipeline":{"clients":4,"events":{"active":0}}},"registrar":{"states":{"current":2}},"system":{"load":{"1":0.04,"15":0.12,"5":0.09,"norm":{"1":0.0025,"15":0.0075,"5":0.0056}}}}}} |
Запрещено переписывать уже существующий шаблон (это и так дефолтная опция, но я также ее определил и принудительно)
1 2 3 |
#============================== Template ===================================== # Overwrite existing template setup.template.overwrite: false |
Немного подробнее про Index Lifecycle Policy для индексов
Начиная с 7-й версии Elastcisearch имеет политику индексов с rollover — создается политика rollover индексов больше 50 GB и/или старше 30 дней
Filebeat 7-й версии имеет дефолтную настройку на автоопределение и автовключение (если существует такая политика в Elastcisearch) благодаря своим настройкам
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# Configure Index Lifecycle Management Index Lifecycle Management creates a # write alias and adds additional settings to the template. # The elasticsearch.output.index setting will be replaced with the write alias # if ILM is enabled. # Enabled ILM support. Valid values are true, false, and auto. The beat will # detect availabilty of Index Lifecycle Management in Elasticsearch and enable # or disable ILM support. #setup.ilm.enabled: auto # Configure the ILM write alias name. #setup.ilm.rollover_alias: "filebeat" # Configure rollover index pattern. #setup.ilm.pattern: "{now/d}-000001" |
В результате чего создаются индексы в формате
1 |
filebeat-%{[agent.version]}-<порядковый_номер> |
Меня не устроил такой формат
Мне больше подошел формат с созданием ежесуточного индекса без каких-либо политик (дефолтное поведение filebeat до версии 7)
В результате чего формат индекса должен иметь вид
1 |
filebeat-%{[agent.version]}-год.месяц.день |
Поэтому я отключил такую политику
1 |
# nano /etc/filebeat/filebeat.yml |
1 2 |
### Disable Index lifecycle policy setup.ilm.enabled: false |
Включение модуля MySQL для сбора MySQL логов ошибок(error.log) и медленных логов(slow.log)
1 |
# filebeat modules enable mysql |
Настройка конфигурационного файла MySQL-модуля в виде указания лога с ошибками и лога медленных запросов
1 |
# nano /etc/filebeat/modules.d/mysql.yml |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# Module: mysql # Docs: https://www.elastic.co/guide/en/beats/filebeat/7.2/filebeat-module-mysql.html - module: mysql # Error logs error: enabled: true # Set custom paths for the log files. If left empty, # Filebeat will choose the paths depending on your OS. var.paths: ["/path/to/mysql/error.log"] # Slow logs slowlog: enabled: true # Set custom paths for the log files. If left empty, # Filebeat will choose the paths depending on your OS. var.paths: ["/path/to/mysql/slow.log"] |
Проверка синтаксиса конфигурационного файла filebeat
1 |
# filebeat test config -e |
Запуск, проверка состояния и добавление в автозагрузку filebeat-агента
1 |
# systemctl start filebeat |
1 |
# systemctl status filebeat |
1 |
# systemctl enable filebeat |
Просмотр логов filebeat-агента
1 |
# journalctl -n 200 -u filebeat -f |
После запуска filebeat и создания индекса с именем filebeat-7.2-год.месяц.день
Необходимо отредактировать шаблон filebeat-%{[agent.version]}( в нашем случае filebeat-7.2) удаляя из него политику
Например, начало индексного шаблона имеет вид
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
{ "order": 1, "index_patterns": [ "filebeat-7.2.0-*" ], "settings": { "index": { "lifecycle": { "name": "filebeat-7.2.0", "rollover_alias": "filebeat-7.2.0" }, "mapping": { "total_fields": { "limit": "10000" } }, |
Удаляем блок с политикой
1 2 3 4 |
"lifecycle": { "name": "filebeat-7.2.0", "rollover_alias": "filebeat-7.2.0" }, |
После чего все вновь создаваемые индексы будут попадать под обновленный индексный шаблон(в котором уже нет политики по rollover)
Для уже созданных индексов(если они создавались с поддержкой index lifecycle policy) нужно вручную удалить политику из этих индексов (назначенную автоматически при попадании индекса в индексный шаблон, на который была установлена политика)
1 |
Kibana->Management->Index Management->Index name->Manage index->Delete lifecycle policy |
Загрузка дефолтных посиков, визуализаций, дашбордов из filebeat в Kibana
Filebeat поставляется с примерами поисков, визуализаций и дашбордов для визуализации данных Filebeat в Kibana
При первом знакомстве с Filebeat очень полезно включить загрузку дефолтных поисков, визуализаций и дашбордов в Kibana
Такую загрузку можно выполнить либо через команду
1 |
# filebeat setup --dashboards |
либо настроить загрузку в файле конфигурации filebeat.yml
1 2 3 4 5 |
#============================== Dashboards ===================================== # These settings control loading the sample dashboards to the Kibana index. Loading # the dashboards are disabled by default and can be enabled either by setting the # options here, or by using the `-setup` CLI flag or the `setup` command. #setup.dashboards.enabled: false |
В любом случае, предварительно в конфиге filebeat.yml необходимо настроить подключение к kibana
1 2 3 4 5 6 7 8 9 10 11 |
#============================== Kibana ===================================== # Starting with Beats version 6.0.0, the dashboards are loaded via the Kibana API. # This requires a Kibana endpoint configuration. setup.kibana: # Kibana Host # Scheme and port can be left out and will be set to the default (http and 5601) # In case you specify and additional path, the scheme is required: http://localhost:5601/path # IPv6 addresses should always be defined as: https://[2001:db8::1]:5601 #host: "localhost:5601" |
https://www.elastic.co/guide/en/beats/filebeat/7.2/load-kibana-dashboards.html
Размещение дополнительных файлов filebeat
1 |
/usr/share/filebeat/kibana/ |
— отсюда загружаются дашбоарды в Kibana
1 |
/usr/share/filebeat/module/ |
— дефолтная настройка модулей
1 |
/var/lib/filebeat/registry/filebeat/ |
— реестр с хранением служебной информации для отслеживаемых файлов(с которых собираются логи)
Filebeat уже содержит MySQL-дашбоард с логами ошибок и логами медленных запросов MySQL
Также в Kibana были созданы поиски, визуализации, дашбоарды на основе данных из индексов в Elasticsearch
На основом дашбоарде были сведены все остальные дашбоарды
Например Nginx-base дашбоард включает в себя несколько визуализаций