Monitoring

通過 HTTP 關閉特定的 Icinga 2 通知

  • January 20, 2018

在 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"
   }]
}   

引用自:https://serverfault.com/questions/666810