Мониторинг серверов · 6 min read · Oct 08, 2025

Идеальный балансировщик нагрузки и высокодоступный веб-кластер с 2 серверами, работающими под Xen на Ubuntu 8.04 Hardy Heron - Страница 7

13. Мониторинг серверов с помощью munin и monit (web1, web2)

В этой главе я опишу, как вы можете мониторить узлы ваших веб-серверов с помощью munin и monit. Munin создает симпатичные графики почти каждого аспекта вашего сервера (средняя загрузка, использование памяти, использование CPU, пропускная способность MySQL, трафик eth0 и т.д.) без особой настройки, в то время как monit проверяет доступность таких сервисов, как Apache, MySQL, Postfix и принимает соответствующие меры, такие как перезапуск, если обнаруживает, что сервис работает не так, как ожидалось. Сочетание этих двух дает вам полный мониторинг: графики, которые позволяют вам распознавать текущие или предстоящие проблемы (например, “Нам нужен больший сервер, наша средняя загрузка быстро растет.”), и сторожевой пес, который обеспечивает доступность контролируемых сервисов.

Хотя munin позволяет вам мониторить более одного сервера, мы здесь обсудим только мониторинг системы, на которой он установлен.

13.1 Установка и настройка munin

apt-get install munin munin-node

Далее, мы должны отредактировать файл конфигурации munin /etc/munin/munin.conf.

mv /etc/munin/munin.conf /etc/munin/munin.conf.bak
vi /etc/munin/munin.conf

На web1.example.com

dbdir   /var/lib/munin
htmldir /var/www/example/web/monitoring
logdir  /var/log/munin
rundir  /var/run/munin
tmpldir /etc/munin/templates
[web1.example.com]
    address 127.0.0.1
    use_node_name yes

На web2.example.com

dbdir   /var/lib/munin
htmldir /var/www/example/web/monitoring
logdir  /var/log/munin
rundir  /var/run/munin
tmpldir /etc/munin/templates
[web2.example.com]
    address 127.0.0.1
    use_node_name yes

На web1 И web2

Далее мы создаем директорию /var/www/example/web/monitoring и меняем ее владельца на пользователя и группу munin, иначе munin не сможет поместить свой вывод в эту директорию. Затем мы перезапускаем munin:

mkdir -p /var/www/example/web/monitoring
chown munin:munin /var/www/example/web/monitoring
/etc/init.d/munin-node restart

Теперь хорошей идеей будет защитить директорию /var/www/example/web/monitoring паролем, если вы не хотите, чтобы каждый мог видеть каждую мелкую статистику о вашем сервере.

Для этого мы создаем файл .htaccess в /var/www/example/web/monitoring:

vi /var/www/example/web/monitoring/.htaccess

AuthType Basic
AuthName "Только для участников"
AuthUserFile /var/www/example/monitoring/.htpasswd

require valid-user

Затем мы должны создать файл паролей /var/www/example/.htpasswd. Мы хотим войти с именем пользователя admin, поэтому делаем это:

htpasswd -c /var/www/example/web/monitoring/.htpasswd admin

Введите пароль для admin, и вы готовы!

Теперь вы можете получить доступ к отчетам (сбор данных займет несколько минут) по следующим адресам:

http://www.example.com:10001/monitoring для web1.example.com

и

http://www.example.com:20001/monitoring для web2.example.com.

13.2 Установка и настройка monit

Чтобы установить monit, мы делаем следующее:

apt-get install monit

Теперь мы должны отредактировать /etc/monit/monitrc. По умолчанию /etc/monit/monitrc имеет много примеров, и вы можете найти больше примеров конфигурации на http://www.tildeslash.com/monit/doc/examples.php. Однако в моем случае я хочу мониторить proftpd, mysql, apache и postfix, я хочу включить веб-интерфейс monit на порту 2812, я хочу https веб-интерфейс, я хочу войти в веб-интерфейс с именем пользователя admin и паролем test, и я хочу, чтобы monit отправлял email-уведомления на root@localhost, так что мой файл выглядит так:

На web1.example.com

cp /etc/monit/monitrc /etc/monit/monitrc_orig
cat /dev/null > /etc/monit/monitrc
vi /etc/monit/monitrc

set daemon  60
set logfile syslog facility log_daemon
set mailserver localhost
set mail-format { from: [email protected] }
set alert [email protected]
set httpd port 2812 and
     SSL ENABLE
     PEMFILE  /var/certs/monit.pem
     allow admin:test
#check process vsftpd with pidfile /var/run/vsftpd/vsftpd.pid
#   start program = "/etc/init.d/vsftpd start"
#   stop program  = "/etc/init.d/vsftpd stop"
#   if failed host 192.168.1.104 port 21 protocol ftp 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/mysql start"
   stop program = "/etc/init.d/mysql 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/apache2.pid
   group www
   start program = "/etc/init.d/apache2 start"
   stop program  = "/etc/init.d/apache2 stop"
   if failed host 192.168.1.104 port 80  protocol http
      and request "/example/web/monit/token" then restart
   if cpu is greater than 60% for 2 cycles then alert
   if cpu > 80% 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
check process named with pidfile /var/lib/named/var/run/bind/run/named.pid
   group bind
   start program = "/etc/init.d/bind9 start"
   stop  program = "/etc/init.d/bind9 stop"
   if failed port 53 then restart
   if 5 restarts within 5 cycles then timeout

На web2.example.com

cp /etc/monit/monitrc /etc/monit/monitrc_orig
cat /dev/null > /etc/monit/monitrc
vi /etc/monit/monitrc

set daemon  60
set logfile syslog facility log_daemon
set mailserver localhost
set mail-format { from: [email protected] }
set alert [email protected]
set httpd port 2812 and
     SSL ENABLE
     PEMFILE  /var/certs/monit.pem
     allow admin:test
#check process vsftpd with pidfile /var/run/vsftpd/vsftpd.pid
#   start program = "/etc/init.d/vsftpd start"
#   stop program  = "/etc/init.d/vsftpd stop"
#   if failed host 192.168.1.105 port 21 protocol ftp 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/mysql start"
   stop program = "/etc/init.d/mysql 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/apache2.pid
   group www
   start program = "/etc/init.d/apache2 start"
   stop program  = "/etc/init.d/apache2 stop"
   if failed host 192.168.1.105 port 80  protocol http
      and request "/example/web/monit/token" then restart
   if cpu is greater than 60% for 2 cycles then alert
   if cpu > 80% 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
check process named with pidfile /var/lib/named/var/run/bind/run/named.pid
   group bind
   start program = "/etc/init.d/bind9 start"
   stop  program = "/etc/init.d/bind9 stop"
   if failed port 53 then restart
   if 5 restarts within 5 cycles then timeout

Файл конфигурации довольно самодостаточен; если вы не уверены в каком-либо параметре, посмотрите документацию monit: http://www.tildeslash.com/monit/doc/manual.php

В части конфигурации apache monit вы найдете это:

if failed host www.example.com port 80 protocol http
      and request "/example/web/monit/token" then restart

что означает, что monit пытается подключиться к www.example.com на порту 80 и пытается получить доступ к файлу /monit/token, который находится по адресу /var/www/example/web/monit/token, потому что корневая директория нашего веб-сайта - /var/www/example/web. Если monit не удается, это означает, что Apache не работает, и monit собирается перезапустить его.

На web1 И web2

Теперь мы должны создать файл /var/www/example/web/monit/token и записать в него какую-то случайную строку:

mkdir /var/www/example/web/monit
echo “hello” > /var/www/example/web/monit/token

Далее мы создаем pem сертификат (/var/certs/monit.pem), который нам нужен для SSL-зашифрованного веб-интерфейса monit:

mkdir /var/certs
cd /var/certs

Нам нужен файл конфигурации OpenSSL для создания нашего сертификата. Он может выглядеть так:

vi /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            = [email protected]
[ 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

После этого мы редактируем /etc/default/monit, чтобы включить демон monit. Измените startup на 1 и установите CHECK_INTERVALS на интервал в секундах, который вы хотите, чтобы monit проверял вашу систему. Я выбрал 60 (секунд), так что мой файл выглядит так:

vi /etc/default/monit

# Defaults for monit initscript
# sourced by /etc/init.d/monit
# installed at /etc/default/monit by maintainer scripts
# Fredrik Steen 
# You must set this variable to for monit to start
startup=1
# To change the intervals which monit should run uncomment
# and change this variable.
CHECK_INTERVALS=60

Наконец, мы можем запустить monit:

/etc/init.d/monit start

Теперь укажите в браузере https://192.168.1.104:2812/ или https://192.168.1.105:2812/, войдите с именем admin и паролем test, и вы должны увидеть веб-интерфейс monit.

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.