Интеграция с Nginx
Перевод в процессе / Translation in progress. See русская версия.
Интеграция собирает метрики Nginx через стандартный ngx_http_stub_status_module (активные соединения, accepted/handled, requests) или через VTS-модуль (nginx-module-vts), который дополнительно даёт разбивку по server_name, upstream и кодам ответа. Дополнительно агент умеет парсить access_log по заданному log_format для получения per-host requests/sec и ratio 2xx/4xx/5xx.
Предварительные требования
- Nginx версии ≥ 1.18 запущен как системный сервис (
systemdили Docker-контейнер). - Собран со стандартным модулем
ngx_http_stub_status_module(в большинстве дистрибутивов включён по умолчанию) или с модулемnginx-module-vtsдля расширенной телеметрии. - В конфиге Nginx описан location
/nginx_status(или VTS-endpoint), доступный только с loopback. - Агент Flaree установлен на том же хосте (см. Установка systemd-сервиса) и имеет read-доступ к
access_log, если включёнlog_format_parse. - Токен агента и endpoint ingestion-шлюза заданы через переменные окружения
${FLAREE_TOKEN}и${FLAREE_ENDPOINT}.
Минимальная конфигурация
Минимально — открыть stub_status на loopback-интерфейсе и указать агенту URL endpoint:
# /etc/nginx/conf.d/flaree-status.conf
server {
listen 127.0.0.1:80 default_server;
server_name _;
location /nginx_status {
stub_status;
access_log off;
allow 127.0.0.1;
deny all;
}
}
Соответствующая секция agent.yaml:
# agent.yaml
integrations:
nginx:
enabled: true
stub_status_url: http://127.0.0.1/nginx_status
Полная конфигурация
Полный набор опций — VTS-endpoint, Basic Auth, интервал сбора и парсинг access_log по log_format:
# agent.yaml
integrations:
nginx:
enabled: true
# stub_status (используется, если не задан vts_url)
stub_status_url: http://127.0.0.1/nginx_status
# VTS-endpoint (если задан, имеет приоритет над stub_status_url)
vts_url: http://127.0.0.1/status/format/json
# Basic Auth для защищённого endpoint
basic_auth:
user: flaree-ro
password: ${FLAREE_NGINX_AUTH}
# Частота сбора
refresh_interval_sec: 15
# Парсинг access-log для per-host ratio 2xx/4xx/5xx и requests/sec
log_format_parse:
enabled: true
path: /var/log/nginx/access.log
format: '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" rt=$request_time uct=$upstream_connect_time'
include_hosts:
- "api.example.com"
- "*.example.com"
exclude_paths:
- "/healthz"
- "/metrics"
# Какие метрики собирать
metrics:
- active_connections
- requests_total
- reading
- writing
- waiting
- http_2xx_rate
- http_4xx_rate
- http_5xx_rate
- upstream_response_time_avg
# Credentials
token: ${FLAREE_TOKEN}
endpoint: ${FLAREE_ENDPOINT}
Проверка работы
- Убедитесь, что сервис Nginx активен (
active (running)) и у него нет ошибок вjournalctl -u nginx. - Проверьте, что endpoint
stub_statusотдаёт текстовый ответ форматаActive connections: N\nserver accepts handled requests\n …и возвращает 200 OK с loopback. - Откройте дашборд Flaree и убедитесь, что в списке источников появился Nginx-хост с ненулевым
requests/secза последние 5 минут.
# Статус сервиса Nginx
systemctl status nginx --no-pager
# Ответ stub_status endpoint
curl -sS http://127.0.0.1/nginx_status
Troubleshooting
- Если дашборд показывает нулевой
requests/secили данные пропадают, см. Нет данных. - Если после
systemctl reload nginxагент перестаёт видеть метрики, см. Agent offline.
Оставляйте stub_status только на loopback через allow 127.0.0.1; deny all;. Публичный /nginx_status раскрывает rate запросов и косвенно топологию бэкенда, и его регулярно сканируют боты.