Icinga2 + telegram

Данный пример сделан на базе сборки docker icinga/icinga2.

Создаем бота телеграмм

Добавляем себе @BotFather
Далее там

/newbot

В ответ пишем имя бота. Потом он попросит уникальное имя бота. В итоге получим токен созданного бота.

Для активации выполним команду

curl --silent "https://api.telegram.org/bot${TOKEN}/getUpdates"

Что бы узнавать ID группы или свой собственный добавляем в группу бота @getmyid_bot и даем админские права. Далее просто постим что нибудь в группу и смотрим айдишники.

Загружаем скрипты отправки сообщений

Архив со скриптами . Распаковываем и копируем в каталог /data/etc/icinga2/scripts. Не забываем дать права на исполнение.

Добавляем конфиги

commands.conf

Строку 239843925245:AAE7sMQQdDOASDKQoqWOKAbTXClU меняем на ваш токен, что вы получили после создания бота. Можно конечно это сделать и в настройках группы или юзера, но это если вы используете более 1 телеграм бота.

object NotificationCommand "telegramm-host-notifaction" {
    import "plugin-notification-command"
    command = [
        "/data/etc/icinga2/scripts/telegram-host-notification.sh"
    ]
    timeout = 3s
    arguments += {
        "-4" = {
            required = true
            value = "$address$"
        }
        "-b" = {
            required = true
            value = "$notification.author$"
        }
        "-c" = "$notification.comment$"
        "-d" = {
            required = true
            value = "$icinga.long_date_time$"
        }
        "-l" = "$host.name$"
        "-n" = "$host.display_name$"
        "-o" = {
            required = true
            value = "$host.output$"
        }
        "-q" = {
            required = true
            value = "$user.vars.telegram_chat_id$"   
        }
        "-r" = {
            required = true
            value = "239843925245:AAE7sMQQdDOASDKQoqWOKAbTXClU"
        }
        "-s" = "$host.state$"
        "-t" = "$notification.type$"
    }
}

object NotificationCommand "telegramm-service-notification" {
    import "plugin-notification-command"
    command = [
        "/data/etc/icinga2/scripts/telegram-service-notification.sh"
    ]                              
    timeout = 3s
    arguments += {
        "-4" = {
            required = true
            value = "$address$"
        }
        "-b" = {
            required = true
            value = "$notification.author$"
        }
        "-c" = "$notification.comment$"
        "-d" = {
            required = true
            value = "$icinga.long_date_time$"
        }
        "-e" = {
            required = true
            value = "$service.name$"
        }
        "-l" = "$host.name$"
        "-n" = "$host.display_name$"
        "-o" = {
            required = true
            value = "$service.output$"
        }
        "-q" = {
            required = true
            value = "$user.vars.telegram_chat_id$"
        }
        "-r" = {
            required = true
            value = "239843925245:AAE7sMQQdDOASDKQoqWOKAbTXClU"
        }
        "-s" = "$service.state$"
        "-t" = "$notification.type$"
        "-u" = {
            required = true
            value = "$service.display_name$"
        }
    }
}

templates.conf

template Notification "telegramm-host-notification" {
  command = "telegramm-host-notifaction"

  states = [ Up, Down ]
  types = [ Problem, Acknowledgement, Recovery, Custom,
            FlappingStart, FlappingEnd,
            DowntimeStart, DowntimeEnd, DowntimeRemoved ]

  vars += {
    notification_logtosyslog = false
  }

  period = "24x7"
}

template Notification "telegramm-service-notification" {
  command = "telegramm-service-notification"

  states = [ OK, Warning, Critical, Unknown ]
  types = [ Problem, Acknowledgement, Recovery, Custom,
            FlappingStart, FlappingEnd,
            DowntimeStart, DowntimeEnd, DowntimeRemoved ]

  vars += {
    notification_logtosyslog = false
  }

  period = "24x7"
}

notifications.conf

apply Notification "telegramm-icingaadmin" to Host {
  import "telegramm-host-notification"
  user_groups = host.vars.notification.telegramm.groups
  users = host.vars.notification.telegramm.users
  assign where host.vars.notification.telegramm
}

apply Notification "telegramm-icingaadmin" to Service {
  import "telegramm-service-notification"
  user_groups = host.vars.notification.telegramm.groups
  users = host.vars.notification.telegramm.users
  assign where host.vars.notification.telegramm
}

Добавляем уведомления

В хосте сервисе или в их шаблонах, где нужно уведомления через telegram указываем строки.

  vars.notification["telegramm"] = {
    groups = [ "icingaadmins" ]
  } 

Далее в пользователе или шаблоне пользователей добавляем переменную, где 238923885 - ID вашей группы или вашего чата с ботом.

vars.telegram_chat_id = "-238923885"

Перезапускаем исингу и радуемся сообщениям в телеграм :)

[ Править ]

@kiranananda