Мелочевка в копилку. Как оказалось, может быть полезно. Сразу оговорюсь, решение не гениальное, но забавное ;)
Итак, постановка задачи.
Требуется периодически мониторить статус веб-сервера. Т.е. не полноценный тест, а просто проверка, живо ли приложение (именно приложение, а не apache и иже с ними). Будем запрашивать главную страницу и проверять код ответа. 1xx, 2xx, 3xxx считаем нормой, 4xx – WARNING, 5xx – CRITICAL. В качестве окружения – CentOS сервер с установленным munin-node (один из нодов в общем мониторинге).
Плагин будет состоять из 2х частей.
- Простенький таск на PHP (symfony), который получает статус-коды
- Собственно плагин на bash
#lib/task/testSitesResponseTask.class.php
class testSitesResponseTask extends sfBaseTask
{}
Таск будет принимать один параметр – список сайтов, разделенный запятыми.
protected function configure(){//....$this->addArgument('sites', sfCommandArgument::REQUIRED,'Sites URLs comma separated. E.g. "www.site1.ru,www.site2.ru"');}
Тело таска:
protected function execute($arguments=array(),$options=array()){$sites_array=explode(',',$arguments['sites']);foreach($sites_arrayas$site){$code=$this->tester($site);$site_string=str_replace(array('.','/'),'_',$site);<span>// заменяем точки и слеши на подчерк (создаем уникальную переменную для сайта)</span>echo"$site_string.value $code\n";<span>// это важная строка! вывод значения для munin в виде variable_name.value NNN</span>}}
И простенький тестер на базе CURL:
protected function tester($url){$ch=curl_init();curl_setopt($ch, CURLOPT_URL,$url);curl_setopt($ch, CURLOPT_HEADER,true);curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);curl_exec($ch);$result=curl_getinfo($ch, CURLINFO_HTTP_CODE );<span>// Cохраняем HTTP статус-код в переменную</span>curl_close($ch);return$result;}
Теперь на базе этого таска можно написать плагинчик, который будет тестировать наши сайты.
Munin хранит плагины в /usr/share/munin/plugins/ (хотя в общем-то можно наш плагинчик положить сразу в /etc/munin/plugins/).
Наш плагин состоит из 2х частей. Конфигуратора и собственно запуска плагина.
# vim /usr/share/munin/plugins/sites
#!/bin/bash
# конфигуратор, запускается munin c параметром config. Показывает конфигурацию и выключается.
# заголовок графика
graph_title Sites status test
# подпись по оси Y
graph_vlabel status code
# категория
graph_category misc
# Описание под графиком
graph_info Sites status code
# псевдонимы
www_site1_ru.label site1
www_site2_ru.label site2
# лимиты для нотификации
www_site1_ru.warning 400
www_site1_ru.critical 500
www_site2_ru.warning 400
www_site2_ru.critical 500
# подписи для графиков
site1.info Status of the site1
site2.info Status of the site2
# запуск плагина
/path/to/symfony/symfony namespace:test-sites-response www.site1.ru,www.site2.ru
Вот почти все ;) Теперь делаем файл исполняемым и симлинк на него:
Тестер http-статус кода для munin
Мелочевка в копилку. Как оказалось, может быть полезно. Сразу оговорюсь, решение не гениальное, но забавное ;)
Итак, постановка задачи.
Требуется периодически мониторить статус веб-сервера. Т.е. не полноценный тест, а просто проверка, живо ли приложение (именно приложение, а не apache и иже с ними). Будем запрашивать главную страницу и проверять код ответа. 1xx, 2xx, 3xxx считаем нормой, 4xx – WARNING, 5xx – CRITICAL. В качестве окружения – CentOS сервер с установленным munin-node (один из нодов в общем мониторинге).
Плагин будет состоять из 2х частей.
- Простенький таск на PHP (symfony), который получает статус-коды
- Собственно плагин на bash
Таск на symfony (подробно процесс создания таска описан тут http://www.symfony-project.org/cookbook/1_2/en/tasks):
- создаем класс
Таск будет принимать один параметр – список сайтов, разделенный запятыми.
Тело таска:
И простенький тестер на базе CURL:
Запускается таск таким образом:
Теперь на базе этого таска можно написать плагинчик, который будет тестировать наши сайты.
Munin хранит плагины в /usr/share/munin/plugins/ (хотя в общем-то можно наш плагинчик положить сразу в /etc/munin/plugins/).
Наш плагин состоит из 2х частей. Конфигуратора и собственно запуска плагина.
Вот почти все ;) Теперь делаем файл исполняемым и симлинк на него:
Протестируем плагин:
и конфигурацию
Если все работает, перезапускаем munin-node:
И наблюдаем за построением графика.
p.s. о создании плагинов для munin подробнее тут: http://munin.projects.linpro.no/wiki/HowToWritePlugins