Настройка оповещения Nagios по ICQ

Простое решение для нотификации работы серверов при помощи ICQ:

1) Ставим vicq клиент. Регистрируем для него UIN. Из примера конфигурационного файла создаем работающий конфиг. Обязательные параметры uin и password.

2) Настраиваем nagios для отсылки сообщений о проблемах:

а) Задаем для своего контакта параметр pager равный номеру вашего ICQ.

б) Задаем 2-е дополнительне комманды в commands.cfg

  1. # ICQ Notification
  2. define command{
  3. command_name notify-host-by-icq
  4. command_line /usr/bin/printf "%b" "msg $CONTACTPAGER$\n***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n.\n" | /usr/local/bin/vicq -c /usr/local/etc/vicq.conf -b -o -t 5
  5. }
  6.  
  7. define command {
  8. command_name notify-service-by-icq
  9. command_line /usr/bin/printf "msg $CONTACTPAGER$\n***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$\n.\n" | /usr/local/bin/vicq -c /usr/local/etc/vicq.conf -b -o -t 5
  10. }

в) В шаблоне описывающем generic-contact задаем следующие параметры:

  1. service_notification_commands notify-service-by-email,notify-service-by-icq
  2. host_notification_commands notify-host-by-email,notify-host-by-icq

После всех манипуляций - перезагружаем Nagios и "роняем" какой-нибудь сервис. Все должно работать.

Сообщения будут приходить такими:

  1. ***** Nagios *****
  2.  
  3. Notification Type: PROBLEM
  4.  
  5. Service: AMAVIS
  6. Host: localhost
  7. Address: 127.0.0.1
  8. State: CRITICAL
  9.  
  10. Date/Time: Sun Nov 2 01:22:37 MSK 2008
  11.  
  12. Additional Info:
  13.  
  14. Connection refused

Кстати, с vicq есть 1 баг при запуске его нагиосом. Так как клиент использует Term::Readline, то возникает ошибка при запуске:

Cannot open /dev/tty for read at ...

Решается проблема просто, надо подредактировать файл vicq. Перед 1063 строкой вставить следующий кусок кода:

  1. open (FH, "/dev/tty" )
  2. or eval 'sub Term::ReadLine::findConsole { ("&STDIN", "&STDERR") }';
  3. die $@ if $@;
  4. close (FH);

Все будет работать без проблем.