Мониторинг HTTP status codes
В чем проблема?
Nginx в своей стандартной комплектации (не Plus) предоставляет мало данных, как я понял. Точнее, наверное, prometheus-nginx-exporter собирает мало метрик. Нужные мне http status codes дефолтный экспортер не собирает, перепробовал многое (заново собирать nginx из исходников ради добавления в него модулей не хотелось) и остановился на другом экспортере, который берет данные из логов доступа (access.log).
Вообще, мне сбор данных из логов кажется тупорылой затеей (если говорить об эффективности и т.д.) но я просто заебался искать подходящее решение - это временное решение, потому что я пока не так сильно шарю.
prometheus-nginxlog-exporter
Repo: https://github.com/martin-helmich/prometheus-nginxlog-exporter
Установка
Есть deb-пакет: https://github.com/martin-helmich/prometheus-nginxlog-exporter/releases
Конфигурация
После установки конфиг /etc/prometheus-nginxlog-exporter.hcl лучше переместить в /etc/prometheus/prometheus-nginxlog-exporter/ (эту папку создать нужно):
Дефолтный конфиг prometheus-nginxlog-exporter.hcl выглядит так:
Можно сверху задать порт, в секции files указать нужный лог-файл и ниже указать формат данных, который используется в лог-файле, чтобы экспортер мог нормально парсить оттуда метрики.
Погнали в /etc/nginx/nginx.conf, там нужно подправить пару вещей.
Указываю нужный мне формат логов и его название произвольное (здесь status_only), чтобы ссылаться на него ниже. Не собираюсь трогать access.log, поэтому укажу новый путь для нужных мне логов; там, по сути, будут только коды (мне пока больше и не нужно).
Нужно исправить и prometheus-nginxlog-exporter.hcl . Конечный конфиг у меня выглядит так:
После изменений нужно подтянуть перезапустить сервисы:
Может понадобиться указать в prometheus-nginxlog-exporter.service юзера для доступа к access логам. Проверить, у кого есть доступ к логам можно так:
Вот prometheus-nginxlog-exporter.service, где указан юзер, от которого будет запускаться экспортер:
У меня юзер указан www-data ибо на данный момент логи nginx создаются от этого пользователя, но в целом, лог http_status_codes.log, который нам нужен доступен всем для чтения, поэтому юзера можно и не указывать. Когда как.
Тест
Результат можно увидеть сначала в лог-файле:
И на самом порту:
PromQL
Этот материал использовался в Module 22