Рейтинг@Mail.ru
[Войти] [Зарегистрироваться]

Наши друзья и партнеры

UnixForum
Беспроводные выключатели nooLite купить дешевый 
компьютер родом из Dhgate.com

Lines Club

Ищем достойных соперников.

Библиотека сайта или "Мой Linux Documentation Project"

Настройка системы мониторинга состояния сервера на основе демона Monit

Оригинал: How to set up server monitoring system with Monit
Автор: Iulian Murgulet
Дата публикации: 25 марта 2015 г.
Перевод: А.Панин
Дата перевода: 15 августа 2016 г.

Многие системные администраторы, имеющие дело с Linux-серверами, полагаются на централизованные удаленные системы мониторинга (такие, как Nagios или Cacti) для наблюдения за подконтрольной сетевой инфраструктурой. Хотя централизованный мониторинг и значительно упрощает жизнь системного администратора при работе с множеством узлов и устройств, удаленный сервер системы мониторинга становится единой точкой отказа; если этот сервер выйдет из строя или прекратит отвечать на запросы по какой-либо причине (например, из-за некачественного аппаратного обеспечения или неработоспособности сети), вы не сможете контролировать всю сетевую инфраструктуру.

Один из способов избыточного резервирования описанной системы мониторинга заключается в установке и использовании отдельного (резервного) программного компонента для мониторинга состояния наиболее важных или основных серверов вашей сети. В этом случае даже тогда, когда централизованная система мониторинга окажется в неработоспособном состоянии, вы все также сможете отслеживать состояние основных серверов с помощью резервной системы мониторинга.

Что такое Monit?

Monit является кроссплатформенным инструментом с открытым исходным кодом, предназначенным для мониторинга состояния систем Unix/Linux (то есть, Linux, BSD, OSX, Solaris). Monit крайне просто установить, он является достаточно легковесным (занимает всего 500 КБ дискового пространства) и не требует каких-либо сторонних программ, плагинов или библиотек. К тому же, Monit осуществляет полноценный мониторинг состояния системы, включающий мониторинг состояния процессов, изменений файловой системы, а также осуществляет отправку уведомлений по электронной почте, выполняет заданные действия при наступлении тех или иных событий и так далее. Комбинация из простоты установки, легковесной реализации и широкого спектра возможностей делает 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 для мониторинга состояния локального сервера и его основных сервисов. Вы же можете найти огромное количество полезных примеров файлов конфигурации на официальной странице wiki проекта. Все эти примеры готовы к использованию, поэтому вы можете, не опасаясь за последствия, использовать функции копирования/вставки.

Секция параметров сервиса файла конфигурации: мониторинг параметров использования оперативной памяти и центрального процессора

Давайте начнем с организации мониторинга параметров использования оперативной памяти и центрального процессора. Скопируйте следующий блок директив и вставьте его в файл конфигурации:

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 признается некорректно функционирующим и никаких попыток проверки его состояния более не предпринимается.

Мониторинг состояния сервиса SSH

Секция параметров сервиса файла конфигурации: мониторинг состояния сервиса 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?


Эта статья еще не оценивалась
Вы сможете оценить статью и оставить комментарий, если войдете или зарегистрируетесь.
Только зарегистрированные пользователи могут оценивать и комментировать статьи.

Комментарии отсутствуют