icinga2 уведомления для кэширования - PullRequest
0 голосов
/ 25 июня 2018

Я хотел бы поделиться с вами способом отправки уведомлений из icinga2 в кеш через API.

Версия Icinga2 : 2.4.10-1
Версия кэша : 2.3.9

Прежде всего, вы должны знать, какой ID компонента вы хотите использовать (в моем случае, потому что вы можете обновить компонент по имени)

Чтобы получить идентификатор компонента, вы можете использовать команду curl:

curl --insecure --request GET --url https://URL/api/v1/components -H "X-Cachet-Token: TOKEN"

URL : URL-адрес вашей установки кэша
TOKEN : токен участника в Cachet

Создать команду в /etc/icinga2/conf.d/commands.conf

object NotificationCommand "cachet-incident-notification-v2" {
    import "plugin-notification-command"

    command = [ PluginDir + "/cachet-notification-v2.sh" ]

    env = {
      "SERVICESTATE" = "$service.state$"
    }
}

Создать шаблон уведомления в /etc/icinga2/conf.d/templates.conf

template Notification "cachet-incident-notification-v2" {
  command = "cachet-incident-notification-v2"

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

 /*
 period = "24x7"
*/
  interval = 0
}

Создать уведомление в /etc/icinga2/conf.d/notifications.conf

apply Notification "cachet-incident-notification-v2" to Service {
  import "cachet-incident-notification-v2"

  user_groups = host.vars.notification.pager.groups

  assign where service.vars.cachetv2 == "1" && host.vars.cachetv2 == "1"

  interval = 0 # Disable Re-notification
}

Добавьте переменную в службу проверки в /etc/icinga2/conf.d/service/your/service.conf

[...]    
vars.cachetv2 = "1"
[...]

Добавьте переменную в файл конфигурации вашего хоста в /etc/icinga2/conf.d/hosts/your/host

[...]    
vars.cachetv2 = "1"
[...]

Создайте скрипт в /usr/lib/nagios/plugins/cachet-notification-v2.sh

#!/bin/bash

# Some Constants
NOW="$(date +'%d/%m/%Y')"
CACHETAPI_URL="https://URL/api/v1/components/<ID DU COMPOSANT>"
CACHETAPI_TOKEN="TOKEN><"
# Map Notification states for icinga2
# OK - 1 operational
# Warning - 3 Partial outage
# Critical - 4 Major outage
# Unknown - 2 Performance issues
case "$SERVICESTATE" in
        'OK')
                COMPONENT_STATUS=1
        ;;
        'WARNING')
                COMPONENT_STATUS=3
        ;;
        'CRITICAL')
                COMPONENT_STATUS=4
        ;;
        'UNKNOWN')
                COMPONENT_STATUS=2
        ;;
esac

curl -X PUT -H "Content-Type: application/json;" -H "X-Cachet-Token: ${CACHETAPI_TOKEN}" -d '{"status": "'"${COMPONENT_STATUS}"'"}' ${CACHETAPI_URL} -k

PS : дать разрешение на выполнение сценария

Проверьте синтаксис и перезагрузите

/etc/init.d/icinga2 checkconfig && /etc/init.d/icinga2 reload

Результат: Когда ваша проверка выдает « CRITICAL », статус в Cachet будет иметь ОСНОВНУЮ ВЫПУСК
Когда ваша проверка выдает « WARNING », статус в Cachet будет ЧАСТИЧНАЯ ВЫПУСК
Когда ваша проверка выдает « OK », статус в Cachet будет ОПЕРАЦИОННЫМ
Когда ваша проверка выдает « UNKNOWN », состояние в Cachet будет равно ЗАДЕРЖКА ИСПОЛНЕНИЯ

Надеюсь, это поможет.

Николас Б.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...