Monitоринг системных процессов
Monit — легковесное средство для мониторинга работы системных процессов. Умеет смотреть на состояние процессов и файлов и при достижении определенных условий паниковать.
Во время вчерашнего инженерного дня поставил именно его в качестве дворника, растаскивающего по квартирам пьяненьких жильцов. В Arch Linux он находится в community репозитории.
Основные настройки лежат в /etc/monitrc и выглядят примерно так:
# Проверка состояния раз в две минуты
set daemon 120
set logfile "/var/log/monit/monit.log"
# Уведомления идут через GMail
set mailserver smtp.gmail.com port 587
username "example@example.org" password "password"
using tlsv1 using hostname "example.org"
# Если не удается отправить уведомления
# последние их 100 штук хранятся и периодически пытаются отправиться
set eventqueue basedir /var/local/monit slots 100
# Получатель уведомлений
set alert admin@example.org
# Простой web-интерфейс для подглядывания состояния сервера
set httpd port 2831 and
use example.org
allow admin:password
# Конфигурационные файлы для демонов лежат отдельно
include /etc/monit.d/*
Остальные конфигурационные файлы:
Nginx
check process nginx with pidfile /var/run/nginx.pid
group http
start program = "/etc/rc.d/nginx start"
stop program = "/etc/rc.d/nginx stop"
if cpu > 60% for 2 cycles then alert
if cpu > 80% for 5 cycles then restart
if totalmem > 300.0 MB for 5 cycles then restart
if children > 250 then restart
if loadavg(5min) greater than 10 for 8 cycles then restart
PostgreSQL
check process postgres with pidfile "/var/lib/postgres/data/postmaster.pid"
group postgres
start program = "/etc/rc.d/postgresql start"
stop program = "/etc/rc.d/postgresql stop"
if failed host 127.0.0.1 port 5432 protocol pgsql then restart
if 5 restarts within 5 cycles then timeout
Memcached
check process memcached with pidfile "/var/run/memcached.pid"
start program = "/etc/rc.d/memcached start"
stop program = "/etc/rc.d/memcached stop"
if failed host 127.0.0.1 port 11211 then restart
sshd
check process sshd with pidfile "/var/run/sshd.pid"
start program = "/etc/rc.d/sshd start"
stop program = "/etc/rc.d/sshd stop"
if failed host 127.0.0.1 port 23 protocol ssh then restart
if 5 restarts within 5 cycles then timeout
Как видно, у monit достаточно читабельные файлы настроек, и на их примере можно легко сделать так, чтобы упавшая система либо поднималась, либо хотя бы писала письмо о своей тяжелой участи.
В частности, надо будет добавить контроль за django сайтами, которые тоже можно мониторить по pid файлу, создаваемому ими. Поддерживаемая команда exec позволит заново перезапускать инстансы python’а, обслуживающего сайт.
Теперь, при каждом alert’e будет приходить уведомление такого плана:
Does not exist Service nginx
Date: Sun, 23 May 2010 23:38:34 +0900
Action: restart
Host: example.org
Description: process is not running
Остается только поставить сервис мониторинга, который будет следить за monit.