Интересные статьи
Домены
Главная страница / WEB сервера / Apache / Мониторинг сервера с Munin и Monit в CentOS 7 Часть2

Мониторинг сервера с Munin и Monit в CentOS 7 Часть2

Продолжаем статью Мониторинг сервера с 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 должен выглядеть приблизительно так:

Главное окно

monit_overview

Страница статуса Apachemonit_apache_detail

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

На этом все 🙂

 

 

Обо мне cyber01

Прочитайте также

Как установить последний Python на Ubuntu 18.04

В этой статья я расскажу вам как установить Python 3 на Ubuntu 18.04, обновить до …

Как установить Python 3 из исходников на Ubuntu 18.04

В этой статья я расскажу вам как установить Python 3 из исходников в Ubuntu 18.04, …

Как удалить все записи о вложениях за определенный период

Как удалить все записи о вложениях за определенный период DELETE FROM wp_postmeta WHERE post_id IN …

Один комментарий

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *