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-скриптом:
#!/usr/bin/php
<?php
// Получаем имя хоста
$host = isset($argv[1]) ? $argv[1] : '127.0.0.1';
// Получаем данные
$data = file('http://' . $host . '/nginx_status');
// Парсим данные
$line = trim($data[2]);
$conns = preg_replace('/^(\d+?)\s+?\d+?\s+?\d+?$/', "$1", $line);
$reqs = preg_replace('/^\d+?\s+?\d+?\s+?(\d+?)$/', "$1", $line);
// Отображаем результат
print "$conns\n";
print "$reqs\n";
print time() . "\n";
print "$host\n";
Скрипт нужно сохранить в файл и сделать исполняемым. Заодно нужно проверить путь к интерпритатору 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-соединений (чем ниже линия тем лучше).
На этом всё. Приятной работы!


Ladm 2011-11-27 21:23:10 (#)