« Подготовка к работе сервера на Centos 5.6 х 64 | Микрософт прибьёт Yahoo Site Explorer »
Когда-то я уже писал про инструмент для мониторинга серверов под названием munin. В тот раз я не затрагивал плагины, а сейчас можно это сделать. Плагины для munin надо искать тут, один из полезных найденных мной плагинов называется apache_activity, он должен сканировать вывод апачевского mod_status’а и выдавать результат в виде графика. Проблема заключается в том, что сам плагин написан видимо под какую-то странную юниксу, поскольку под Центосом он не работает и в коде видно, что он там пытается делать что-то не то. Сам код написан на мерзотном перле, в котором проще по новой написать, чем разобраться, поэтому родилась идея сделать такой же, но работающий плагин и на пхп. До кучи, кроме обычных запросов, которые вообще то раз в 5 минут смотреть бессмысленно, поскольку в одну секунду может быть 200 запросов, а в следующую – 0, мой плагин мониторит “длинные” запросы “W”, которые выполняются дольше 20 секунд и которые как правило и отжирают основные ресурсы сервера.
Код плагина под катом, для работы надо поменять урл по которому сервер показывает выдачу мод статуса:
#!/usr/bin/php -dsafe_mode=Off <?php $url ='http://your.server.status.com/'; $letters = array(); // $letters['_'] ='Waiting for Connection'; // useless $letters['S'] ='Starting up'; $letters['R'] ='Reading Request'; $letters['W'] ='Sending Reply'; $letters['K'] ='Keepalive (read)'; $letters['D'] ='DNS Lookup'; $letters['C'] ='Closing connection'; $letters['L'] ='Logging'; $letters['G'] ='Gracefully finishing'; $letters['I'] ='Idle cleanup of worker'; //$letters['.'] ='Open slot with no current process'; // useless function getarg($arn) { if (!isset($_SERVER['argv'])) return FALSE; $a = $_SERVER['argv']; if (!isset($a[$arn])) return FALSE; return $a[$arn]; } $arg1 = getarg(1); if ('config'== $arg1) { print "graph_title Apache status graph_args --base 1000 -l 0 graph_category apache graph_vlabel processes "; foreach ($letters as $lett => $val) { print "astatus_80_$lett.label $lett $val\n"; print "astatus_80_$lett.type GAUGE\n"; } print "astatus_80_WL.label Long W\n"; print "astatus_80_WL.type GAUGE\n"; exit; } $html = @file_get_contents($url); if (100 > strlen($html)) { print "error [$html]"; exit; } ApStGetLetters($html); ApStGetLongW($html, 20); function ApStGetLongW($html, $wsec) { $ar1 = explode('<b>W</b>', $html); $ret =0; foreach ($ar1 as $val) { $ar2 = explode('</td><td>', $val); $i =2; if (isset($ar2[$i])) { $val = $ar2[$i]; if (is_numeric($val)) { if ($val >= $wsec) $ret++; } } } print "astatus_80_WL.value $ret\n"; } function ApStGetLetters($html) { GLOBAL $letters; $ar1 = explode('</dl><pre>', $html); $ar2 = explode('</pre>', $ar1[1]); $str = $ar2[0]; foreach ($letters as $lett => $val) { $num = substr_count($str, $lett); print "astatus_80_$lett.value $num\n"; } } ?>
Для установки плагина, надо скопировать его в файл /usr/share/munin/plugins/apache_status-v1, потом надо создать линк на файл в директории
/etc/munin/plugins (юникс такой юникс):
ln -s /usr/share/munin/plugins/apache_status-v1 apache_status-v1
Потом надо запустить конфигуратор мунина:
munin-run df config
И потом перезапустить ноду:
service munin-node restart
После этого плагин должен начать работать и в отчёте мунина появится новый набор графиков для статуса. Как я уже написал, самое осмысленное значение это количество долгих запросов, длину можно менять в сырцах плагина, но 20 секунд вроде более-менее нормальное значение. В результате работы плагина, получается примерно такая картинка:

Прикольное видео для непрограммистов:
2 Responses
June 23rd, 2011 at 15:45:22
// php gravatar() ?>1Поставил себе этот плагин, посмотрим как будт работать . Спасибо.
September 23rd, 2011 at 08:14:30
// php gravatar() ?>2спасибо, поставил
RSS feed for comments on this post · TrackBack URI
Написать комментарий
Про что писал
Календарь
Куйворды
Архив
Подписка на блог
Статистика подписки
Страницы
Комментарии
Последние посты
Blogroll
Счётчики