主機和服務依懶性
介紹
服務和主機相關性是Nagios的一項高級功能,可讓您根據一個或多個其他主機或服務的狀態來控制主機和服務的行為。我將解釋依賴性的工作方式,以及主機和服務依賴性之間的區別。
服務依賴關系概述
提示:在許多情況下,父/子服務關系是表達服務依賴關系的一種簡單得多的方法。服務父關系是通過服務定義中的Parents指令定義的。
關于服務依賴項,您應該了解以下幾點:
一項服務可以依賴于一項或多項其他服務
服務可以依賴于不與同一主機關聯的服務
服務依賴項不會繼承(除非專門配置為)
服務依賴關系可用于導致服務檢查執行和服務通知在不同情況下(OK,WARNING,UNKNOWN和/或CRITICAL狀態)被禁止。
服務依賴性可能僅在特定時間段內有效
定義服務依賴性
首先,基礎知識。通過在對象配置文件中添加服務依賴項定義來創建服務依賴項。在每個定義指定的從屬服務,你正在服務取決于,并且使得執行并通知依賴失敗(這些將在后面敘述)的標準(如果有的話)。
您可以為給定服務創建多個依賴關系,但是必須為創建的每個依賴關系添加單獨的服務依賴關系定義。
示例服務依賴項
下圖顯示了服務通知和執行依賴關系的示例邏輯布局。不同的服務依賴于其他服務來進行通知和檢查執行。

在此示例中,主機C上服務F的依賴項定義如下:
定義服務依賴性{
host_name主機B
service_description服務D
dependent_host_name主機C
dependent_service_description服務F
execution_failure_criteria o
notification_failure_criteria w,u
}
?
定義服務依賴性{
host_name主機B
service_description服務E
dependent_host_name主機C
dependent_service_description服務F
execution_failure_criteria n
notification_failure_criteria w,u,c
}
?
定義服務依賴性{
host_name主機B
service_description服務C
dependent_host_name主機C
dependent_service_description服務F
execution_failure_criteria w
notification_failure_criteria c
}
上圖中顯示的其他依賴項定義將定義如下:
定義服務依賴性{
host_name主機A
service_description服務A
dependent_host_name主機B
dependent_service_description服務D
execute_failure_criteria u
notification_failure_criteria n
}
?
定義服務依賴性{
host_name主機A
service_description服務B
dependent_host_name主機B
dependent_service_description服務E
execution_failure_criteria w,u
notification_failure_criteria c
}
?
定義服務依賴性{
host_name主機B
service_description服務C
dependent_host_name主機B
dependent_service_description服務E
execution_failure_criteria n
notification_failure_criteria w,u,c
}
如何測試服務依賴性
在Nagios執行服務檢查或為服務發送通知之前,它將檢查該服務是否具有任何依賴關系。如果沒有任何依賴關系,則執行檢查或按通常的方式發送通知。如果該服務確實具有一個或多個依賴項,則Nagios Core將按照以下方式檢查每個依賴項:
Nagios獲取正在依賴的服務的當前狀態*。
Nagios Core將依賴的服務的當前狀態與依賴項定義中的執行或通知失敗選項進行比較(以當時相關的一項為準)。
如果所依賴的服務的當前狀態與故障選項之一匹配,則表示該依賴項已失敗,并且Nagios Core將脫離依賴項檢查循環。
如果所依賴的服務的當前狀態與該依賴項的任何失敗選項都不匹配,則表示該依賴項已通過,Nagios Core會繼續檢查下一個依賴項。
該循環一直持續到檢查完該服務的所有依賴項或一次依賴項檢查失敗為止。
注意:*要注意的一件事是,默認情況下,Nagios Core會在進行相關性檢查時使用所依賴的服務的最新硬狀態。如果要讓Nagios Core使用服務的最新狀態(無論其是軟狀態還是硬狀態),請啟用soft_state_dependencies選項。
執行依賴
執行依賴關系用于限制何時可以執行服務的主動檢查。被動檢查不受執行依賴性的限制。
如果對服務的所有執行依賴性測試都通過了,Nagios Core將照常執行對服務的檢查。如果僅一項服務的執行依賴項失敗,Nagios Core將暫時阻止執行該(依賴項)服務的檢查。在將來的某個時候,該服務的執行依賴性測試可能會全部通過。如果發生這種情況,Nagios Core將像往常一樣再次開始檢查服務。有關檢查調度邏輯的更多信息,請參見此處。
在上面的示例中,如果服務B處于警告或未知狀態,則服務E的執行依賴項將失敗。如果是這種情況,將不會執行服務檢查,并且會安排檢查在以后執行(潛在)執行。
通知依存關系
如果針對該服務的所有通知依賴項測試均通過,則Nagios Core將照常發送該服務的通知。如果僅一項服務的通知依賴項失敗,則Nagios Core會臨時抑制該(依賴項)服務的通知。在將來的某個時候,該服務的通知依賴項測試可能會全部通過。如果發生這種情況,Nagios Core將重新開始發送通知,就像通常對該服務一樣。可以在此處找到有關通知邏輯的更多信息。
在上面的示例中,如果服務C處于CRITICAL狀態和/或*服務D處于WARNING或UNKNOWN狀態,和/或如果*Service E處于WARNING,UNKNOWN或CRITICAL狀態,則服務F的**通知依賴項將失敗。。如果是這種情況,則不會發送該服務的通知。
依賴繼承
如前所述,默認情況下不會繼承服務依賴項。在上面的示例中,您可以看到服務F依賴于服務E。但是,它不會自動繼承服務E對服務B和服務C的依賴關系。為了使服務F依賴于服務C,我們必須添加另一個服務依賴關系定義。沒有服務B的依賴項定義,因此服務F 不依賴于服務B。
如果確實希望使服務依賴項可繼承,則必須在服務依賴項定義中使用Inherits_parent指令。啟用此偽指令后,它表示依賴項繼承了所依賴服務(也稱為主服務)的依賴項。換句話說,如果主服務依賴于其他服務,并且其中任何一個依賴關系失敗,則該依賴關系也會失敗。
在上面的示例中,假設您想為服務F添加新的依賴關系以使其依賴于服務A。您可以創建一個新的依賴關系定義,該定義將服務F指定為依賴服務,并將服務A指定為主服務(即所依賴的服務)。您也可以修改服務D和F的依賴項定義,如下所示:
定義服務依賴性{
host_name主機B
service_description服務D
dependent_host_name主機C
dependent_service_description服務F
execution_failure_criteria o
notification_failure_criteria n
Inherits_parent 1
}
由于啟用了Inherits_parent指令,因此在測試服務F和D之間的依賴關系時,將測試服務A和D之間的依賴關系。
依賴項可以具有多個繼承級別。如果A和D之間的依賴關系定義啟用了Inherits_parent指令,并且服務A依賴于某些其他服務(我們稱其為服務G),則服務F將依賴于服務D,A和G(每一個可能具有不同的條件) )。
主機依賴性
如您所料,主機依賴項以與服務依賴項類似的方式工作。區別在于它們是針對主機而不是服務。
提示:不要將主機依賴項與父/子主機關系混淆。在大多數情況下,應該使用父/子主機關系(在主機定義中由parents指令定義),而不是主機依賴性。可以在有關網絡可達性的文檔中找到有關父/子主機關系如何工作的描述。
以下是有關主機依賴關系的基礎知識:
主機可以依賴一個或多個其他主機
主機依賴項不會繼承(除非專門配置為)
主機依賴關系可用于導致主機檢查執行,并且在不同情況(UP,DOWN和/或UNREACHABLE狀態)下抑制主機通知。
主機依存關系可能僅在特定時間段內有效
示例主機依賴關系
下圖顯示了主機通知依賴項的邏輯布局示例。不同的主機依賴于其他主機進行通知。

在上面的示例中,主機C的依賴項定義將定義如下:
定義hostdependency {
host_name主機A
dependent_host_name主機C
notification_failure_criteria d
}
?
定義hostdependency {
host_name主機B
dependent_host_name主機C
notification_failure_criteria d,u
}
與服務相關性一樣,主機相關性也不會被繼承。在示例圖像中,您可以看到Host C沒有繼承Host B的主機依賴性。為了使Host C依賴于Host A,必須定義一個新的主機依賴性定義。
主機通知依存關系與服務通知依存關系的工作方式相似。如果對主機的所有通知依賴項測試均通過,則Nagios Core將像往常一樣向主機發送通知。如果主機的通知依賴關系中只有一個發生故障,Nagios Core就會臨時抑制該(依賴)主機的通知。在將來的某個時候,主機的通知依賴項測試可能全部通過。如果發生這種情況,Nagios Core將重新開始發送通知,就像通常發送給主機一樣。可以在此處找到有關通知邏輯的更多信息。
Nagios Core中文使用教程
推薦文章: