Categorica открыла модуль для NGINX с метриками Prometheus без отдельного экспортёра
Компания Categorica объявила, что открывает исходный код своего модуля nginx-stats-prometheus. Это расширение для NGINX, которое отдаёт статистику в формате Prometheus прямо из самого NGINX. Альтернатива, NGINX Prometheus Exporter, который работает как отдельный процесс или контейнер.
Мотивация, по словам авторов, такая. Для сбора метрик NGINX, как они пишут, по сути есть только один выбор, NGINX Prometheus Exporter. Их смутило, что сама точка выдачи метрик запускает собственный веб-сервер. Экспортёр можно развернуть как сервис systemd (то есть обычный бинарник), но чаще его запускают как sidecar-контейнер Docker, и авторы называют это лишней сложностью. К тому же сбор метрик в такой схеме сам выпадает из мониторинга, авторы шутят про «кто сторожит сторожей». Идею они довели до рабочего модуля в свободное время по вечерам и выходным, и он, по их словам, быстро стал их основным способом собирать статистику.
Как это устроено. Модуль нужно собрать: потребуются исходники NGINX (прилагаемый Makefile может скачать их сам, определив версию через nginx -v, либо путь задаётся переменной NGINX_SRC), компилятор C99 (например, Clang) и библиотеки PCRE, OpenSSL и zlib с заголовками. Собирать сам NGINX из исходников рекомендуется, но не обязательно; если используется готовый NGINX, он должен быть скомпилирован с --with-compat и --with-http_stub_status_module. Сборка модуля, make module и sudo make install.
Настройка: подключить модуль директивой load_module modules/ngx_http_stats_prom_module.so, затем в блоке server (в примере он слушает порт 9100) добавить location /metrics с директивой prometheus_metrics. Метрики тогда доступны по адресу http://hostname:9100/metrics. Пример ответа содержит nginx_up, nginx_process_pid, nginx_http_requests_total (в примере 434488) и nginx_http_responses_total с разбивкой по классам статусов 1xx, 5xx. Полный перечень метрик в тексте не приведён. Кроме общих метрик, есть базовые метрики по каждой директиве server или upstream из nginx.conf; они появляются после первого запроса на соответствующий префикс.
Ограничения. Поддерживается не более 512 директив server или upstream, префиксы длиннее 255 символов игнорируются. Под статистику по умолчанию выделен 1 МБ разделяемой памяти (меняется директивой prometheus_metrics_shm_size); если он исчерпан, сбор статистики молча пропускается.
Авторы прямо пишут, что модуль не является заменой nginx-prometheus-exporter «один в один»: статистики собирается существенно меньше; плагин привязан к версии NGINX, с которой собран, и после обновления NGINX его, как правило, нужно пересобирать; он значительно менее обкатан. Лицензия, MIT. Pull request’ы приветствуются, но авторы просят, чтобы патч хотя бы просмотрел человек. Поддержки Categorica не предлагает и помощь с проблемами не гарантирует. В заключении модуль советуют тем, кто хочет запускать NGINX без контейнеров, упростить конфигурацию развёртывания или просто предпочитает собирать статистику плагином.
Ключевые факты
- Categorica открыла под лицензией MIT модуль nginx-stats-prometheus, отдающий метрики Prometheus изнутри NGINX, без отдельного веб-сервера экспортёра и sidecar-контейнера.
- Для сборки нужны исходники NGINX, компилятор C99 и библиотеки PCRE, OpenSSL, zlib; готовый NGINX должен быть собран с --with-compat и --with-http_stub_status_module.
- Метрики отдаются по адресу вида http://hostname:9100/metrics; по умолчанию под статистику выделен 1 МБ памяти (настраивается prometheus_metrics_shm_size), при нехватке сбор молча пропускается.
- Лимиты: не более 512 директив server или upstream, префиксы длиннее 255 символов игнорируются.
- Авторы честно предупреждают: статистик существенно меньше, чем у NGINX Prometheus Exporter, модуль привязан к версии NGINX и менее обкатан; поддержки нет.
Почему это важно
Для мониторинга NGINX через Prometheus, по словам авторов, практически единственным вариантом был NGINX Prometheus Exporter, который запускает собственный веб-сервер и чаще всего живёт в sidecar-контейнере. Модуль Categorica показывает другой путь: метрики отдаёт сам NGINX, без дополнительного процесса. Это небольшая, но практичная альтернатива для тех, кто хочет упростить развёртывание. Масштаб новости скромный: это внутренний инструмент одной компании, выложенный в открытый доступ.
Кому это важно
Тем, кто эксплуатирует NGINX и собирает метрики через Prometheus и Grafana, особенно без контейнеризации или со стремлением убрать лишний sidecar-контейнер. Подойдёт тем, кто и так собирает NGINX из исходников и умеет работать с командной строкой. Тем, кому нужен полный набор метрик, модуль пока не заменит существующий экспортёр.
Как это применить
Нужны исходники NGINX, компилятор C99 и библиотеки PCRE, OpenSSL, zlib. Если NGINX уже установлен, он должен быть собран с --with-compat и --with-http_stub_status_module. Затем make module и sudo make install, подключение через load_module modules/ngx_http_stats_prom_module.so и отдельный server с location /metrics и директивой prometheus_metrics (в примере порт 9100). Размер разделяемой памяти меняется через prometheus_metrics_shm_size. Лицензия MIT, цена не упоминается; поддержка не предлагается.
Можно ли доверять
Источник, запись в блоге самой Categorica, то есть первичное описание собственного проекта. Заявления о предпочтении модуля и мотивации, это слова авторов. Замеров производительности и накладных расходов в тексте нет. Сведений о применении модуля за пределами Categorica тоже нет. Сами авторы честно перечисляют недостатки, что добавляет доверия к описанию.
Риски и подводные камни
Модуль собирает существенно меньше статистик, чем NGINX Prometheus Exporter, и значительно менее обкатан. Он привязан к версии NGINX: после обновления NGINX его, как правило, нужно пересобирать. При исчерпании 1 МБ памяти сбор молча прекращается. Есть лимиты в 512 директив server или upstream и 255 символов в префиксе. Поддержка не предлагается, помощь с проблемами не гарантирована. Диапазон поддерживаемых версий NGINX в тексте не указан.