Установка monit в Debian/Ubuntu
Monit — программа для проверки состояния сервисов на и поддержки их на плаву, которая умеет слать уведомления в случае каких либо отклонений, софтина работает под linux, bsd и других unix-системах. Используется как средство мониторинга и перезапуска каких либо сервисов. Гибкие настройки и функционал делают программу очень даже привлекательной! Рекомендую к употреблению и добро пожаловать под кат.
Monit умеет проверять:
- Существование процесса по PID.
- Работу определенного порта (TCP/UDP).
- Ответ определенного протокола по порту (SMTP, SSH, HTTP,MYSQL…).
- Ресурсы, занимаемые процессом (CPU/RAM).
- Объем и свободное пространство в файловой системе.
- Права доступа к файлу или каталогу.
В случае отклонений monit может:
- Остановить, стартовать или перезапустить сервис.
- Подождать определенное время.
- Послать уведомление.
- Примонтировать, отмонтировать файловую систему
- Запустить отдельный скрипт и передать ему определенные параметры.
Как видите функционал довольно таки серьезный, софтина есть практически во всех распространенных дистрибутивах Debian, CentOS, FreeBSD. Устанавливать в Debian будем из портов:
aptitude install monit
Готово? идем конфигугрировать, но перед этим я немного схитрю, поставилась у нас не самая свежая версия а мы хотим свежую с полным функционалом, идем на официальный сайт и качаем под свою ОС.
Берем из архива исполняемый файл monit и кладем его к себе в /usr/bin/monit
с заменой =)
Теперь можно настроить конфиг, документация
nano /etc/monit/monitrc
Например можно настроить как то так:
###############################################################################
## Monit конфигурационный файл
###############################################################################
## Запустить monit как депон и проверять процесс с интервалом 1 минута
set daemon 60
# Использовать syslog регистрирующий со средством ‘демона’.
set logfile syslog facility log_daemon
## Список mailservers для доставки оповещения.По умолчанию это 25 порт.
set mailserver localhost # primary mailserver
set eventqueue
basedir /var/log/monit # путь к каталогу, где будут храниться оповещения
slots 100 # лимит
## Вы можете самостоятельно задать формат письма
set mail-format { from: [email protected] }
#set alert [email protected] # все оповещения
set mmonit http://monit:password@IP:PORT/collector
set httpd port 2800 and
use address IP-SERVER
allow admin:admin
Состояние сервера в целом
check system serv.host.com
group server
if loadavg (15min) > 10 then alert
if loadavg (5min) > 30 then alert
if memory usage > 90% then alert
Проверка apache2
check process apache2 with pidfile /var/run/apache2.pid
group www
start program = `/etc/init.d/apache2 start`
stop program = `/etc/init.d/apache2 stop`
if cpu > 50% for 3 cycles then alert # если загрузка cpu > 50% в течение 5 (проверок) послать предупреждение.
if cpu > 90% for 3 cycles then restart # если загрузка cpu > 90% в течение 3 циклов то послать перезапустить процесс.
if totalmem > 4000.0 MB for 3 cycles then restart # если юзается больше 600 MB мозгов то перезапустить процесс.
if children > 200 then restart # если число дочерних процессов > 50 то перезапустить процесс.
if failed host IP_ADDR port 80 protocol HTTP then restart # передернуть если не отвечает.
if 5 restarts within 5 cycles then timeout # если 5 раз уже перезапускали процесс то сделать timeout.
Проверка nginx
check process nginx with pidfile /var/run/nginx.pid
group www
start program = `/etc/init.d/nginx start`
stop program = `/etc/init.d/nginx stop`
if cpu > 50% for 3 cycles then alert # если загрузка cpu > 50% в течение 3 (проверок) послать предупреждение.
if cpu > 90% for 5 cycles then restart # если загрузка cpu > 80% 6 циклов то послать перезапустить процесс.
if totalmem > 1200.0 MB for 3 cycles then restart # если юзается больше 200 MB мозгов то перезапустить процесс.
if children > 10 then restart # если число дочерних процессов > 5 то перезапустить процесс.
Проверка dovecot
check process dovecot with pidfile /var/run/dovecot/master.pid
start program = `/etc/init.d/dovecot start`
stop program = `/etc/init.d/dovecot stop`
if cpu > 50% for 3 cycles then alert
if cpu > 90% for 5 cycles then restart
if totalmem > 400.0 MB for 5 cycles then restart
if children > 40 then restart
if failed port 110 type TCP protocol POP then restart
if 5 restarts within 5 cycles then timeout
Проверка exim
check process exim with pidfile /var/run/exim4/exim.pid
start program = `/etc/init.d/exim4 start`
stop program = `/etc/init.d/exim4 stop`
if cpu > 50% for 3 cycles then alert
if cpu > 90% for 5 cycles then restart
if children > 30 then restart
#if failed port 25 protocol smtp then restart
if 5 restarts within 5 cycles then timeout
Проверка mysql
check process mysql with pidfile /var/run/mysqld/mysqld.pid
group www
start program = `/etc/init.d/mysql start`
stop program = `/etc/init.d/mysql stop`
if failed unixsocket /var/run/mysqld/mysqld.sock then restart
#if failed host 127.0.0.1 port 3306 protocol mysql then restart
if 5 restarts within 5 cycles then timeout
Проверка SSH
check process sshd with pidfile /var/run/sshd.pid
start program `/etc/init.d/ssh start`
stop program `/etc/init.d/ssh stop`
if failed host IP_ADDR port 22 protocol ssh then restart
if 5 restarts within 5 cycles then timeout
Проверяем устройство по точке монтирования.
check device rootfs with path /
if failed permission 755 then alert
if space usage > 90% for 5 times within 10 cycles then alert
if inode usage > 90% for 5 times within 10 cycles then alert
group server
А вот так можно проверять свои сервера по вебу:
#host1
check host имя_сервера with address имя_сервера.ру
group host
if failed port 80 protocol http and request `/status.php` for 2 cycles then alert
#host2
check host имя_сервера2 with address имя_сервера2.ру
group host
if failed port 80 protocol http and request `/status.php` for 2 cycles then alert
Аналогично но + поиск строки в ответе
check host host with address host3.com
group host
CONTENT != `The page you are looking for is temporarily unavailable`
timeout 60 seconds 3 cycles
then alert