Мониторинг серверов · 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.
Get new posts in your inbox
No spam. Unsubscribe anytime.