Наши партнеры

UnixForum






Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

На главную -> MyLDP -> Тематический каталог -> Решение административных задач в Linux

Мониторинг сервера с помощью 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/web

2. Установка и настройка 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 процесса.
Наслаждайтесь! :)