Мониторинг. · 4 min read · Oct 17, 2025

Мониторинг сервера с помощью Munin и Monit на CentOS 7.2 - Страница 2

5 Установка и настройка Monit

Далее мы установим Monit:

yum -y install monit

Затем создадим системные ссылки для автозагрузки Monit:

systemctl enable monit  
systemctl start monit

Файл конфигурации Monit по умолчанию находится по адресу /etc/monitrc, где вы можете найти некоторые примеры конфигурации (вы можете найти больше примеров конфигурации на http://mmonit.com/wiki/Monit/ConfigurationExamples), которые все закомментированы, но он указывает Monit также искать в каталоге /etc/monit.d файлы конфигурации.

В этом случае я буду мониторить:

  • proftpd
  • sshd
  • MariaDB
  • apache
  • postfix

Кроме того, я настрою следующие параметры для Monit:

  • Включить веб-интерфейс Monit на порту 2812.
  • Использовать HTTPS для веб-интерфейса вместо HTTP.
  • Настроить защищенный паролем вход для веб-интерфейса.
  • Monit будет отправлять уведомления по электронной почте на root@localhost.

Сначала я настрою параметры аутентификации. Откройте файл /etc/monitrc

nano /etc/monitrc

И прокрутите вниз, пока не найдете этот раздел:

set httpd port 2812 and  
   use address localhost # только принимать соединения с localhost  
   allow localhost # разрешить localhost подключаться к серверу и  
   allow admin:monit # требовать пользователя 'admin' с паролем 'monit'  
   allow @monit # разрешить пользователям группы 'monit' подключаться (rw)  
   allow @users readonly # разрешить пользователям группы 'users' подключаться только для чтения

Замените его на следующие настройки:

set httpd port 2812 and  
   use address 0.0.0.0  
   SSL ENABLE  
   PEMFILE /var/certs/monit.pem  
   allow admin:test

Слово “test” является паролем, пожалуйста, замените его на надежный пароль, и вы также можете изменить имя пользователя “admin” на имя, которое нельзя легко угадать.

Теперь мы добавим конфигурацию для контролируемых служб. Вместо изменения /etc/monitrc мы создадим новый файл конфигурации /etc/monit.d/monitrc.

Мой файл выглядит так:

nano /etc/monit.d/monitrc
set logfile syslog facility log_daemon
  
# Отправлять электронные письма через этот почтовый сервер  
set mailserver localhost
  
# Установить адрес отправителя для уведомлений по электронной почте  
set mail-format { from: [email protected] }
  
# Отправлять уведомления на этот адрес  
set alert root@localhost
  
# Мониторинг службы Proftpd
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
  
# Мониторинг MariaDB
check process mysql with pidfile /var/run/mariadb/mariadb.pid
   group database
   start program = "/usr/bin/systemctl start mariadb"
   stop program = "/usr/bin/systemctl stop mariadb"
   if failed host 127.0.0.1 port 3306 then restart
   if 5 restarts within 5 cycles then timeout
  
# Мониторинг веб-сервера apache
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

(Пожалуйста, убедитесь, что вы проверяете только те процессы, которые действительно существуют на вашем сервере - в противном случае monit не запустится. То есть, если вы скажете monit проверять Postfix, но Postfix не установлен на системе, monit не запустится.)

Файл конфигурации довольно самодостаточен; если вы не уверены в каком-либо параметре, посмотрите в документации Monit: http://mmonit.com/monit/documentation/monit.html

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

   if failed host localhost port 80 protocol http
      and request "/monit_token" then restart

что означает, что Monit пытается подключиться к localhost на порту 80 и пытается получить доступ к файлу /monit_token, который находится по адресу /var/www/html/monit_token, потому что корень документа нашего веб-сайта - /var/www/html. Если Monit не удается, это означает, что Apache не работает, и Monit собирается перезапустить его. Теперь мы должны создать файл /var/www/html/monit_token и записать в него какую-то случайную строку:

touch /var/www/html/monit_token

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

mkdir /var/certs  
cd /var/certs

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

nano /var/certs/monit.cnf
# создать RSA сертификаты - Сервер

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

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

systemctl restart monit

Теперь укажите в браузере https://www.example.com:2812/ (убедитесь, что порт 2812 не заблокирован вашим брандмауэром), войдите с помощью admin и test, и вы должны увидеть веб-интерфейс Monit. Он должен выглядеть так:

Панель управления Monit.

(Главный экран)

Страница состояния apache Monit.

(Страница состояния Apache)

В зависимости от вашей конфигурации в /etc/monit.d/monitrc Monit будет перезапускать ваши службы, если они выйдут из строя, и отправлять уведомления по электронной почте, если идентификаторы процессов служб изменятся и т.д.

6 Ссылки

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.