Перейти к содержимому
Skip to main content

Интеграция с Nginx

info

Перевод в процессе / 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}

Проверка работы

  1. Убедитесь, что сервис Nginx активен (active (running)) и у него нет ошибок в journalctl -u nginx.
  2. Проверьте, что endpoint stub_status отдаёт текстовый ответ формата Active connections: N\nserver accepts handled requests\n … и возвращает 200 OK с loopback.
  3. Откройте дашборд 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.
tip

Оставляйте stub_status только на loopback через allow 127.0.0.1; deny all;. Публичный /nginx_status раскрывает rate запросов и косвенно топологию бэкенда, и его регулярно сканируют боты.