Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> статьи —> FreeBSD —> Мелочи —> monit

monit - программа мониторинга работы системы

Автор: Abigor.


Прочитал статью lissyara  о настройке monitord для мониторинга сервисов запущенных в системе, все хорошо, но обидело, что это утилита не работает под фрей шестой ветки. А у меня как раз на всех серверах такая фря и стоит =) Так что пришлось топать в порты и искать замену и как это не странно. В том же разделе где лежит порт monitord я обнаружил monit. Эта утилита выполняет те же функции что и monitord только, на мой взгляд, функционал богаче и она работает на шестой ветке =)
Вот я ее описал. Теперь начнем ставить. Ставить будем из портов =)

[root@webdes ~]# cd /usr/ports/
[root@webdes ports]# make search key="Unix system management and monitoring"
Port:   monit-4.8.1
Path:   /usr/ports/sysutils/monit
Info:   Unix system management and monitoring
Maint:  martinp@tildeslash.com
B-deps: bison-1.75_2,1 gettext-0.14.5_2 gmake-3.81_1 libiconv-1.9.2_2 m4-1.4.4
R-deps:
WWW:    http://www.tildeslash.com/monit/
[root@webdes ports]#
[root@webdes ports]# cd /usr/ports/sysutils/monit
[root@webdes monit]# make install clean

Все, программа установлена, теперь займемся ее конфигурированием.
[root@webdes etc]# ls monitrc.sample
-rw-------  1 root  wheel  8781 17 окт 16:20 monitrc.sample
[root@webdes etc]# cp monitrc.sample monitrc
[root@webdes etc]# ls monitrc*
-rw-------  1 root  wheel  8768 17 окт 19:04 monitrc
-rw-------  1 root  wheel  8781 17 окт 16:20 monitrc.sample

Откроем /usr/local/etc/monitrc

###############################################################################
## Monit конфигурационный файл
###############################################################################
##
## Комментарии начинаются с  '#' и действительны до конца строки
##
###############################################################################
## Глобальная секция
###############################################################################
##
## Запустить monit как депон и проверять процесс с интервалом в 2 минуты
#
set daemon  120
#
#
## Использовать syslog регистрирующий со средством 'демона'. Если опция
# FACILITY будет опущенным, то monit будет использовать 'пользовательское'
# средство по умолчанию. Вы можете определить 
## путь к файлу для monit.

#
set logfile syslog facility log_daemon 
#
#
## Список mailservers для доставки оповещения. Возможно, указать порт mailserver. По 
## умолчанию это 25 порт
#
set mailserver localhost,         # primary mailserver
#     backup.bar.baz port 10025,  # backup mailserver on port 10025
#     localhost                   # fallback relay
#
#
## Есть возможность сохранить оповещение, если вдруг не один из
# mailservers будет не доступен.
## Так есть возможность установить лимит дискового пространства,
# для предотвращения его переполнения
#
set eventqueue
    basedir /var/log/monit     # путь к каталогу, где будут храниться оповещения
    slots 100                  # лимит 
#
#
## Формат письма по умолчанию
##
## --8<--
## From: monit@$HOST                         # отправитель
## Subject: monit alert --  $EVENT $SERVICE  # тема
##
## $EVENT Service $SERVICE                   #
##                                           #
##      Date:        $DATE                   #
##      Action:      $ACTION                 #
##      Host:        $HOST                   # body
##      Description: $DESCRIPTION            #
##                                           #
## Your faithful employee,                   #
## monit                                     #
## --8<--
##
## Вы можете самостоятельно задать формат письма, используя макроопределения.
## Например, для изменения отправителя:
#
set mail-format { from: system-alert@isea.ru }
#
#
## Вы можете задать получателя оповещения. Оповещения могут быть 
## ограничен используя список. (похоже что для каждого события можно
# задать определенный мыл)
#
set alert admin@isea.ru                       # все оповещения
# set alert manager@foo.bar only on { timeout }  # получатель оповещения
#                                                # при timeout 
#
#
## Monit имеет встроенный web сервер для управления и просмотра 
## работы демона
#
# set httpd port 2812 and
#     use address localhost  # задаем хост 
#     allow localhost        # разрешаем, откуда можно подсоединяться
#     allow admin:monit      # задаем логин 'admin' и пароль 'monit'
#
#
###############################################################################
## Обслуживание
###############################################################################
##
## Здесь задаются отдельные правила для управления ресурсами.
## Каждое правило определяет проверяемый ресурс и выполняемые действия
## 
#
#  check system myhost.mydomain.tld
#    if loadavg (1min) > 4 then alert
#    if loadavg (5min) > 2 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
#
#    
## Проверка контрольной суммы файла, разрешений, владельца файла и группу.
# Так же оповещение будет отослано security@foo.bar
## Обслуживание может быть группировано, используя опцию GROUP
#    
#  check file apache_bin with path /usr/local/apache/bin/httpd
#    if failed checksum and 
#       expect the sum 8f7f419955cefa0b33a2ba316cba3659 then unmonitor
#    if failed permission 755 then unmonitor
#    if failed uid root then unmonitor
#    if failed gid root then unmonitor
#    alert security@foo.bar on {
#           checksum, permission, uid, gid, unmonitor
#        } with the mail-format { subject: Alarm! }
#    group server
#
#    
## Пример проверки работы HTTP сервера под управлением apache 2.2
#    
  check process apache with pidfile /var/run/httpd.pid
    start program = "/usr/local/etc/rc.d/apache22.sh start"
    stop program  = "/usr/local/etc/rc.d/apache22.sh stop"
    if cpu > 60% for 2 cycles then alert	# если загрузка cpu > 60% послать 
                                             # предупреждение
    if cpu > 80% for 5 cycles then restart	# если загрузка cpu > 80% послать  
                                             # перезапустить процесс
    if totalmem > 200.0 MB for 5 cycles then restart  # если юзается
                                                      # больше 200 MB мозгов 
                                                      # перезапустить процесс
    if children > 250 then restart	# если число дочерних процессов > 250 
                                       # перезапустить процесс
#    if loadavg(5min) greater than 10 for 8 cycles then stop # не понял что делает
#    if failed host www.tildeslash.com port 80 protocol http # если тестовая 
                                                         # страница не доступна, 
                                                         # перезапустить процесс
#       and request "/monit/doc/next.php"
#       then restart
#    if failed port 443 type tcpssl protocol http	# если не доступен 443 порт, 
                                                   # перезапустить процесс
#       with timeout 15 seconds
#       then restart
    if 3 restarts within 5 cycles then timeout # если 3 раза уже перезапускали 
                                               # процесс сделать timeout 
#    depends on apache_bin
#    group server
#    

# это уже добавил я
#---
check process calmav with pidfile /var/run/clamav/clamd.pid
    start program = "/usr/local/etc/rc.d/clamav-clamd start"
    stop program  = "/usr/local/etc/rc.d/clamav-clamd stop"
#    if cpu > 60% for 2 cycles then alert
#    if cpu > 80% for 5 cycles then restart
    if totalmem > 100.0 MB for 5 cycles then restart
    if children > 100 then restart
    if failed unixsocket /var/run/clamav/clamd then restart
    if 5 restarts within 5 cycles then timeout
#---
check process dovecot with pidfile /var/run/dovecot/master.pid
    start program = "/usr/local/etc/rc.d/dovecot start"
    stop program  = "/usr/local/etc/rc.d/dovecot stop"
    if cpu > 60% for 2 cycles then alert
    if cpu > 80% for 5 cycles then restart
    if totalmem > 100.0 MB for 5 cycles then restart
    if children > 100 then restart
    if 5 restarts within 5 cycles then timeout
    if failed port 110 type TCP protocol POP then restart
#---
check process exim with pidfile /var/run/exim.pid
    start program = "/usr/local/etc/rc.d/exim.sh start"
    stop program  = "/usr/local/etc/rc.d/exim.sh stop"
#    if cpu > 60% for 2 cycles then alert
#    if cpu > 80% for 5 cycles then restart
#    if totalmem > 200.0 MB for 5 cycles then restart
#    if children > 250 then restart
    if failed port 25 protocol smtp then restart
    if 5 restarts within 5 cycles then timeout
#---
check process mysql with pidfile /var/mysql_data/webdes.isea.ru.pid
    group database
    start program = "/usr/local/etc/rc.d/mysql-server start"
    stop program = "/usr/local/etc/rc.d/mysql-server stop"
    if failed unixsocket /tmp/mysql.sock then restart
    if failed host 127.0.0.1 port 3306 protocol mysql then restart
    if 5 restarts within 5 cycles then timeout

## Проверка файловой системы на забитость (блин, а я свои
# скрипты писал пару дней назад)
## 
## 
## 
#
#  check device datafs with path /dev/sdb1
#    start program  = "/bin/mount /data"
#    stop program  = "/bin/umount /data"
#    if failed permission 660 then unmonitor
#    if failed uid root then unmonitor
#    if failed gid disk then unmonitor
#    if space usage > 80% for 5 times within 15 cycles then alert
#    if space usage > 99% then stop
#    if inode usage > 30000 then alert
#    if inode usage > 99% then stop
#    group server
#
#
## Проверить timestamp файла. Если файл не изменялся в
# течение 15 минут, что-то не так 
## Так же, если размер файла превысил допустимый порог,
# выполнить заданный скрипт
#
#  check file database with path /data/mydatabase.db
#    if failed permission 700 then alert
#    if failed uid data then alert
#    if failed gid data then alert
#    if timestamp > 15 minutes then alert
#    if size > 100 MB then exec "/my/cleanup/script"
#
#
## Проверка директории. Проверка владельца и группы.
#
#  check directory bin with path /bin
#    if failed permission 755 then unmonitor
#    if failed uid 0 then unmonitor
#    if failed gid 0 then unmonitor
#
#
## Проверка удаленного хоста на доступность. Проводимую по средствам
## пинга и телнета на определенный порт
## 
#
    check host dedic with address 10.1.1.99
    if failed icmp type echo count 3 with timeout 10 seconds then alert
#    if failed port 3306 protocol mysql with timeout 15 seconds then alert
#    if failed url
#       http://user:password@www.foo.bar:8080/?querystring
#       and content == 'action="j_security_check"'
#       then alert
#
#
#########################################################################
## Включения
#########################################################################
##
## Здесь возможно включить в основой конфиг отдельные файлы
## 
#
include /usr/local/etc/monit/*
#

Вот и весь конфиг. Я конечно большую часть я вынес в include /usr/local/etc/monit/*, мне так удобнее. Дальше запускаем:
[root@webdes etc]# echo 'monit_enable="YES"' >> /etc/rc.conf
[root@webdes etc]# /usr/local/etc/rc.d/monit rcvar
# monit
$monit_enable=YES
[root@webdes etc]# /usr/local/etc/rc.d/monit start
Starting monit.
Starting monit daemon
[root@webdes etc]# /usr/local/etc/rc.d/monit status
monit is running as pid 65631.
[root@webdes etc]#

Дальше проверим работу сервиса.
[root@webdes ~]# /usr/local/etc/rc.d/dovecot stop
Stopping dovecot.
Waiting for PIDS: 58954.
[root@webdes ~]# /usr/local/etc/rc.d/apache22.sh stop
Stopping apache22.
Waiting for PIDS: 60813.
[root@webdes ~]# 

[root@webdes etc]# tail -f /var/log/messages |grep monit
Oct 17 19:32:37 webdes monit[65852]: 'apache' process is not running
Oct 17 19:32:37 webdes monit[65852]: 'dovecot' process is not running
^C

Теперь на почту должно прийти 4 письма, два про то что два сервиса не запущены, и еще 2 про то что они удачно запустились.

P.S дополнительные настройки можно посмотреть здесь: дока с сайта monit



размещено: 2006-10-17,
последнее обновление: 2006-10-19,
автор: Abigor


maximka, 2006-10-18 в 13:23:27

Супер!!!
все легко и просто
10 мин и все пашет
автору так держать

dikens3, 2006-10-18 в 16:13:19

Пробовал, всё нормально работает на FreeBSD 5.5

dikens3, 2006-10-18 в 17:42:59

http://www.tildeslash.com/monit/doc/examples.php

Здесь находятся примеры по настройке сервисов.

Abigor, 2006-10-19 в 5:27:22

Замечательная ссылка, подчерпнулся для себя много нового, есть что добавить в статью.

Mike, 2007-03-28 в 9:18:55

Не устанавливайте сислог файл в ту же директорию куда ссылается basedir ;)

Junqed, 2007-10-01 в 9:08:40

в конфиге очепятко
check process calmav with pidfile /var/run/clamav/clamd.pid
             ^^^^
думаю надо clamav %)

sunTechnic, 2007-10-24 в 19:26:02

А кто займентся мониторингом монитора? %)

aramen, 2007-10-29 в 3:48:48

Неплохая штука, не могу только понять как ей мониторить процессы который pid файлов не оставляют.

Т.е. есть демон, без пид файла, проверять можно по сокету, что то вроде if failed host 192.168.1.10 port 123 type TCP  then restart

но в monitrc без pid файла не вписать - ошибка синтаксиса

Антон, 2007-11-25 в 5:15:09

Уважаемый арамен, читайте доку http://www.tildeslash.com/monit/doc/faq.php
3. Q: I have a program that does not create its own pid file. Since monit requires all programs to have a pid file, what do I do?

vvzvlad, 2008-01-20 в 9:25:10

есть программа /usr/ports/sysutils/pidof которая как раз выдает пид процесса :-) кдумаю как перенаправить в файл и этот файл подсунуть монитору разберетесь

artem, 2008-02-12 в 15:37:05

очепятка и конечно же не
 /usr/local/etc/rc.d/clamav-clamd
а /usr/local/etc/rc.d/clamav-clamd.sh и так далее по тексту

lissyara, 2008-02-12 в 18:06:49

Зависит от версии ОС.

alnf, 2008-04-28 в 13:05:40

А у меня регулярно запускается второй процесс monit, в результате чего ни один не работает

ХР, 2008-06-19 в 14:15:58

Товарищщи! а памяти он сколько ест когда работает?
сильно грузилос сервер, как только monit выключил нагрузка пропала... f

Smile, 2009-02-25 в 8:16:12

Откровенно говоря говно еще то...
поставил я на свою голову monit-4.10.1 (ФРЯ 6.2 I386)
после того как запускаешь monit
у меня перестает работать ldap,
пере запускаешь LDAP через эное время тоже самое,
отрубаешь монит, все чудо работает,
пробавал все, разные конфиги...
короче говоря да будет pkg_delete monit-4.10.1

Igor, 2009-09-24 в 7:38:32

Спасибо за статью, все работает.
Smile если у вас руки кривые, то не стоит об этом везде  сообщать.

Aemon, 2010-01-26 в 9:39:46

Новая ссылка на примеры кофигурирования сервисов.

[url=http://mmonit.com/wiki/Monit/ConfigurationExamples]

Aemon, 2010-01-26 в 9:40:41

сорри завтыкал поставить теги

Новая ссылка на примеры кофигурирования сервисов.

ссылко

gonzo111, 2010-02-24 в 10:29:01

Оказывается у этой мего-полезной тулзы есть своя вэб морда на своем hhtp севере. врубать его так
set httpd port 2812 and use the address 10.0.0.1
   allow 10.0.0.22
еще есть даже поддержка ssl
http://www.neurosoftware.ro/programming-blog/wp-content/plugins/wp-o-matic/cache/73008_03-02_monit.png
http://mmonit.com/monit/documentation/monit.html#monit_httpd
:))))

gonzo111, 2010-05-06 в 16:11:52

время от времени появляется много полезных плюшек в конфиге
читать в http://mmonit.com/monit/dist/CHANGES.txt
Из последних
set daemon 5 with start delay 60
----
if 3 restarts within 5 cycles then exec "/foo/bar"
if 8 restarts within 10 cycles then unmonitor
---
start program = "/etc/init.d/httpd start" with timeout 60 seconds
----
замена cpu на totalcpu при мониторинге apache

gonzo111, 2010-05-06 в 16:19:34

кстати из веб морды можно смотреть лог файл того что происходило клик на слове "running"

Marcon, 2010-06-23 в 10:56:21

>>>if loadavg(5min) greater than
Ух-ты, ух-ты... А вот это занятно, будемс переползать на monit с monitord.

Александр, 2010-12-22 в 15:20:25

а как вот сделать чтобы уведомление приходило на почту когда падает служба и поднимается? можно на примере ssh показать?

Aemon, 2010-12-22 в 15:28:02

Вообще для вопросов есть форум.
set mailserver smtp.yandex.ru username "ваш логин почты" password "ваш пароль почты", localhost
set alert ваша@почта only on { timeout }  

setevoy, 2012-08-17 в 9:19:24

Обновите ссылку на доки
http://mmonit.com/documentation/



 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.166 секунд
Из них PHP: 33%; SQL: 67%; Число SQL-запросов: 77 шт.
Исходный размер: 51246; Сжатая: 11335