我想与您分享一种通过 API 将通知从 icinga2 发送到 cachet 的方法。
Icinga2 版本:2.4.10-1
Cachet 版本:2.3.9
首先,您必须知道要使用哪个组件 ID(在我的情况下,因为您可以按名称更新组件)
要获取组件 ID,可以使用 curl 命令:
curl --insecure --request GET --url https://URL/api/v1/components -H "X-Cachet-Token: TOKEN"
URL : Cachet 安装的 URL
TOKEN : Cachet 中成员的 Token
在 /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 中的状态将为 MAJOR ISSUE
当您的检查结果为“ WARNING ”时,Cachet 中的状态将为 PARTIAL ISSUE
当您的检查结果为“ OK ”时,Cachet 中的状态将是 OPERATIONAL
当您的检查结果为“ UNKNOWN ”时,Cachet 中的状态将为 PERFORMANCE DELAY
我希望它会有所帮助。
尼古拉斯·B。