通過 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
編輯:在仔細閱讀提供的連結之後,我注意到這為我們提供了一個命令文件,允許命令插入作為基於行的介質。儘管如此,這仍然給我們帶來了一些問題(並發性就是其中之一)。
顯然,Icinga2 有一個名為“Livestatus”的功能,它允許使用者通過 TCP 連接發送 extcommands ( http://docs.icinga.org/latest/en/extcommands2.html )。您需要做的就是在命令前面加上
COMMAND
.
您可以使用Icinga2 API修改 Icinga 2 配置並將操作發送到 Icinga2 核心。事實上,目前的 icingaweb2 (Icinga 2.8.1) 更喜歡 API。
例如,要禁用 service 上的通知
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
您的ApiUser名稱和密碼在哪裡。{"results": [{ "code": 200.0, "name": "icinga.example!ping4", "status": "Attributes updated.", "type": "Service" }] }