Библиотека сайта rus-linux.net
Мониторинг сервера с помощью munin и monit на Fedora 7
Оригинал: Server Monitoring With munin And monit On Fedora 7
Автор: Falko Timme
Дата: 10 апреля 2007 г.
Перевод: Андрей Синицын aka boombick
Дата перевода: 9 февраля 2008
При копировании материала обязательны указание автора, переводчика и ссылки на оригинал статьи и настоящую страницу как первоисточник перевода!
В этой статье я расскажу как организовать процесс мониторинга сервера, работающего под управлением Fedora 7, при помощи munin и monit. Munin может генерировать симпатичные графики, отображающие состояние вашей системы, затрагивая такие параметры как общая загрузка системы (load average), использование ресурсов оперативной памяти и процессора, производительность MySQL, состояние сетевых интерфейсов и т.д. Это гибкая программа, не требующая сложного конфигурирования. Monit отслеживает состояние запущенных сервисов, например Apache, MySQL, Postfix и выполняет указанные вами действия при наступлении определенных событий. Например, он может перезапустить "подвисший" веб-сервер. Сочетание этих двух приложений позволит вам гибко и эффективно проводить мониторинг сервера; графики-отчеты о состоянии системы позволят вам предвосхитить возможные проблемы ("Загрузка нашей системы растет слишком быстро, нам нужен новый сервер"), а постоянный контроль за запущенными сервисами позволит создать отказоустойчивую систему.
Хотя munin позволяет вести наблюдение за несколькими системами одновременно, но в этой заметке мы ограничимся описанием мониторинга сервера, на котором непосредственно установлен munin.
Данное руководство описывает процесс, характерный для Fedora 7, но оно вполне применимо к любому другому дистрибутиву Linux, с незначительными изменениями.
Хочу оговориться, что данный способ далеко не единственный, и существует немало других вариантов организации службы мониторинга. Я выбрал этот способ, но я не даю никаких гарантий, что он максимально соответствует вашим потребностям.
1. Необходимые замечания
Имя нашей системы server1.example.com, и у нас есть веб-сайт, расположенный по адресу www.example.com, с корневой директорией /var/www/www.example.com/web2. Установка и настройка munin
Для установки munin на Fedora 7 выполните:yum install munin munin-node
Затем сообщите системе, что вы хотите автоматически запускать munin при загрузке и запустите его:
chkconfig --levels 235 munin-node on
/etc/init.d/munin-node start
Теперь приступим к настройке. Конфигурационный файл munin располагается здесь: /etc/munin/munin.conf. Мы хотим, чтобы графики системы автоматически помещались в /var/www/www.example.com/web/monitoring, поэтому мы меняем значение параметра htmldir. Также мы хотим использовать доменное имя server1.example.com вместо localhost.localdomain. Это также необходимо прописать в конфиге.Без комментариев измененный конфигурационный файл должен выглядеть примерно так:
[...]
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
[...]
Теперь создайте директорию /var/www/www.example.com/web/monitoring и
измените ее владельца и группу на 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
Затем подождите несколько минут, пока сгенерируются первые отчеты и зайдите
браузером на адрес http://www.example.com/monitoring/. После нескольких
дней использования вы получите примерно такую картину:
(Это лишь малая часть из всех графиков, которые генерирует munin)
3. Защита паролем доступа к выводу munin (опционально)
Неплохо было бы закрыть доступ к директории /var/www/www.example.com/web/monitoring, содержащей статистику работы вашего сервера от нежелательных глаз.
Для этого создайте файл .htaccess в директории
/var/www/www.example.com/web/monitoring со следующим содержимым:
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
Затем введите пароль для пользователя admin и все готово!
4. Установка и настройка monit
В официальных репозиториях Fedora 7 нет monit, но его можно найти на RPMForge. Мы воспользуемся пакетом для RHEL5, который прекрасно работает на Fedora 7
rpm -Uhv http://apt.sw.be/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
Затем установим monit:
yum install monit
и активируем его запуск при старте системы:
chkconfig --levels 235 monit on
По умолчанию конфигурационный файл monin расположен в /etc/monit.conf.
Там вы сможете найти примерную конфигурацию для сервиса (Более подробно
конфигурация описывается на http://www.tildeslash.com/monit/doc/examples.php).
Все примеры в этом файле закомментированы, но в нем также имеется указание
просматривать директорию /etc/monit.d/ в поисках конфигурационных файлов.
Поэтому вместо правки основного конфига мы создадим свой собственный:
/etc/monit.d/monitrc. В моем случае я хочу следить за proftpd, sshd,
mysql, apache и postfix. Я хочу иметь доступ к веб-интерфейсу monit по
порту 2812 и использовать защищенное соединение (https). Я хочу авторизовываться
в веб-интерфейсе с логином admin и паролем test и хочу получать
email-уведомления на адрес root@localhost
В этом случае конфигурационный файл выглядит так:
set daemon 60
set logfile syslog facility log_daemon
set mailserver localhost
set mail-format { from: monit@server1.example.com }
set alert root@localhost
set httpd port 2812 and
SSL ENABLE
PEMFILE /var/certs/monit.pem
allow admin:test
check process proftpd with pidfile /var/run/proftpd.pid
start program = "/etc/init.d/proftpd start"
stop program = "/etc/init.d/proftpd stop"
if failed port 21 protocol ftp then restart
if 5 restarts within 5 cycles then timeout
check process sshd with pidfile /var/run/sshd.pid
start program "/etc/init.d/sshd start"
stop program "/etc/init.d/sshd stop"
if failed port 22 protocol ssh then restart
if 5 restarts within 5 cycles then timeout
check process mysql with pidfile /var/run/mysqld/mysqld.pid
group database
start program = "/etc/init.d/mysqld start"
stop program = "/etc/init.d/mysqld stop"
if failed host 127.0.0.1 port 3306 then restart
if 5 restarts within 5 cycles then timeout
check process apache with pidfile /var/run/httpd.pid
group www
start program = "/etc/init.d/httpd start"
stop program = "/etc/init.d/httpd stop"
if failed host www.example.com port 80 protocol http
and request "/monit/token" then restart
if cpu is greater than 60% for 2 cycles then alert
if cpu > 80% for 5 cycles then restart
if totalmem > 500 MB for 5 cycles then restart
if children > 250 then restart
if loadavg(5min) greater than 10 for 8 cycles then stop
if 3 restarts within 5 cycles then timeout
check process postfix with pidfile /var/spool/postfix/pid/master.pid
group mail
start program = "/etc/init.d/postfix start"
stop program = "/etc/init.d/postfix stop"
if failed port 25 protocol smtp then restart
if 5 restarts within 5 cycles then timeout
ВНИМАНИЕ! Убедитесь, что все службы, которые указаны monit для мониторинга действительно установлены на вашем сервере! Иначе monit просто не запустится. Например, если вы хотите наблюдать за Postfix, а он реально не установлен на сервере, то запуск monit окончится неудачей
Синтаксис конфигурационного файла прост и самодокументирован. Если вы не уверены по поводу какой-либо опции либо хотите расширить функциональность, обратитесь к полной документации по адресу http://www.tildeslash.com/monit/doc/manual.php.
В секции Apache конфигурационного файла вы можете увидеть следующее:
if failed host www.example.com port 80 protocol http
and request "/monit/token" then restart
Это означает, что monit пытается соединиться с адресом www.example.com по 80 порту и получить доступ к файлу /monit/token, который физически размещен в системе в /var/www/www.example.com/web/monit/token (Как вы помните, корневая директория нашего сайта - это /var/www/www.example.com/web/). Если monit не сможет этого сделать, значит Apache не работает ("висит" или вообще отключен) и monit перезапустит его.Теперь нам необходимо создать файл /var/www/www.example.com/web/monit/token и записать в него произвольную строку:
mkdir /var/www/www.example.com/web/monit
echo "hello" > /var/www/www.example.com/web/monit/token
Далее необходимо создать сертификат pem (/var/certs/monit.pem) для организации доступа к веб-интерфейсу по SSL:
mkdir /var/certs
cd /var/certs
Создадим конфигурационный файл OpenSSL, расположенный в /var/certs/monit.cnf для генерации сертификатов. Его примерное содержание таково:
# create RSA certs - Server
RANDFILE = ./openssl.rnd
[ req ]
default_bits = 1024
encrypt_key = yes
distinguished_name = req_dn
x509_extensions = cert_type
[ req_dn ]
countryName = Country Name (2 letter code)
countryName_default = MO
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = Monitoria
localityName = Locality Name (eg, city)
localityName_default = Monittown
organizationName = Organization Name (eg, company)
organizationName_default = Monit Inc.
organizationalUnitName = Organizational Unit Name (eg, section)
organizationalUnitName_default = Dept. of Monitoring Technologies
commonName = Common Name (FQDN of your server)
commonName_default = server.monit.mo
emailAddress = Email Address
emailAddress_default = root@monit.mo
[ cert_type ]
nsCertType = server
Затем сгенерируем сертификаты:
openssl req -new -x509 -days 365 -nodes -config ./monit.cnf -out /var/certs/monit.pem -keyout /var/certs/monit.pem openssl gendh 512 >> /var/certs/monit.pem openssl x509 -subject -dates -fingerprint -noout -in /var/certs/monit.pem chmod 700 /var/certs/monit.pemИ запустим monit:
/etc/init.d/monit start
Теперь зайдите браузером на https://www.example.com:2812/ (Убедитесь,
что порт 2812 не блокируется фаерволлом), авторизуйтесь с логином admin и
паролем test и вы получите доступ к веб-интерфейсу monin. Он выглядит примерно
так:
Главный экран
Статус веб-сервера Apache
Как указано а вашей конфигурации /etc/monit.d/monitrc monit будет перезапускать сервисы, когда они не будут отвечать на запросы, и посылать email-уведомления в случае смены ID процесса.Наслаждайтесь! :)