通过 HTTP 关闭特定的 Icinga 2 通知

通过 HTTP 关闭特定的 Icinga 2 通知

在 Nagios Core 中,可以通过 Web 界面关闭特定服务或主机的通知。这是一个简单的 Web 请求,我们也可以在命令行脚本/工具中构建它。

在我们需要关闭手动重启主机的通知、更新服务或通过自动脚本重新部署代码等情况下,此 CGI 连接器是理想的选择。

最近,我们一直在考虑转向 Icinga 2。从其 Web 界面(恰如其分地命名为 Icinga Web),可以做同样的事情。只有一个问题;由于 Icinga 具有 CSRF 缓解措施,因此无法通过模拟 Icinga Web 请求以直接的方式做到这一点。

有没有办法通过某种 API(REST 或其他)来实现这一点?到目前为止,我的搜索除了旧 CGI 接口的规范外没有找到其他内容,而新 Icinga Web 上似乎没有提供该规范,参考:http://docs.icinga.org/latest/en/extcommands2.html

编辑:仔细阅读提供的链接后,我注意到它为我们提供了一个命令文件,允许以基于行的媒介形式插入命令。但这仍然给我们带来了一些问题(并发性就是其中之一)。

答案1

显然,Icinga2 有一项名为“Livestatus”的功能,允许用户发送 extcommands(http://docs.icinga.org/latest/en/extcommands2.html) 通过 TCP 连接。您只需在命令前加上前缀即可COMMAND

答案2

您可以使用Icinga2 API修改 Icinga 2 配置并向 Icinga2 核心发送操作。事实上,当前的 icingaweb2(Icinga 2.8.1)更喜欢 API。

例如,要禁用服务上的通知 icinga.example!ping4,请使用:

curl -k -s -XPOST -u root:icinga \
   'https://localhost:5665/v1/objects/services/icinga.example!ping4' \
   -d '{"attrs": {"enable_notifications": false}}' \
   -H 'Accept: application/json' | python -m json.tool

root:icingaApi用户名称和密码。

{"results": [{
        "code": 200.0,
        "name": "icinga.example!ping4",
        "status": "Attributes updated.",
        "type": "Service"
    }]
}   

相关内容