in Профессиональное

Мониторинг для ленивых с помощью munin на примере CentOS 5

Проблема:

нужно мониторить состояние основных параметров одного или нескольких серверов. Достаточно часто возникающая задача как мне кажется.

Предисловие:

В основу данной статьи легла эта статья на 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 это конечно же не единственное решение проблемы мониторинга. Однако мне оно понравилось простотой и быстротой настройки, легкой расширяемостью – и я его применяю прямо сейчас )) Чего и вам желаю.

Основные ссылки на проект:

Решение:

Актуально для 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 достаточно выполнить следующую команду:

yum install munin munin-node

Небольшое лирическое отступление: здесь мы устанавливаем два пакета – munin и munin-node. Первый это собственно сам munin который собирает данные по нодам и рисует графики. Второй – это провайдер данных с конкретного нода. Т.е. munin-node в соответствии с настройками плагинов собирает информацию, и передает ее munin по запросу с его стороны. Для нода, который не является собственно сервером статистики munin нужно устанавливать только munin-node.

Затем нам нужно создать startup ссылки для munin-node и запустить его.

chkconfig –levels 235 munin-node on
/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:

mkdir -p /var/www/www.example.com/web/monitoring
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:

yum install munin-node

Затем нам нужно создать startup ссылки для munin-node и запустить его.

chkconfig –levels 235 munin-node on
/etc/init.d/munin-node start

Это еще не все. Теперь нам надо сказать основному серверу munin что появился новый нод в мониторинге. Заходим на server1.example.com, открываем /etc/munin/munin.conf и добавляем новую секцию host:

[server2.example.com]
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 отдавал ему статистику.

allow ^YY.YY.YY.YY$

где YY.YY.YY.YY IP нашего головного сервера.

После этого нужно перезапустить munin-node

/etc/init.d/munin-node start

И подождать пока головной сервер запросит статистику с этого нода. Кстати посмотреть и изменить при необходимости частоту запуска можно в файле /etc/cron.d/munin. По умолчанию там будет что-то такое:

*/5 * * * *     munin test -x /usr/bin/munin-cron && /usr/bin/munin-cron
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 и добавим туда следующие строки:

# группы контактов – пока один me
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:

#!/bin/bash
echo “To: $1
From: monitoring@example.com
Subject: $2
$3

example.com-monitoring with munin” | /var/qmail/bin/qmail-inject

И команда отправки выглядит так:

contact.me.command | /root/bin/munin.notify your@email.address.here “Munin-notification for ${var:group} :: ${var:host}” “[${var:group};${var:host}] -> ${var:graph_title} -> warnings: ${loop<,>:wfields  ${var:label}=${var:value}} criticals: ${loop<,>:cfields  ${var:label}=${var:value}}”

Результат выполнения будет такой:

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!

Write a Comment

Comment

*

  1. Спасибо.
    Хорошо разжевал.
    Не сильно munin спамит почту сообщениями?

    • Там это все настраивается и довольно тонко, так что каждый под себя может сделать ) Сейчас не сильно спамит, но бывало и посильнее. Да и установка на центе стала еще проще.