Библиотека сайта rus-linux.net
Настройка системы мониторинга состояния сервера на основе демона Monit
Оригинал: How to set up server monitoring system with Monit
Автор: Iulian Murgulet
Дата публикации: 25 марта 2015 г.
Перевод: А.Панин
Дата перевода: 15 августа 2016 г.
Многие системные администраторы, имеющие дело с Linux-серверами, полагаются на централизованные удаленные системы мониторинга (такие, как Nagios или Cacti) для наблюдения за подконтрольной сетевой инфраструктурой. Хотя централизованный мониторинг и значительно упрощает жизнь системного администратора при работе с множеством узлов и устройств, удаленный сервер системы мониторинга становится единой точкой отказа; если этот сервер выйдет из строя или прекратит отвечать на запросы по какой-либо причине (например, из-за некачественного аппаратного обеспечения или неработоспособности сети), вы не сможете контролировать всю сетевую инфраструктуру.
Один из способов избыточного резервирования описанной системы мониторинга заключается в установке и использовании отдельного (резервного) программного компонента для мониторинга состояния наиболее важных или основных серверов вашей сети. В этом случае даже тогда, когда централизованная система мониторинга окажется в неработоспособном состоянии, вы все также сможете отслеживать состояние основных серверов с помощью резервной системы мониторинга.
Что такое Monit?
Я использую Monit уже несколько лет на множестве узлов и очень доволен стабильностью его работы. Даже в качестве полнофункциональной системы мониторинга состояния сервера, Monit может оказаться очень полезным инструментом для любого системного администратора, обслуживающего Linux-серверы. В данной статье я постараюсь описать методику установки Monit на локальный сервер (в качестве резервной системы мониторинга его состояния) с целью мониторинга состояния его основных служб. С помощью данного примера я продемонстрирую лишь малую часть возможностей Monit.
Установка Monit в Linux
В репозиториях большинства дистрибутивов Linux уже присутствует пакет с компонентами Monit.
Debian, Ubuntu или Linux Mint:
$ sudo aptitude install monit
Fedora или CentOS/RHEL:
В CentOS/RHEL вам в первую очередь придется подключить либо репозиторий EPEL, либо репозиторий Repoforge.
# yum install monit
В комплекте поставки Monit присутствует очень хорошо документированный файл конфигурации с множеством примеров. Основной файл конфигурации расположен по пути /etc/monit.conf
в дистрибутивах Fedora/CentOS/RHEL или /etc/monit/monitrc
в дистрибутивах Debian/Ubuntu/Mint. Файл конфигурации Monit содержит две секции параметров: секцию глобальных параметров "Global"
и секцию параметров сервисов "Services"
.
Секция глобальных параметров файла конфигурации: веб-страница с информацией о состоянии сервера
Monit может использовать несколько почтовых серверов для отправки уведомлений о наступлении событий и/или веб-страницу с информацией о состоянии веб-сервера, доступную по протоколам HTTP/HTTPS. Давайте начнем с формулирования требований к этой веб-странице.
-
Monit должен принимать соединения на порту
1966
. - Доступ к веб-странице должен быть организован с применением защищенного протокола SSL.
-
Для доступа к веб-странице должны использоваться слова
"monituser"
и"romania"
в качестве имени пользователя и пароля соответственно. -
Доступ к веб-странице должен быть разрешен лишь с локального узла, с узла
myhost.mydomain.ro
, а также из внутренней сети (192.168.0.0/16
). - Monit должен хранить SSL-сертификат в формате pem.
При выполнении всех последующих операций, связанных с настройкой Monit, я буду использовать систему, созданную специалистами компании Red Hat. Аналогичные операции могут выполняться и в системе, основанной на дистрибутиве Debian.
В первую очередь следует сгенерировать самостоятельно подписанный сертификат (monit.pem
) в директории /var/certs
.
# mkdir /var/certs # cd /etc/pki/tls/certs # ./make-dummy-cert monit.pem # cp monit.pem /var/certs # chmod 0400 /var/certs/monit.pem
Теперь нужно поместить следующий набор директив в основной файл конфигурации Monit. Вы можете как создать пустой файл конфигурации, так и скопировать шаблон этого файла и модифицировать его по мере необходимости.
set httpd port 1966 and SSL ENABLE PEMFILE /var/certs/monit.pem allow monituser:romania allow localhost allow 192.168.0.0/16 allow myhost.mydomain.ro
Секция глобальных параметров файла конфигурации: уведомления по электронной почте
Далее я предлагаю настроить механизм уведомлений Monit. Нам понадобится как минимум один активный SMTP-сервер, который может передавать сообщения, принятые с узла, на котором осуществлена установка Monit. Для наших целей подойдет почтовый сервер со следующими параметрами (вы можете адаптировать данный пример к своим условиям):
-
Имя узла, на котором установлен почтовый сервер:
smtp.monit.ro
-
Адрес электронной почты отправителя, используемый Monit (поле "From"):
monit@monit.ro
-
Адрес получателя сообщений электронной почты от демона Monit (поле "To"):
guletz@monit.ro
-
Порт почтового сервера, использующего протокол SMTP:
587
(по умолчанию25
)
На основе приведенной выше информации, несложно сформировать следующую конфигурацию механизма отправки уведомлений по электронной почте:
set mailserver smtp.monit.ro port 587 set mail-format { from: monit@monit.ro subject: На уровне сервиса $SERVICE произошло событие $EVENT в $DATE на узле $HOST message: Monit выполнил действие $ACTION для сервиса $SERVICE ввиду наступления события $EVENT в $DATE на узле $HOST : $DESCRIPTION. Искренне ваш, Monit } set alert guletz@monit.ro
Как вы могли заметить, Monit позволяет использовать некоторые встроенные переменные ($DATE
, $EVENT
, $HOST
и другие), поэтому вы можете использовать любой формат уведомлений, соответствующий вашим потребностям. Если вы желаете отправлять сообщения электронной почты непосредственно с узла, на котором была осуществлена установка Monit, вам придется установить на нем sendmail
-совместимую программу (такую, как postfix
или ssmtp
).
Секция глобальных параметров файла конфигурации: демон Monit
На следующем этапе необходимо настроить демон monit. Мы будем настраивать его в соответствии со следующими требованиями:
-
Необходимо осуществить первую проверку состояния сервисов по прошествии
120
секунд. -
Следует проверять состояние сервисов через каждые
3
минуты. -
Нужно использовать сервис
syslog
для ведения журнала событий.
Для выполнения приведенных выше требований достаточно разместить следующий блок директив в файле конфигурации:
set daemon 120 with start delay 240 set logfile syslog facility log_daemon
Также мы должны указать путь к файлу для хранения уникального идентификатора демона monit ("idfile"
) и путь к директории для хранения сообщений электронной почты, отправленных monit, но не доставленных адресату из-за ошибок сервера SMTP или сети ("eventqueue"
). Перед использованием данных директив вы должны убедиться в том, что родительская директория (/var/monit
) уже существует. В результате в файл конфигурации следует добавить еще и следующий блок директив:
set idfile /var/monit/id set eventqueue basedir /var/monit
Тестирование глобальных параметров файла конфигурации
На этом процесс заполнения секции глобальных параметров файла конфигурации можно считать оконченным. На данный момент файл конфигурации Monit должен выглядеть следующим образом:
# Секция глобальных параметров # Страница с информацией о состоянии сервера и данные для доступа к ней set httpd port 1966 and SSL ENABLE PEMFILE /var/certs/monit.pem allow monituser:romania allow localhost allow 192.168.0.0/16 allow myhost.mydomain.ro # Сервер электронной почты для отправки уведомлений о событиях set mailserver smtp.monit.ro port 587 # Формат сообщения электронной почты (уведомления) set mail-format { from: monit@monit.ro subject: На уровне сервиса $SERVICE произошло событие $EVENT в $DATE на узле $HOST message: Monit выполнил действие $ACTION для сервиса $SERVICE ввиду наступления события $EVENT в $DATE на узле $HOST : $DESCRIPTION. Искренне ваш, Monit } set alert guletz@monit.ro # Задержки перед проверками состояния сервисов set daemon 120 with start delay 240 set logfile syslog facility log_daemon # Пути к файлу с идентификатором демона monit и директории для хранения недоставленных уведомлений set idfile /var/monit/id set eventqueue basedir /var/monit
Пришло время проверить корректность заполнения файла конфигурации. Вы можете проверить корректность существующего файла конфигурации (/etc/monit.conf
), выполнив следующую команду:
# monit -t Control file syntax OK
Если Monit сообщит о какой-либо ошибке, вам придется еще раз тщательно проверить синтаксис файла конфигурации. К счастью, сообщения об ошибках и предупреждения являются очень информативными. Например:
monit: Cannot stat the SSL server PEM file '/var/certs/monit.pem' -- No such file or directory /etc/monit/monitrc:10: Warning: hostname did not resolve 'smtp.monit.ro'
После того, как вы проверите синтаксис файла конфигурации, следует запустить демон monit и подождать 2-3 минуты:
# service monit start
Если вы используете systemd, выполните следующую команду:
# systemctl start monit
Теперь откройте окно веб-браузера и перейдите по адресу https://<узел_с_monit>:1966
. Замените <узел_с_monit>
на имя узла, на котором была осуществлена установка Monit или его IP-адрес.
Учтите, что в том случае, если вы будете использовать самостоятельно подписанный SSL-сертификат, вы увидите страницу с предупреждением в окне веб-браузера сразу же после перехода по указанному выше адресу.
После ввода корректных имени пользователя и пароля вы должны увидеть следующую страницу.
Далее в данном руководстве я продемонстрирую методику настройки Monit для мониторинга состояния локального сервера и его основных сервисов. Вы же можете найти огромное количество полезных примеров файлов конфигурации на
Секция параметров сервиса файла конфигурации: мониторинг параметров использования оперативной памяти и центрального процессора
Давайте начнем с организации мониторинга параметров использования оперативной памяти и центрального процессора. Скопируйте следующий блок директив и вставьте его в файл конфигурации:
check system localhost if loadavg (1min) > 10 then alert if loadavg (5min) > 6 then alert if memory usage > 75% then alert if cpu usage (user) > 70% then alert if cpu usage (system) > 60% then alert if cpu usage (wait) > 75% then alert
Думаю, вы сможете без труда интерпретировать приведенные выше директивы. По сути, в каждой из директив осуществляется проверка значения рабочего параметра локального узла в рамках каждого из циклов мониторинга (который наступает по прошествии 120 секунд в соответствии с значением, приведенным в секции глобальных параметров конфигурации). В том случае, если любое из условий будет выполнено, демон monit отправит уведомление в форме сообщения электронной почты.
В том случае, если значения каких-либо из рабочих параметров не должны отслеживаться в рамках каждого цикла мониторинга, вы можете использовать следующий формат директивы. Например, в данном случае будет осуществляться проверка значения средней нагрузки на центральный процессор в рамках каждого второго цикла мониторинга (то есть, через каждые 240 секунд):
if loadavg (1min) > 10 for 2 cycles then alert
Секция параметров сервиса файла конфигурации: мониторинг состояния сервиса SSH
Давайте убедимся в том, что в нашей системе присутствует бинарный файл sshd
, расположенный по пути /usr/sbin/sshd
:
check file sshd_bin with path /usr/sbin/sshd
Нам также нужно убедиться в том, что существует сценарий инициализации для sshd
:
check file sshd_init with path /etc/init.d/sshd
Наконец, нам следует убедиться в том, что демон sshd
запущен, исполняется и принимает соединения на порту 22
:
check process sshd with pidfile /var/run/sshd.pid start program "/etc/init.d/sshd start" stop program "/etc/init.d/sshd stop" if failed port 22 protocol ssh then restart if 5 restarts within 5 cycles then timeout
В частности, мы можем интерпретировать приведенный выше блок директив следующим образом. В первую очередь осуществляется проверка наличия в системе процесса с именем sshd и pid-файла демона (/var/run/sshd.pid
). Если в системе не обнаруживается хотя бы одной из двух упомянутых сущностей, осуществляется перезапуск демона sshd
с помощью его сценария инициализации. После этого осуществляется проверка поддержки процессом, принимающим соединения на порту 22
, протокола SSH. В том случае, если процесс не обслуживает клиентов по протоколу SSH, осуществляется перезапуск демона sshd
. Если в рамках 5 последних циклов мониторинга (то есть, в течение последних 5x120 секунд) было осуществлено как минимум 5 операций перезапуска, демон sshd
признается некорректно функционирующим и никаких попыток проверки его состояния более не предпринимается.
Секция параметров сервиса файла конфигурации: мониторинг состояния сервиса SMTP
Теперь давайте настроим механизм проверки состояния удаленного почтового сервера, использующего протокол SMTP (запущенного на узле с адресом 192.168.111.102
). Давайте предположим, что посредством сетевого интерфейса упомянутого узла можно получить доступ к серверам, использующим протоколы SMTP, IMAP и SSH.
check host MAIL with address 192.168.111.102 if failed icmp type echo within 10 cycles then alert if failed port 25 protocol smtp then alert else if recovered then exec "/scripts/mail-script" if failed port 22 protocol ssh then alert if failed port 143 protocol imap then alert
Здесь в первую очередь проверяется, отвечает ли узел на запросы по протоколу ICMP. Если не удается получить ответ по протоколу ICMP в рамках 10
циклов мониторинга, отправляется соответствующее уведомление. В том случае, если сервер, принимающий соединения на порту 25
, не обслуживает клиентов по протоколу SMTP, также отправляется уведомление. Если же следующая после неудачной проверка завершается успешно, исполняется указанный сценарий (/scripts/mail-script
). Кроме того, если серверы, принимающие соединения на портах 22
и 143
не обслуживают клиентов по протоколам SSH и IMAP соответственно, также отправляется уведомление.
Заключение
В данной статье я постарался продемонстрировать методику настройки демона Monit с целью организации мониторинга состояния локального сервера. В плане возможностей Monit была показана лишь вершина айсберга. Вам стоит выделить немного времени и самостоятельно прочитать страницу руководства Monit (которая содержит очень полезную информацию). Monit может стать отличным помощником любого администратора Linux-систем благодаря простому и понятному синтаксису файлов конфигурации. Если вы добавите Monit к уже существующей централизованной системе мониторинга, использующей удаленный сервер, вы, без сомнения, повысите ее надежность. А что вы думаете о Monit?