Nginx - веб-сервер и почтовый прокси-сервер, часто используемый в качестве фронтенда на веб-проектах с высокой посещамостью. Периодически возникает необходимость следить за количеством обрабатываемых им запросов чтобы своевременно реагировать на рост нагрузки. Далее будет показано как можно организовать мониторинг Nginx с помощью MRTG.
Для начала включи в nginx вывод статуса. Для этого в конфигурацию одного из виртуальных хостов надо добавить строки:
# По этому пути будет доступен статус сервера
location /nginx_status {
# Включение отображения статуса
stub_status on;
# Кому разрешён доступ сюда. Как минимум нашему серверу мониторинга
allow 10.12.14.16;
# Заодно сети, в которой сидят наши администраторы (на всякий случай)
allow 172.17.233.0/25;
# Всем остальным доступ закрываем
deny all;
}
После этого перезапускаем nginx. Теперь при обращении к локации "/nginx_status" нашего виртуального хоста с одного из разрешённых адресов мы получим примерно вотакую информацию:
Active connections: 272
server accepts handled requests
65274467 65274255 150927366
Reading: 47 Writing: 68 Waiting: 157
Нас интересуют первое число в третьей строке (число обработанных коннектов) и третье (число запросов). Парсить будем несложным PHP-скриптом:
Скрипт нужно сохранить в файл и сделать исполняемым. Заодно нужно проверить путь к интерпритатору PHP в первой строке (он может отличаться в зависимости от системы). ДЛя рисования графика в конфигурацию MRTG нужно добавить примерно такие строки:
Target[nginx]: `/var/www/mrtg/scripts/nginx.php frontend.domain.com`
MaxBytes[nginx]: 1
Title[nginx]: nginx statistics
PageTop[nginx]: <h1>nginx statistics</h1>
AbsMax[nginx]: 1250000
Options[nginx]: integer,nopercent,nobanner,growright,dorelpercent
YLegend[nginx]: per second
ShortLegend[nginx]: per second
Legend1[nginx]: Connections per second
Legend2[nginx]: Requests per second
В итоге будет нарисован вот такой график:
Здесь синяя линия - число обрабатываемых ежесекундно запросов. Зелёная - количество соединений. Жёлтая - отношения числа соединений к числу запросов. Она позволяет косвенно оценить эффективность использования tcp-соединений (чем ниже линия тем лучше).