Продолжаем статью Мониторинг сервера с Munin и Monit в CentOS 7 Часть1
В прошлой статье мы установили вебсервер Apache, установили и настроили Munin. Теперь у нас есть работающая система мониторинга на основе графиков.
Теперь настроим оставшуюся часть нашего мониторинга — Monit:
Установка и настройка Monit
Установим Monit с помощью следующей команды:
yum install monit
Далее добавим его в автозагрузку и запустим:
systemctl enable monit
systemctl start monit
Файл конфигурации Monit расположен в /etc/monitrc,там можно найти примеры различных конфигураций (больше примеров здесь), все они закомментированы, также Monit просматривает папку /etc/monit.d
Например я хочу проверять доступность следующих сервисов:
- proftpd
- sshd
- mysql
- apache
- postfix
Также, я хочу настроить следующие параметры:
- Включить вебинтерфейс Monit (порт 2812)
- Для вебинтерфейса использовать HTTPS вместо HTTP
- Настроить парольную авторизацию для доступа к вебинтерфейсу
- Monit должен отправлять сообщения на адрес root@localhost
Сперва настроим авторизацию. Для этого нужно отредактировать файл /etc/monit.d/monitrc
nano /etc/monit.d/monitrc
И пролистываем его, пока не найдем секцию
set httpd port 2812 and use address localhost # only accept connection from localhost allow localhost # allow localhost to connect to the server and allow admin:monit # require user 'admin' with password 'monit' allow @monit # allow users of group 'monit' to connect (rw) allow @users readonly # allow users of group 'users' to connect readonly
Заменим эту секцию на
set httpd port 2812 and use address 0.0.0.0 SSL ENABLE PEMFILE /var/certs/monit.pem allow admin:test
Этим мы запустили вебинтерфейс на порту 2812, на всех доступных IP адресах, с HTTPS и авторизацией через логин/пароль admin/test
Замените логин и пароль на что-либо более защищенное.
Теперь добавим сервисы для мониторинга. Вместо редактирования файла /etc/monitrc, мы создадим новый файл конфигурации /etc/monit.d/monitrc
nano /etc/monit.d/monitrc
Пример содержимого файла:
set logfile syslog facility log_daemon # Отправляем почту через localhost set mailserver localhost # Указываем адрес отправителя set mail-format { from: monit@server1.example.com } # Отправлять уведомления на этот адрес set alert root@localhost # Мониторинг Proftpd # Проверка процесса с PID /var/run/proftpd/proftpd.pid # Команды запуска и остановки сервиса # Условия: если не удалось подключиться к порту 21 через протокол ftp - рестарт # если было сделано 5 рестартов за последние 5 циклов - пауза в проверке # Остальные сервисы аналогично check process proftpd with pidfile /var/run/proftpd/proftpd.pid start program = "/usr/bin/systemctl start proftpd" stop program = "/usr/bin/systemctl stop proftpd" if failed port 21 protocol ftp then restart if 5 restarts within 5 cycles then timeout # Мониторинг SSH check process sshd with pidfile /var/run/sshd.pid start program "/usr/bin/systemctl start sshd" stop program "/usr/bin/systemctl stop sshd" if failed port 22 protocol ssh then restart if 5 restarts within 5 cycles then timeout # Мониторинг MySQL # Дополнительно указана группа database check process mysql with pidfile /var/run/mysqld/mysqld.pid group database start program = "/usr/bin/systemctl start mysqld" stop program = "/usr/bin/systemctl stop mysqld" if failed host 127.0.0.1 port 3306 then restart if 5 restarts within 5 cycles then timeout # Мониторинг Apache # Дополнительно указана группа www # Дополнительное условие проверки (доступ по 80 порту и ответ с указанной страницы) # Если нагрузка на процессор выше 60% в течение 2 циклов - уведомить # Если нагрузка выше 80% в течение 5 циклов - рестарт # И т.д. check process apache with pidfile /var/run/httpd/httpd.pid group www start program = "/usr/bin/systemctl start httpd" stop program = "/usr/bin/systemctl stop httpd" if failed host localhost 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 # Мониторинг PostFix check process postfix with pidfile /var/spool/postfix/pid/master.pid group mail start program = "/usr/bin/systemctl start postfix" stop program = "/usr/bin/systemctl stop postfix" if failed port 25 protocol smtp then restart if 5 restarts within 5 cycles then timeout
Указывайте только реально существующие процессы, если вы укажете PostFix для проверки, но он не установлен в системе — Monit не запустится
Конфигурация сложна на первый взгляд, но при настройке быстро понимаешь что к чему.
Если вы не знаете, что делает указанная опция, вы можете прочитать ее описание в официальной документации
В секции Apache вы видели следующую конфигурацию:
if failed host localhost port 80 protocol http and request "/monit_token" then restart
Она означает, что monit сперва попытается подключиться к 80 порту и в случае успеха запросить файл monit_token, если это не удается (любое из условий) — рестарт. Файл monit_token должен существовать (в нашем случае по пути /var/www/html/monit_token (т.к. сайт расположен в /var/www/html/)).
Создадим файл monit_token и запишем случайные данные в него
echo «example» >> /var/www/html/monit_token
Теперь создадим сертификат, нужный для HTTPS соединения. Расположен он будет в /var/certs/monit.pem (путь указывали выше):
mkdir /var/certs
cd /var/certs
Далее требуется создать конфигурацию OpenSSL:
nano /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 = Monitorka localityName = Locality Name (eg, city) localityName_default = Monitorium organizationName = Organization Name (eg, company) organizationName_default = Monitoring. organizationalUnitName = Organizational Unit Name (eg, section) organizationalUnitName_default = 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:
systemctl restart monit
Теперь мы можем проверить его работу, открыв в браузере https://www.example.com:2812/ (убедитесь, что порт 2812 не блокируется вашим firewall`ом), авторизуемся, введя логин/пароль admin/test соответственно.
Интерфейс Monit должен выглядеть приблизительно так:
Главное окно
В зависимости от вашей конфигурации (файл /etc/monit.d/monitrc), Monit будет производитель рестарт/иные действия с сервисами.
На этом все 🙂
Один комментарий
Пингсервис: Мониторинг сервера с Munin и Monit в CentOS7 Часть1