Сентябрь 20

Настройка уведомлений nagios по средствам telegram/wat’s app/ и других.

В данной статье-заметке расскажу как  настроить уведомления nagios 4.x.x по средствам личных сообщений в месенджеры, на примере Telegram.

 

 

С чего же у меня зародилась данная идея?

Появилась необходимость мониторить несколько VPS серверов на наличие проблем. Для этих целей был выбран более или менее знакомый(в плане работы, а не настройки) nagios.  Так как на любую почту сыплется море спама, да и почту с телефона просматривать не всегда удобно,  уведомления по средствам email было решено отбросить, а для оперативной связи использовать мессенджер Telegram .
Плюсы отправки уведомлений в месенджер:
Всегда под рукой;
Можно настроить специальную мелодию на алерты;

Никакого спама;

Есть как веб-версия, так и приложения для любого устройства.

Подготовка:

Для настройки нам потребуется:

  1. Личная учетная запись телеграмм куда будут отправляться уведомления
  2. Дополнительный аккаунт (номер телефона), с которого будут приходить уведомления с сервера
  3. Сервер VPS/VDS
  4. Установленный nagios

Приступаем:

Первое что необходимо сделать, это установить нативный клиент Telegram CLI for Linux, находящийся в разделе неофициальных приложений на самом сайте telegram.

На centos 6.6 он ставится из репозиториев:

yum install telegram-cli

Для других ОС можно воспользоваться инструкцией с github.

После первого запуска команды, Вас попросят ввести номер телефона и проверочный код, к запуску рекомендую добавлять ключ  -D чтобы скрыть лишний вывод:

bash-4.1$ telegram-cli -D
phone number: xxxxxxxxxxx
code ('call' for phone call): xxxxxx

После ввода кода попадаем в сам клиент. Команды можно узнать набрав help, проверяем что работает:

> contact_list
Nagios M
Anton Ne

Заметка: Добавление контакта требует указания Имени и Фамилии, для дальнейшей работы с таким контактом используйте вместо пробела _
например:

> msg Anton_Ne test
[11:31] Anton Ne <<< test

 Теперь самое интересное, для отправки сообщения одной командой можно использовать ключ -e,  после выполнения команды клиент завершит свою работу.

В этом месте я столкнулся с главной проблемой нативного клиента, после авторизации требуется некоторое время для получения списка контактов и загрузки сообщений, в связи с чем поданное напрямую сообщение из консоли не могло корректно определить получателя:

# telegram-cli -D -e 'msg Anton_Ne test2'
change_user_group: can't find the user telegramd to switch to
> FAIL: 38: can not parse arg #1
> All done. Exit
halt

Немного покопавшись было найдено решение, путем добавления нескольких ключей:

#telegram-cli -WR  -D -e 'msg Anton_Ne test2'

В этом случае всё работает как часы.

С клиентом разобрались, теперь приступим к настройке nagios:
Нам необходимы два конфигурационных файла. Местоположение зависит от установки, ищем где находится nagios:

#whereis nagios
nagios: /etc/nagios /usr/lib64/nagios /usr/local/nagios

Файлы, в данном случае будут находится в каталоге

/usr/local/nagios/etc/objects/

commands.cfg
contacts.cfg

При установке из репов, могут быть в /etc/nagios

Открываем commands.cfg и добавляем  нотификацию для хостов и сервисов:

# 'notify-service-by-tg' command definition

define command{
command_name notify-service-by-tg
command_line /usr/bin/telegram-cli -WR -U root -D -e 'msg $_CONTACTTG$ $NOTIFICATIONTYPE$ Host : $HOSTNAME$ - Service : $SERVICEDESC$ is $SERVICESTATE$ @ $LONGDATETIME$'
}
# 'notify-host-by-tg' command definition
define command{
command_name notify-host-by-tg
command_line /usr/bin/telegram-cli -WR -U root -D -e 'msg $_CONTACTTG$ “$NOTIFICATIONTYPE$ Host : $HOSTNAME$ is $HOSTSTATE$ @ $LONGDATETIME$”'
}

Всё с этим файлом закончили.

Открываем  contacts.cfg  и добавляем в контакт (define contact) или группу (define contactgroup) следующие строки:

_tg имя_вашей_основной записи ( в примере Anton_Ne)
service_notification_commands notify-service-by-email notify-service-by-tg
host_notification_commands notify-host-by-email notify-host-by-tg

Перезапускаем nagios:

Service nagios restart

Внимание! Не забудьте что команда выполняется из под пользователя nagios а, поэтому у nagios должно хватать прав для запуска команды /usr/bin/telegram-cli, в том числе и регистрация должна быть пройдена под этим пользователем.
Проверяем, заходим в нагиос ищем проблемный сервис и отправляем тестовую рассылку:
2015-09-20 11-53-50 Скриншот экрана2015-09-20 11-55-24 Скриншот экрана

И радуемся полученному сообщению:

joxi_screenshot_1442739044346

PS Для других месенджеров, аля what’s app , достаточно изменить command_line в настройках нагиос  на команду отправки сообщения из консоли через нативное приложение, пример:

yowsup-cli -c $USER1$/yowsup/yowsup-cli.config -s $_CONTACTWHATSAPP$ “$NOTIFICATIONTYPE$ Host : $HOSTNAME$ is $HOSTSTATE$ @ $LONGDATETIME$”

Метки: , , , , ,

Опубликовано 20.09.2015 nedoadminko в категории "Администрирование

8 COMMENTS :

  1. By Кирилл on

    Добрый день. Через консоль сообщения одной командой отправляются нормально. Через nagios тишина.
    Грешу на contacts.cfg

    define contact{
    contact_name kirill ;
    use generic-contact ;
    alias Nagios Admin ;
    email ####@inbox.ru ;
    _tg kirill_ivanov ;
    service_notification_commands notify-service-by-tg ;
    host_notification_commands notify-host-by-tg ;
    }

    1. By nedoadminko (Сообщение автора) on

      Покажите, полные конфиги contact.cfg, command.cfg, а также проверьте что у нагиоса хвататет прав на запуск, для этого например можно выполнить:
      sudo -u nagios -s Если используется пользователь nagios, после чего запустить команду отправки из консоли и проверить не будет ли ошибок.
      PS
      Также, не забываем что после изменения конфигов nagios его требуется перезапустить.
      Также если нагиос установлен из коробки и не настроен, то директива contact_name kirill ; выдаст ошибку при перезагрузке, так как данный контакт не прописан и не имеет алиаса Nagios Admin. Укажите в данном поле nagiosadmin и проверьте.

  2. By Кирилл on

    Большое спасибо за ответ!
    Содержимое contacts.cfg
    define contact{
    contact_name nagiosadmin
    use generic-contact
    alias Nagios Admin
    service_notification_period 24×7
    host_notification_period 24×7
    service_notification_options w,u,c,r,f,s
    email nagios@localhost
    _tg kirill_ivanov
    service_notification_commands notify-service-by-tg
    host_notification_commands notify-host-by-tg
    }

    define contactgroup{
    contactgroup_name admins
    alias Nagios Administrators
    members nagiosadmin
    }

    Содержимое commands.cfg

    # ‘notify-service-by-tg’ command definition
    define command{
    command_name notify-service-by-tg
    command_line /usr/bin/telegram-cli -WR -U root -D -e ‘msg $_CONTACTTG$ $NOTIFICATIONTYPE$ Host : $HOSTNAME$ — Service : $SERVICEDESC$ is $SERVICESTATE$ @ $LONGDATETIME$’
    }

    # ‘notify-host-by-tg’ command definition
    define command{
    command_name notify-host-by-tg
    command_line /usr/bin/telegram-cli -WR -U root -D -e ‘msg $_CONTACTTG$ «$NOTIFICATIONTYPE$ Host : $HOSTNAME$ is $HOSTSTATE$ @ $LONGDATETIME$»‘
    }

    ***Вывод команды в консоли из под sudo -u nagios -s***
    nagios@debian:/home/kirill$ telegram-cli -WR -D -e ‘msg kirill_ivanov test’
    open[config_file]: No such file or directory
    I: config_file=[/home/nagios/.telegram-cli/config]

  3. By nedoadminko (Сообщение автора) on

    Видимо нагиос у вас настроен из под пользователя root, а не nagios. Создайте директорию /home/nagios/ и пройдите стандартную авторизацию telegram из консоли под sudo -u nagios -s, после этого должно заработать.

  4. By Кирилл on

    Супер, оно ожило. Спасибо огромное что просвятили. Жаль вам тут плюс в карму поставить нельзя.

  5. By Ulis on

    Доброй ночи!
    В чем может быть проблема, из под пользователя nagios из консоли все замечательно отправляется, а из скрипта тишина. В логах пишется [01-11-2015 00:40:23] HOST NOTIFICATION: admin;localhost;CUSTOM (UP);notify-host-by-telegram;PING OK — Packet loss = 0%, RTA = 0.04 ms;nagios;test Но месага не приходит.

  6. By Ulis on

    [01-11-2015 09:47:53] wproc: stdout line 01: I: config_file=[//.telegram-cli/config]
    Informational Message
    [01-11-2015 09:47:53] wproc: stderr line 01: open[config_file]: No such file or directory

    Nagios не может найти telegram-cli что ли?

  7. By alex81040 on

    Здравствуйте, вы пишете статьи на сайты сами? Мы занимаемся восстановлением уникальных статьей, из удаленных из интернета сайтов.
    Предлагаем снабжать вас контентом.
    Статьи раздаем бесплатно, переходите к нам — shoptxt­.­ru/content.php
    Отписаться от рассылки — http://shoptxt.ru/dell.php?dell=NEDOADMIN.RU

Добавить комментарий