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 (#)