monit
простой мониторинг
Задача
▪ Следить за состоянием процессов
▪ Поднимать упавшие

▪ Опускать сбоящие

▪ Перезапускать зависшие
Задача
▪ Предпринимать любые действия по гибко
  заданным событиям

▪ Уведомлять администраторов и вести журналы
Решение
▪ Nagios?
▪ Zabbix?

▪ OpenView?

▪ Дорого и сложно
Решение
▪ djb daemontools?
▪ Apple launchd?

▪ Sun SMF?

▪ Ubuntu Upstart?

▪ Непортируемо и напутано
monit
▪ Это один (1) небольшой процесс
▪ Это один (1) конфиг-файл

▪ Полноценный мониторинг

▪ Настраиваемые уведомления по SMTP

▪ Автоматическое восстановление сервисов

▪ Удобный доступ из консоли

▪ Встроенный веб-интерфейс

▪ Журналирование в syslog или отдельный log-
  файл
Мониторинг
▪ процессы и сервисы
▪ файлы

▪ папки

▪ устройства

▪ удалённые сервисы

▪ состояние системы
Процессы
▪ Существование, по pid-файлу
▪ Изменения PID

▪ Изменения PPID

▪ Количество потомков

▪ Загрузка процессора (с потомками)

▪ Загрузка памяти (с потомками и без)
Процессы
if   2 restarts within 3 cycles then timeout
if   totalmem > 100 Mb then alert
if   children > 255 for 5 cycles then stop
if   cpu usage > 95% for 3 cycles then restart
Сервисы
▪ Удалённые и локальные
▪ Проверка по протоколам
   • http, ftp, imap, mysql, pgsql, smtp, ntp, pop, dns,
     ssh, …

▪ Поддержка SSL/TLS с проверкой подписи
   • https, ftps, imaps, pops, …

▪ UDP, TCP, ICMP, Unix domain sockets

▪ Произвольно заданный текстовый протокол
Сервисы
if failed url
  http://bill:1337@msft.com:81/?query
  and content == 'my.*regex' then alert
if failed icmp type echo count 5
  with timeout 15 seconds
  then alert
if failed port 80 proto http then alert
if failed port 443 type TCPSSL proto http
  then alert
if failed host cave.persia.ir port 4040
  send "Open, Sesame!rn"
  expect "Please enter the cavern"
then restart
Файлы и папки
▪ Контрольная сумма md5 или sha1
▪ Время изменения (mtime)

▪ Размер

▪ Содержимое (regex)

▪ Флаги

▪ Разрешения

▪ Пользователь, группа
Файлы и папки
if changed checksum then exec "echo 123"
if failed checksum and
 expect the sum 8f7f419955cefa0b33a2ba316cba3659
 then alert
if changed timestamp then exec 'apache.sh restart'
if size > 50 MB then exec 'logrotate'
if match 'Houston, we have a problem' then alert
check file su with path /bin/su
  if changed size then exec "ifconfig fxp0 down"
Файловые системы
 ▪ Свободное место
 ▪ Использование inode-ов
Файловые системы
check device rootfs with path /dev/hda1
 if space usage > 80% 5 times within 15 cycles
    then alert
    else if passed for 10 cycles then alert
 if space usage > 90% for 5 cycles then
    exec '/try/to/free/the/space'
 if space usage > 99% then exec 'kill -9 1'
Удалённые файлы
     ▪ Доступ по HTTP
     ▪ Проверка контрольной суммы md5 или sha1
if failed port 80 protocol http
  and request "/page.html"
  with checksum 350d6c0157a04c84012475bd87609db4
  then alert
Система
▪ Средняя загрузка за 1, 5, 15 минут
▪ Загрузка процессора
   • user, system

▪ Загрузка памяти
Система
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
Действия
▪ уведомление
▪ запуск, остановка, перезапуск

▪ исполнение любого скрипта или программы
   • под любыми пользователем и группой

▪ включение, выключение мониторинга
Действия
then   alert
then   stop
then   restart
then   exec 'true' as uid 1 gid 1
then   unmonitor
Уведомления
▪ полностью настраиваемый формат
▪ легко автоматически обрабатывать

▪ буфер любого размера на случай временного
  отказа почты
CLI-интерфейс
monit summary
  The monit daemon 4.10.1 uptime: 10h 53m
  Process 'vpnc'                      running
  System 'pollux.cenkes.org'          running
monit status
monit reload
monit validate
monit restart apache
monit restart all
Веб-интерфейс
▪ Полный аналог текстового
▪ Совместим с текстовыми браузерами
Недостатки
▪ Однотредовый, синхронный
▪ Нет произвольных проверок (скриптами)

▪ Плохо расширяем
   • Кто портирует на Perl?

▪ Не рассчитан near-realtime проверки
Преимущества
▪ Предельная простота
▪ Быстрый и маленький процесс

▪ Чаще удобней запустить monit, чем написать
  костыль
mmonit.com/monit/

monit — простой мониторинг

  • 1.
  • 2.
    Задача ▪ Следить засостоянием процессов ▪ Поднимать упавшие ▪ Опускать сбоящие ▪ Перезапускать зависшие
  • 3.
    Задача ▪ Предпринимать любыедействия по гибко заданным событиям ▪ Уведомлять администраторов и вести журналы
  • 4.
    Решение ▪ Nagios? ▪ Zabbix? ▪OpenView? ▪ Дорого и сложно
  • 5.
    Решение ▪ djb daemontools? ▪Apple launchd? ▪ Sun SMF? ▪ Ubuntu Upstart? ▪ Непортируемо и напутано
  • 6.
    monit ▪ Это один(1) небольшой процесс ▪ Это один (1) конфиг-файл ▪ Полноценный мониторинг ▪ Настраиваемые уведомления по SMTP ▪ Автоматическое восстановление сервисов ▪ Удобный доступ из консоли ▪ Встроенный веб-интерфейс ▪ Журналирование в syslog или отдельный log- файл
  • 7.
    Мониторинг ▪ процессы исервисы ▪ файлы ▪ папки ▪ устройства ▪ удалённые сервисы ▪ состояние системы
  • 8.
    Процессы ▪ Существование, поpid-файлу ▪ Изменения PID ▪ Изменения PPID ▪ Количество потомков ▪ Загрузка процессора (с потомками) ▪ Загрузка памяти (с потомками и без)
  • 9.
    Процессы if 2 restarts within 3 cycles then timeout if totalmem > 100 Mb then alert if children > 255 for 5 cycles then stop if cpu usage > 95% for 3 cycles then restart
  • 10.
    Сервисы ▪ Удалённые илокальные ▪ Проверка по протоколам • http, ftp, imap, mysql, pgsql, smtp, ntp, pop, dns, ssh, … ▪ Поддержка SSL/TLS с проверкой подписи • https, ftps, imaps, pops, … ▪ UDP, TCP, ICMP, Unix domain sockets ▪ Произвольно заданный текстовый протокол
  • 11.
    Сервисы if failed url http://bill:1337@msft.com:81/?query and content == 'my.*regex' then alert if failed icmp type echo count 5 with timeout 15 seconds then alert if failed port 80 proto http then alert if failed port 443 type TCPSSL proto http then alert if failed host cave.persia.ir port 4040 send "Open, Sesame!rn" expect "Please enter the cavern" then restart
  • 12.
    Файлы и папки ▪Контрольная сумма md5 или sha1 ▪ Время изменения (mtime) ▪ Размер ▪ Содержимое (regex) ▪ Флаги ▪ Разрешения ▪ Пользователь, группа
  • 13.
    Файлы и папки ifchanged checksum then exec "echo 123" if failed checksum and expect the sum 8f7f419955cefa0b33a2ba316cba3659 then alert if changed timestamp then exec 'apache.sh restart' if size > 50 MB then exec 'logrotate' if match 'Houston, we have a problem' then alert check file su with path /bin/su if changed size then exec "ifconfig fxp0 down"
  • 14.
    Файловые системы ▪Свободное место ▪ Использование inode-ов
  • 15.
    Файловые системы check devicerootfs with path /dev/hda1 if space usage > 80% 5 times within 15 cycles then alert else if passed for 10 cycles then alert if space usage > 90% for 5 cycles then exec '/try/to/free/the/space' if space usage > 99% then exec 'kill -9 1'
  • 16.
    Удалённые файлы ▪ Доступ по HTTP ▪ Проверка контрольной суммы md5 или sha1 if failed port 80 protocol http and request "/page.html" with checksum 350d6c0157a04c84012475bd87609db4 then alert
  • 17.
    Система ▪ Средняя загрузказа 1, 5, 15 минут ▪ Загрузка процессора • user, system ▪ Загрузка памяти
  • 18.
    Система 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
  • 19.
    Действия ▪ уведомление ▪ запуск,остановка, перезапуск ▪ исполнение любого скрипта или программы • под любыми пользователем и группой ▪ включение, выключение мониторинга
  • 20.
    Действия then alert then stop then restart then exec 'true' as uid 1 gid 1 then unmonitor
  • 21.
    Уведомления ▪ полностью настраиваемыйформат ▪ легко автоматически обрабатывать ▪ буфер любого размера на случай временного отказа почты
  • 22.
    CLI-интерфейс monit summary The monit daemon 4.10.1 uptime: 10h 53m Process 'vpnc' running System 'pollux.cenkes.org' running monit status monit reload monit validate monit restart apache monit restart all
  • 23.
    Веб-интерфейс ▪ Полный аналогтекстового ▪ Совместим с текстовыми браузерами
  • 24.
    Недостатки ▪ Однотредовый, синхронный ▪Нет произвольных проверок (скриптами) ▪ Плохо расширяем • Кто портирует на Perl? ▪ Не рассчитан near-realtime проверки
  • 25.
    Преимущества ▪ Предельная простота ▪Быстрый и маленький процесс ▪ Чаще удобней запустить monit, чем написать костыль
  • 26.