Строим метрики для Prometheus по текстовым логам с помощью Mtail

Введение

Допустим, мы отправляем логи в ElasticSearch или Loki, извлекаем из них метрики для Prometheus. Все прекрасно, кроме 1 момента. Что, если логи не доходят до цели? Возникает ошибка при отправке логов на лог-сервер. Как это мониторить? Это проблема курицы и яйца. Для метрик мы используем логи, но логов нет.

Тут на помощь приходит простенькая программа Mtail. Она позволяет строить Prometheus метрики, читая текстовые файлы логов на сервере. Официальный сайт https://google.github.io/mtail/. Текущая версия - 3.0.9

Описание

Принцип работы схож с Awk. Указываем регулярку, которую нужно найти в строке. При совпадении, выполняем некие действия. Как правило, увиличиваем счетчик на единицу. Метрики хранятся в памяти, на диск не сохраняются. Но это и не нужно.

Пример, мониторим логи Fluent на наличие ошибок отправки данных в ElasticSearch.

mtail --progs /etc/mtail/td-agent-elastic --logs /var/log/fluent/fluentd.log --port 3903

--progs [dir] - директория с паттернами (программами). --logs [file] - какой файл мониторить. Корректно обрабатывает ротацию. Можно передать несколько раз для разных файлов.

В директории /etc/mtail/td-agent-elastic создаем файл с расширением .mtail td-agent-elastic.mtail.

# Считаем и делим по тегам ошибки отправки в эластик

counter td_agent_elastic_errors by tag

/^.*dump an error event: .* tag="(?P<tag>[^"]+)".*$/ {
    td_agent_elastic_errors[$tag]++
}

Для удобства лучше завести отдельного пользователя mtail и добавлять его в группы тех файлов, которые требуется читать.

Чтобы mtail поднимался при перезапуске машины, добавим его в systemd:

# /etc/systemd/system/mtail-td-agent-elastic.service 
[Unit]
Description=Mtail log parser (td-agent-elastic)
After=network.target

[Service]
Type=simple
User=mtail
Group=mtail
ExecStart=/usr/bin/mtail -progs /etc/mtail/td-agent-elastic  -logs /var/log/fluent/fluentd.log -port 3903
Restart=always
RestartSec=5s

[Install]
WantedBy=multi-user.target

Возможные ошибки

Метрика log_errors_total увеличивается, когда mtail не может прочитать указанный файл/

Заключение

Для сборка метрик существует множество способов. Но иногда встречаются случаи, когда они все не подходят и нужно собирать метрики именно с текстовых файлов на сервере. В этом случае и стоит обратить внимание на Mtail.

В статье рассмотрели базовый сценарий, как начать мониторить логи одной программы. В случае, если нужно мониторить более одной, использовать разные паттерны для разных типов файлов, можно поднять на другом порте еще один экземпляр mtail с другим набором параметров.

Сайт не хранит данные пользователей
Malchikovma.ru на GitHub
Создано при помощи Hugo
Тема Stack, дизайн Jimmy