Nagios

如何通過主機狀態的變化觸發服務檢查?

  • October 2, 2017

我們有一組伺服器,其中任何一個都可能出現故障,生成中等優先級通知:

define host {
       host_name       foo1
       contacts        medium-priority
       use     default-host
}
...

但是,當兩個以上的此類伺服器出現問題時,我們希望獲得更高優先級的通知。為此,我們使用 Nagios’/Icinga 的check_cluster-utility 設置了一個單獨的服務定義:

define service {
       service_description     foo-cluster
       servicegroups   cluster-checks
       display_name    Foo Cluster
       check_command   check_cluster_host!Foo Cluster!0!3!$HOSTSTATEID:foo1$,$HOSTSTATEID:foo2,...$HOSTSTATEID:fooN$
       contacts        high-priority
       hostgroup_name  clusters
       notes   Check, that no more than 2 hosts in group foo are in trouble
       use     default-service
}

以上可能會起作用,但我希望這個服務檢查不是由時間觸發,而是由任何“基礎”主機的狀態變化觸發……

我們使用 Ansible 生成 Icinga 的配置文件,因此可以以程式方式建構複雜的依賴關係——但是這樣的觸發可以實現嗎

您可以在主機上定義一個事件處理程序,它基本上是一個“基於參數做某事”的小腳本。您可以將主機的狀態屬性從執行時宏作為命令參數傳遞。

https://www.icinga.com/docs/icinga1/latest/en/eventhandlers.html

我會走路線並在主機上定義一個自定義變數,該變數定義了在觸發事件處理程序時要觸發的服務。這樣您就不需要在腳本中對它們進行硬編碼。

然後,您的腳本可能會決定通過外部命令管道強制執行新服務檢查。您可能應該定義 HARD 或 SOFT 狀態是否足夠 - 請記住,事件處理程序僅在狀態更改時觸發,而不是在 DOWN->DOWN->DOWN 例如。

範例:https ://github.com/Icinga/icinga-core/blob/master/contrib/eventhandlers/submit_check_result.in

注意:該服務不應啟用主動檢查,並且不使用虛擬命令,而是使用實際的服務檢查命令。

(這樣的檢查結果送出發生在舊的 Nagios/Icinga1 世界中,如果您正在尋找更多有關命令管道和事件處理程序的範例,那麼它也用於有點駭人聽聞的分佈式監控)。

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