Проблема:
нужно мониторить состояние основных параметров одного или нескольких серверов. Достаточно часто возникающая задача как мне кажется.
Предисловие:
В основу данной статьи легла эта статья на HowToForge http://www.howtoforge.com/server-monitoring-with-munin-and-monit-on-centos-5.2 и мой личный опыт настройки и работы с Munin.
Munin мониторит и создает графики по ряду критичных параметров и приложений на ваших серверах – как то Apache, MySQL, Postfix и многие другие.
Он быстро и просто настраивается, быстро расширяется плагинчиками (коих по умолчанию тоже не мало), которые можно писать и самому на удобном для вас языке (bash, perl, php, ruby… – смотря что у вас есть в распоряжении). Очень приятной особенностью munin является то, что он также быстро может быть настроен на мониторинг более чем одного сервера и даже может интегрироваться с Nagios.
Munin это конечно же не единственное решение проблемы мониторинга. Однако мне оно понравилось простотой и быстротой настройки, легкой расширяемостью – и я его применяю прямо сейчас )) Чего и вам желаю.
Основные ссылки на проект:
- Trac проекта – http://munin.projects.linpro.no/
- Каталог плагинов – http://muninexchange.projects.linpro.no/
Решение:
Актуально для CentOS 5, но может быть адаптировано и для других Linux дистрибутивов при наличии смекалки и прямых ручонок.
1. Допущения
У вас есть некий хостнейм server1.example.com и вебсайт www.example.com на нем с корнем document root в /var/www/www.example.com/web.
2. Добавляем репозиторий RPMforge
В CentOS 5 munin не доступен в дефолтных репозиториях. К счастью мы можем установить его из репозитория RPMforge. Для того чтобы добавить возможность работы с RPMforge мы должны выполнить следующие команды:
для i386 систем:
wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
rpm -Uvh rpmforge-release-0.3.6-1.el5.rf.i386.rpm
rm -f rpmforge-release-0.3.6-1.el5.rf.i386.rpm
для x86_64 систем:
wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm
rpm -Uvh rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm
rm -f rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm
(обязательно посетите https://rpmrepo.org/RPMforge/Using для того чтобы получить ссылки на последние версии).
3. Устанавливаем и конфигурируем munin
для того чтобы установить munin достаточно выполнить следующую команду:
Небольшое лирическое отступление: здесь мы устанавливаем два пакета – munin и munin-node. Первый это собственно сам munin который собирает данные по нодам и рисует графики. Второй – это провайдер данных с конкретного нода. Т.е. munin-node в соответствии с настройками плагинов собирает информацию, и передает ее munin по запросу с его стороны. Для нода, который не является собственно сервером статистики munin нужно устанавливать только munin-node.
Затем нам нужно создать startup ссылки для munin-node и запустить его.
/etc/init.d/munin-node start
Далее редактируем конфигурационный файл munin /etc/munin/munin.conf. Нужно указать munin куда сладывать вывод (html + графики). Поскольку нам интересно мониторить по web – изменяем значение параметра htmldir, и также мы хотим использовать имя server1.example.com вместо localhost.localdomain в HTML файлах, т.о. мы заменяем localhost.localdomain на server1.example.com. Файл в результате будет выглядеть так:
vi /etc/munin/munin.conf
[…]
dbdir /var/lib/munin
htmldir /var/www/www.example.com/web/monitoring
logdir /var/log/munin
rundir /var/run/munin
# Where to look for the HTML templates
tmpldir /etc/munin/templates
[…]
# a simple host tree
[server1.example.com]
address 127.0.0.1
use_node_name yes
[…]
Затем подготовим директорию в docroot нашего сайта www.example.com: /var/www/www.example.com/web/monitoring и изменим права доступа на пользователя и группу munin, иначе munin не сможет записывать свои выходные файлы туда. После рестартуем munin:
chown munin:munin /var/www/www.example.com/web/monitoring
/etc/init.d/munin-node restart
Теперь нужно подождать десяток минут пока munin соберет первую статистику и после этого открыть http://www.example.com/monitoring/ в своем любимом браузере, и вы сможете увидеть вашу первую статистику. После нескольких дней она будет выглядеть как-то так:
(это лишь небольшой пример тех графиков, которые создает munin)
4. Защищаем наш мониторинг от посторонних базовой HTTP аутентификацией
Теперь неплохо было бы защитить паролем директорию /var/www/www.example.com/web/monitoring (если вы конечно не хотите предоставлять публичный доступ к статистике).
Делается это просто – создаем .htaccess файл в /var/www/www.example.com/web/monitoring:
vi /var/www/www.example.com/web/monitoring/.htaccess
AuthType Basic
AuthName “Members Only”
AuthUserFile /var/www/www.example.com/.htpasswd
<limit GET PUT POST>
require valid-user
</limit>
Теперь нужно создать файл с паролями для доступа к дериктории – /var/www/www.example.com/.htpasswd. Мы хотим добавить пользователя admin:
htpasswd -c /var/www/www.example.com/.htpasswd admin
Вводим пароль админа – и вуаля! ))
5 Добавляем в мониторинг еще один сервер
Пусть у нас есть еще один сервер server2.example.com и мы хотим добавить его в мониторинг.
Выполняем шаг 2 (RPMforge) так же как и для первого сервера. В шаге 3 будут некоторые изменения:
Устанавливаем только munin-node:
Затем нам нужно создать startup ссылки для munin-node и запустить его.
/etc/init.d/munin-node start
Это еще не все. Теперь нам надо сказать основному серверу munin что появился новый нод в мониторинге. Заходим на server1.example.com, открываем /etc/munin/munin.conf и добавляем новую секцию host:
local_address XX.XX.XX.XX
use_node_name yes
Здесь XX.XX.XX.XX это IP адрес server2.example.com
Далее надо на ноде server2.example.com разрешить доступ к сборщику статистики с нашего головного сервера. Открываем файл /etc/munin/munin-node.conf и ищем такие строки:
# A list of addresses that are allowed to connect. This must be a
# regular expression, due to brain damage in Net::Server, which
# doesn’t understand CIDR-style network notation. You may repeat
# the allow line as many times as you’d like
allow ^127.0.0.1$
Ниже надо дописать regexp с IP головного сервера мониторинга, чтобы munin-node отдавал ему статистику.
где YY.YY.YY.YY IP нашего головного сервера.
После этого нужно перезапустить munin-node
И подождать пока головной сервер запросит статистику с этого нода. Кстати посмотреть и изменить при необходимости частоту запуска можно в файле /etc/cron.d/munin. По умолчанию там будет что-то такое:
14 10 * * * munin test -x /usr/share/munin/munin-limits && /usr/share/munin/munin-limits –force –contact nagios –contact old-nagios
Основное сердце Munin это первая строка – которая собственно и запускает опрос нодов и создание выходных файлов. При желании этот процесс можно запускать чаще или реже.
6. Нотификации
Помимо пассивного мониторинга, munin может также предупреждать нас о достижении некоторых лимитов по тому или иному ресурсу на сервере. Нотификации настраиваются на головном сервере мониторинга (в нашем случае это server1.example.com).
Откроем /etc/munin/munin.conf и добавим туда следующие строки:
contacts me
# команда на отправку нотификации
contact.me.command |mail -s “Munin-notification for ${var:group} :: ${var:host}” your@email.address.here
# всегда отправлять предупреждения и критические нотификации
contact.me.always_send warning critical
Полный список переменных типа ${var:group} можно посмотреть здесь: http://munin.projects.linpro.no/wiki/MuninAlertVariables.
В моем случае пришлось заместо mail нашаманить довольно топорный скриптик-враппер над qmail-inject:
echo “To: $1
From: monitoring@example.com
Subject: $2
$3
—
example.com-monitoring with munin” | /var/qmail/bin/qmail-inject
И команда отправки выглядит так:
Результат выполнения будет такой:
Subject: Munin-notification for example.com :: server2.example.com
[example.com;server2.example.com] -> CPU usage -> warnings: user=70.94 criticals:
—
example.com-monitoring with munin
Вот вкратце все, что я хотел рассказать про этот замечательный инструмент для любого LAMP проекта. Enjoy!
Спасибо.
Хорошо разжевал.
Не сильно munin спамит почту сообщениями?
Там это все настраивается и довольно тонко, так что каждый под себя может сделать ) Сейчас не сильно спамит, но бывало и посильнее. Да и установка на центе стала еще проще.