在 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:icinga
的Api用户名称和密码。
{"results": [{
"code": 200.0,
"name": "icinga.example!ping4",
"status": "Attributes updated.",
"type": "Service"
}]
}