狀態震蕩的檢測和處理
介紹
Nagios支持對“拍打”的主機和服務進行可選檢測。當服務或主機更改狀態的頻率過高時,就會發生震蕩,從而引發大量的問題和恢復通知。震蕩可能表示配置問題(即,閾值設置得太低),麻煩的服務或實際的網絡問題。
襟翼檢測如何工作
在開始之前,我先說一下撲動檢測很難實現。如何準確地確定對于特定主機或服務的狀態更改而言,“過于頻繁”是什么意思?當我剛開始考慮實施抖動檢測時,我試圖找到一些有關如何/應該檢測抖動的信息。我找不到有關其他人正在使用的信息(他們在使用任何信息嗎?),所以我決定接受我認為合理的解決方案…
每當Nagios檢查主機或服務的狀態時,它都會檢查其啟動或停止震蕩。它通過以下方式做到這一點:
存儲主機或服務的最后21個檢查的結果
分析歷史檢查結果并確定狀態更改/轉換發生的位置
使用狀態轉換來確定主機或服務的狀態變化百分比值(變化的度量)
將狀態變化百分比與低和高拍動閾值進行比較
當主機或服務的百分比狀態變化首次超過高波動閾值時,便確定該主機或服務已開始波動。
當主機或服務的百分比狀態低于低漂移閾值(假設它先前曾發生漂移)時,將確定該主機或服務已停止漂移。
例
讓我們更詳細地描述襟翼檢測如何與服務一起工作…
下圖顯示了最近21次服務檢查中服務狀態的時間順序歷史記錄。OK狀態顯示為綠色,WARNING狀態顯示為黃色,CRITICAL狀態顯示為紅色,UNKNOWN狀態顯示為橙色。
檢查歷史服務檢查結果,以確定狀態更改/轉換發生的位置。當存檔狀態與按時間順序在其之前的存檔狀態不同時,就會發生狀態更改。由于我們將最后21個服務檢查的結果保存在數組中,因此最多可能有20個狀態更改。在此示例中,有7種狀態更改,由上圖中的藍色箭頭指示。
襟翼檢測邏輯使用狀態更改來確定服務的總體狀態更改百分比。這是服務波動/變化的度量。永不更改狀態的服務的狀態更改值為0%,而每次檢查狀態更改的服務的狀態更改值為100%。大多數服務之間的狀態變化百分比會有所不同。
在計算服務的狀態變化百分比時,與較舊的狀態變化相比,襟翼檢測算法將賦予新的狀態變化更多的權重。具體地說,襟翼檢測例程當前被設計為使最新的可能狀態變化比最舊的可能狀態承載50%的重量。下圖顯示了在計算特定服務的總體狀態變化百分比或總狀態變化百分比時,相比于較早的狀態變化,如何賦予最新狀態變化更大的權重。
使用上面的圖像,讓我們計算服務狀態變化百分比。您會注意到總共有7種狀態變化(在t 3,t 4,t 5,t 9,t 12,t 16和t 19)。如果不隨時間推移對狀態變化進行任何加權,這將使我們的狀態變化總數達到35%:
(觀察到的7個狀態更改/可能的20個狀態更改)* 100 = 35%
由于襟翼檢測邏輯將為較新的狀態變化提供比較早的狀態變化更高的速率,因此在此示例中,實際計算出的狀態變化百分比將略小于35%。假設狀態變化的加權百分比為31%…
然后將計算出的服務狀態變化百分比(31%)與波動閾值進行比較,以了解會發生什么情況:
如果該服務以前未發生過波動,并且31%等于或大于較高的波動閾值,則Nagios Core認為該服務才剛剛開始波動。
如果該服務以前曾發生過震蕩,并且有31%低于震蕩下限閾值,則Nagios Core會認為該服務剛剛停止震蕩。
如果這兩個條件均不滿足,則擺動檢測邏輯將不會對該服務執行任何其他操作,因為它當前未擺動或仍在擺動。
服務擋板檢測
Nagios Core會檢查服務被主動(或被動)檢查時服務是否在振蕩。
服務的拍動檢測邏輯按上面的示例所述工作。
主機的襟翼檢測
主機襟翼檢測與服務襟翼檢測的工作方式相似,但有一個重要區別:Nagios Core會在以下情況下嘗試檢查主機是否在搖擺:
檢查主機(主動或被動)
有時,當檢查與該主機關聯的服務時。更具體地說,當自上次執行襟翼檢測以來至少經過了x量的時間時,其中x等于與主機關聯的所有服務的平均檢查間隔。
為什么要這樣做?對于服務,我們知道連續的襟翼檢測例程之間的最短時間將等于服務檢查間隔。但是,您可能不會定期監視主機,因此可能沒有在擺動檢測邏輯中使用的主機檢查間隔。同樣,有意義的是,檢查服務應計入檢測主機震蕩。服務畢竟是主機的屬性或與主機相關的事物。無論如何,這是我可以用來確定在主機上執行皮瓣檢測的頻率的最佳方法,所以就可以了。
襟翼檢測閾值
Nagios Core使用幾個變量來確定百分比狀態變化閾值用于襟翼檢測。對于主機和服務,都可以配置全局**上限和下限閾值以及特定于**主機或服務的閾值。如果您不指定特定于主機或服務的閾值,則Nagios Core將使用全局閾值進行襟翼檢測。
下表顯示了全局和特定于主機或服務的變量,這些變量控制襟翼檢測中使用的各種閾值。
襟翼檢測所使用的狀態
通常,Nagios Core會跟蹤主機或服務的最后21次檢查的結果,而不管檢查結果(主機/服務狀態)如何,以用于襟翼檢測邏輯。
提示:通過在主機或服務定義中使用弗拉普_檢測_選項指令,可以將某些主機或服務狀態排除在弗拉普檢測邏輯之外。該指令允許您指定要用于襟翼檢測的主機或服務狀態(即“ UP”,“ DOWN”,“ OK”,“ CRITICAL”)。如果您不使用此偽指令,則所有主機或服務狀態都將在襟翼檢測中使用。
擋水板處理
首次檢測到服務或主機出現震蕩時,Nagios Core將:
記錄一條消息,指出服務或主機正在發生抖動。
向主機或服務添加非持久注釋,以表明它正在發生抖動。
向相應的聯系人發送主機或服務的“拍打開始”通知。
禁止服務或主機的其他通知(這是通知邏輯中的過濾器之一)。
當服務或主機停止震蕩時,Nagios Core將:
記錄一條消息,指示服務或主機已停止擺動。
刪除開始擺動時最初添加到服務或主機的注釋。
向相應的聯系人發送主機或服務的“拍擊停止”通知。
刪除有關服務或主機的通知的塊(通知仍將綁定到常規通知邏輯)。
啟用襟翼檢測
為了在Nagios Core中啟用襟翼檢測功能,您需要:
設置enable_flap_detection指令設置為1。
在主機中設置弗拉普檢測啟用指令,服務定義設置為1。
如果要全局禁用襟翼檢測,請將enable_flap_detection指令設置為0。
如果只想禁用幾個主機或服務的襟翼檢測,請在主機和/或服務定義中使用弗拉普_檢測_已啟用指令。
Nagios Core中文使用教程
