Pull to refresh

MonIT + M\MonIT = простой и бесплатный мониторинг нескольких серверов

Reading time 4 min
Views 23K
Возникла задача мониторинга нескольких серверов, находящихся в разных ДЦ, имеющих разные ОС и ПО.

ТЗ получилось примерно такое:

  1. Мониторинг системы (cpu, mem, load average, bandwidth).
  2. Мониторинг состояния сервисов (запущен или нет).
  3. Мониторинг функционирования сервисом (отвечает на запросы корректно или нет).
  4. Контроль потребляемых сервисами ресурсов и общего их состояния.
  5. Централизованая «админка» для всей этой радости.
  6. Уведомление по email, самостоятельное исправление проблемы (например рестарт упавшей службы).




Поиск решения.


В процессе изучения возможных вариантов были найдены 5 вариантов:

  • Nagios
  • Whats UP
  • Zabbix
  • Monit
  • Написание собственных скриптов


Первый и третий варианты были отброшены как слишком сложные в настройке и имеющие заведомо не нужный (хотя и огромный) функционал. Второй отброшен из-за феерической (995$) цены и требования сервера с MS Windows. В итоге я решил остановиться на Monit.

Что такое Monit?



Monit — бесплатное приложение с открытым исходным кодом, обеспечивающее комплексный мониторинг UNIX-like систем, как то:

  • Состояние серверов (доступность, потребление ресурсов).
  • Мониторинг демонов (состояние, потребляемые ресурсы, количество child-process и многое другое).
  • Мониторинг сетевых сервисов (возможность подключения и корректность ответа).
  • Выполнение встроенных (запуск\остановка\перезапуск) или собственных (скрипты) действий при достижении определенных событий.
  • Уведомление на email или в централизованный web-интерфейс M\Monit.


Основным приемуществами программы являются низкое потребление ресурсов, простота конфигурации (настройка 15-20 минут) и открытый исходный код.

Поддерживаются ОС GNU\Linux (есть в большинстве пакетных систем), FreeBSD (есть в портах), OpenBSD, Solaris, MacOS X. Windows в качестве сервера НЕ поддерживается, но мониторить сетевые сервисы расположенные на удаленной windows-машине это не мешает.

Архитектуры — x86, x86_64, PowerPC (Mac only), Sparc (Sun only).

Установка и базовая настройка.



Пакет есть для большинства дистрибутивов (Gentoo, Debian, FreeBSD — в основном дереве, CentOS, Fedora, RedHat — в репозитории dag). Пакет так и называется — monit.

Основной конфигурационный файл — /etc/monit.conf (в Linux) или /usr/local/etc/monitrc (в FreeBSD). В FreeBSD этот файл нужно создать:

# mv /usr/local/etc/monitrc.sample /usr/local/etc/monitrc

После чего нам нужно раскомментировать в конфигурационном файле строку:

include /etc/monit.d/*

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

Я разбил свою конфигурацию на два файла (для удобства) — main.conf (общие настройки) и master.conf (настройки мониторинга сервисов).

main.conf


Для тех, кому лень читать комментарии на английском привожу его пример и перевод части комментариев.

set daemon 120 # Частота проверки сервисов.
set logfile syslog facility log_daemon # syslogd facility.
set mailserver localhost, # IP\hostname почтового сервера, через который пойдут уведомления.
set eventqueue # Разрешить очередь уведомлений.
basedir /var/log/monit # путь к каталогу, где будут храниться уведомления.
slots 100 # Максимальное количество уведомлений в очереди.

set mail-format { from: main-servers-alert@example.com } # От какого имени рассылать уведомления.
set alert admin@example.com #Ящик для _всех_ уведомлений (много).
set alert support@example.com { timeout } # Ящик для критических уведомлений (падение сервера\демонов).

check system *CHANGEME.HOSTNAME.EXAMPLE.COM* # Хостнейм сервера.
if loadavg (1min) > 6 then alert
if loadavg (5min) > 3 then alert
if memory usage > 75% then alert
if cpu usage (user) > 70% then alert
if cpu usage (system) > 30% then alert
if cpu usage (wait) > 20% then alert


Как видно, конфиг крайне прост и понятен.

master.conf


master.conf — в моем случае отвечает за мониторинг конкретных демонов.

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

check process exim with pidfile /var/run/exim.pid # Название и PID.
start program = "/etc/init.d/exim stop" # Команда запуска.
stop program = "/etc/init.d/exim start" # Команда остановки.
if cpu > 60% for 2 cycles then alert # Если в течение двух циклов потребление CPU > 60% - уведомить.
if cpu > 80% for 5 cycles then restart # А если за 5 циклов больше 80% - перезапустить.
if totalmem > 300.0 MB for 5 cycles then restart # Если потребление памяти > 300мб - рестарт.
if children > 50 then restart # Если больше 50 чайлдов - рестарт.
if failed port 25 protocol smtp then restart # Если не отвечает на 25 порту по SMTP - рестарт.
if 5 restarts within 5 cycles then timeout # Если пять раз рестартовали и не помогло - timeout.


M\Monit



M\Monit — средство централизованного мониторинга серверов под управлением monit.

Сама программа платная, но пользоваться ей можно и бесплатно — на сайте выложена Free-версия, хотя и с определенными ограничениями.

Установка и базовая настройка.


Качаем версию для своей ОС и архитектуры, распаковываем архив.

Устанавливаем:

# mv mmonit-2.0.3 /usr/local/mmonit
# cd /usr/local/mmonit
# cp /usr/local/mmonit/doc/startup/mmonit_init /etc/init.d/mmonit


Создаем базу данных MySQL (также поддерживаются PgSQL и SQLite), вносим содержимое:

# cat /usr/local/mmonit/db/mmonit-schema.mysql | mysql -u -p monit


Редактируем /usr/local/mmonit/conf/server.xml. Формат конфига - XML. Для нас там интересен только один блок:

<Realm url="mysql://user:password@hostname/database"
minConnections="5"
maxConnections="250"
reapConnections="300" />


Можно запускать:

# /etc/init.d/mmonit start


Если запустилось нормально - заходим на localhost:8080. Логин admin, пароль swordfish

Теперь осталось настроить клиенты.

Связывание monit с m\monit


Для связывания клиента и центра управления, нужно в main.conf каждого сервера вписать:

set mmonit monit:monit@:8080/collector
set httpd port 2812 and use address allow localhost
allow allow monit:monit


После чего перезапустить мониторинг.

Осталось только зайти в админку и зарегистрировать появившиеся там серверы. Мониторинг готов. Мы сможем контролировать нагрузку на все серверы, работающих демонов и системные события.
Tags:
Hubs:
+21
Comments 35
Comments Comments 35

Articles