← Назад к вопросам

Как посмотреть метрики Nginx

1.0 Junior🔥 112 комментариев
#Мониторинг и логирование

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Мониторинг метрик Nginx: полное руководство для DevOps-инженера

Мониторинг метрик Nginx — критически важная задача для обеспечения производительности, доступности и безопасности веб-сервисов. Я поделюсь комплексным подходом, охватывающим встроенные модули, сторонние инструменты и практические скрипты.

1. Встроенный модуль ngx_http_stub_status_module

Это основной источник базовых метрик о работе Nginx. Для начала убедитесь, что модуль скомпилирован (обычно включён по умолчанию) и добавьте конфигурацию:

server {
    listen 127.0.0.1:8080;
    server_name localhost;
    
    location /nginx_status {
        stub_status on;
        access_log off;
        allow 127.0.0.1;  # Ограничьте доступ!
        deny all;
    }
}

После перезагрузки конфигурации (nginx -s reload) запросите http://127.0.0.1:8080/nginx_status. Вы получите:

Active connections: 291
server accepts handled requests
 16630948 16630948 31070465
Reading: 6 Writing: 179 Waiting: 106

Ключевые метрики:

  • Active connections — текущие активные соединения
  • accepts — принятые соединения с момента старта
  • handled — обработанные соединения (разница с accepts указывает на перегрузки)
  • requests — общее количество запросов
  • Reading/Writing/Waiting — соединения в фазах чтения, записи и ожидания

2. Продвинутый модуль ngx_http_status_module (коммерческая версия Nginx Plus)

Nginx Plus предоставляет расширенный JSON-интерфейс /api с детализированными метриками:

  • Запросы в секунду по upstream-серверам
  • Время ответа (response time)
  • Состояние кэша
  • Данные по SSL/TLS

3. Экспорт метрик в Prometheus через nginx-prometheus-exporter

Для интеграции с современным стеком мониторинга используйте Prometheus. Установите и настройте экспортер:

# Скачивание и запуск экспортера
wget https://github.com/nginxinc/nginx-prometheus-exporter/releases/download/v0.11.0/nginx-prometheus-exporter_0.11.0_linux_amd64.tar.gz
tar -xzf nginx-prometheus-exporter*.tar.gz
./nginx-prometheus-exporter -nginx.scrape-uri http://127.0.0.1:8080/nginx_status

Конфигурация Prometheus (prometheus.yml):

scrape_configs:
  - job_name: 'nginx'
    static_configs:
      - targets: ['exporter-host:9113']

4. Мониторинг через access/error логи

Анализ логов предоставляет бизнес-метрики:

  • Коды ответов HTTP (5xx — критические ошибки)
  • Время обработки запросов ($request_time)
  • Slow requests — запросы, превышающие порог

Пример конфигурации логов с дополнительными полями:

log_format detailed '$remote_addr - $remote_user [$time_local] '
                    '"$request" $status $body_bytes_sent '
                    '"$http_referer" "$http_user_agent" '
                    'rt=$request_time uct="$upstream_connect_time"';

access_log /var/log/nginx/access.log detailed;

5. Сбор метрик через сторонние агенты

Telegraf с плагином nginx — популярное решение:

[[inputs.nginx]]
  urls = ["http://localhost:8080/nginx_status"]

Datadog, New Relic, Zabbix — облачные и корпоративные платформы предоставляют готовые интеграции.

6. Практический скрипт для базового мониторинга

Автоматизируйте сбор ключевых метрик с помощью bash-скрипта:

#!/bin/bash
# nginx_metrics.sh

NGINX_STATUS_URL="http://127.0.0.1:8080/nginx_status"

# Получение метрик
METRICS=$(curl -s $NGINX_STATUS_URL)

# Парсинг значений
ACTIVE_CONN=$(echo "$METRICS" | grep "Active connections" | awk '{print $3}')
REQUESTS_PER_SEC=$(echo "$METRICS" | tail -1 | awk '{print $3}')
WRITING=$(echo "$METRICS" | grep "Writing" | awk '{print $4}')

# Вывод в формате для Zabbix или других систем
echo "active_connections $ACTIVE_CONN"
echo "requests_per_sec $REQUESTS_PER_SEC"
echo "writing_connections $WRITING"

# Проверка доступности
if curl -f -s $NGINX_STATUS_URL > /dev/null; then
    echo "nginx_status 1"
else
    echo "nginx_status 0"
fi

7. Ключевые метрики для алертинга

Настройте оповещения на следующие показатели:

  • Рост 5xx ошибок > 1% от общего числа запросов
  • Active connections, приближающиеся к worker_connections
  • Request time перцентиль 95% > 1 секунды
  • Доступность upstream-серверов

8. Визуализация в Grafana

Импортируйте готовый дашборд Nginx Prometheus или создайте свой, включая:

  • График запросов в секунду
  • Тепловую карту времени ответа
  • Панель с кодами ответов HTTP
  • Мониторинг upstream-бэкендов

Рекомендации по эксплуатации

  • Всегда ограничивайте доступ к статус-эндпоинтам только мониторинговым системам
  • Настройте ретеншн политики для метрик (обычно 15-30 дней)
  • Агрегируйте метрики на уровне региона/дата-центра для глобального view
  • Используйте аномали-детекшн (например, в Prometheus с prometheus-operator)

Комплексный мониторинг Nginx — не просто сбор данных, а построение системы, позволяющей предвидеть проблемы до их возникновения. Начинайте с базовых метрик (stub_status), постепенно внедряйте детализированный сбор через экспортеры и завершайте настройкой meaningful-алертов, ориентированных на бизнес-метрики, а не просто технические показатели.