Комментарии (2)
Ответ сгенерирован нейросетью и может содержать ошибки
Мониторинг метрик 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-алертов, ориентированных на бизнес-метрики, а не просто технические показатели.