Nagios的各種有用知識

Nagios可定義的物件:


Nagios內可定義的物件如下:

host             主機
hostgroup        主機群組
service           服務,用來監控主機上的服務
servicegroup      服務群組
contact           聯絡人,主要是設定Mail
contactgroup      聯絡人群組
timeperiod        時間區段,在時間區段內才會告警
command         指令,以編譯的執行檔或.sh為基礎設計的指令
hostdependency   主機依存性
servicedependency 服務依存性
hostescalation     主機事件升級
serviceescalation   服務事件升級

hostextinfo        主機延伸資訊(3.0後已棄用,已將此功能放到host)
serviceextinfo      服務延伸資訊(3.0後已棄用,已將此功能放到service)





物件之間的關係





依照著個模型就可以建置出所需要的監控架構
上圖是簡單的模型,因為hostcontact都會用到COMMAND,事件升級和相依性也沒有提到。






狀態

主機或服務在不同情況下會有不同的狀況,如ping不到或時好時壞等

主機狀態
無法連線 (u)
停機 (d)
已復原 (r)
不穩定狀態 (f)



服務狀態
未知 (u)
嚴重 (w)
警告 (c)
已復原 (r)
不穩定狀態 (f)




回傳值

如果要自己寫script,一定要有回傳值,回傳值的定義如下


0
一切正常 (OK)
1
警告狀態 (WARNING)
2
嚴重狀態 (CRITIC)
3
未知狀態 (UNKNOWN)


如果回傳的值不是 0 ,就會觸發狀態改變,一般會先進入軟狀態,等到 max_check_attempts 達到後就會轉為硬狀態。




軟狀態和硬狀態 – Soft status & Hard status

Nagios偵測到主機或服務連不到或超過門檻值(warning or critical),會 準備進入到 u,w,c 等其它狀態,這個時候會進入到一個緩衝時間,就是軟狀態Soft status
這段時間Nagios會改變檢查的週期,當達到軟狀態的上限就會轉為硬狀態Hard status,這個時候才是真正的狀態改變
反過來,從 u,w,c 等不良狀態要變回正常狀態時,也會進入軟狀態
在軟狀態期間使用的檢查間隔是retry_interval”
軟狀態的上限是 max_check_attempts”,包含第一次的正常檢查次數


什麼是軟狀態Soft status
在進入硬狀態前的緩衝時間,也可以省略這段時間直接進入硬狀態


什麼是硬狀態Hard status
真正改變一個HostService的狀態




service的附屬功能

主動檢查 (Active Checks) 和被動檢查 (Passive Checks)
目前筆者用過的主機監視系統WhatsUPPRTGSolarwindsCACTI都是監控主機發送訊息去問其它主機的資訊,也就是主動檢查 (Active Checks)

Nagios有一個功能,開啟監聽介面後,就可以等待其它主機自己回應他們的狀態或資訊,而起它主機通常需要安裝軟體或撰寫一個Script並使用排程的方式定期回覆資訊給Nagios,這個就是被動檢查 (Passive Checks)


Volatile (揮發性)
通常 "event" 只會發生在狀態改變,也就是說如果現在某個服務停留在warning狀態,下一次檢查此服務時也是warning狀態,狀態沒有改變 event 就不會觸發。
想要每次都處發 event,以執行告警、紀錄、event handler時,可用此功能。

service有兩種性質,Normalvolatile
揮發性的設定可在service的定義中設定這個屬性is_volatile,預設是Normal,也就是不揮發(non-volatile)

可能會用到這個功能的地方 :
希望在每次檢查後,都會將現在的狀態改為--OK(該告警的還是會做動)
希望每次檢查到問題時,都會告警。

Normalvolatile的差異 :
每次檢查到 non-OK 的狀態就會記錄下來
每次都會通知聯絡人。設定volatile會忽略告警間隔的功能
如有設定event handler (事件處理),每次都會做動


使用範例
已經知道某台伺服器的服務容易卡住不動,可以設定event handlervolatile,並設定max_check_attempts=1,使得每次檢查到錯誤時,Nagios可以送出指令讓對方伺服器重新啟動服務

如果只是希望每次發生都記錄下來,但不要收到告警訊息,可以使用stalking


Stalking (跟蹤功能)
可用stalking_options屬性設定要持續跟蹤的狀態

stalking volatile差別在於 stalking只會紀錄不會持續觸發告警



Freshness (新鮮度)
被動檢查和分散式系統時使用
在被動檢查的狀況下,如果太長時間沒有收到對方的回應,會認定這個被動檢查過期了 (stale),這個時候就會觸發Nagios執行主動檢查 (Active Check)
當觸發主定檢查時,會強制執行check_command,就算已經關閉主動檢查
(active_checks_enabled = 0,還是會執行主動檢查)
freshness_threshold屬性表示多久沒收到訊息會觸發主動檢查 (單位 )



檢查間隔

檢查間隔分成正常的檢查間隔和軟狀態的檢查間隔 (retry_interval)


範例的假設正常檢查間隔為 60
範例的軟狀態的檢查間隔為 40
max_check_attempts設定為3
藍色點 正常檢查
深藍色 – retry的檢查,也就是軟狀態
紅色點 回覆檢查的資料並且發現服務有問題,也是檢查完成的時間點

下圖,第一次檢查完畢後出現問題,進入軟狀態
因第一次檢查是正常狀態,要等60秒才能進行下一次檢查
2和第3次檢查是軟狀態,間隔為40
當地三次檢查失敗時,軟狀態轉為硬狀態,並回到正常檢查間隔



檢查時間超時


如果一個檢查動作的回應時間超過正常檢測間隔,Nagios會把原本要做的檢查排到下一個循環再做

如圖,第二次檢查時,因回應時間超過60秒,使得原本要做的檢查移到下一個60秒執行






相依性 - dependency

當多個設備或服務串聯在一起時,有些主機或服務當機會造成後面一連串的服務不能使用,這個時候就會發出大量的告警,有可能會影響到真正事件的判斷

換另一種角度,如果當一台交換器當機,連接這台交換器的主機都會連不到,這個時候只需要寄送這台交換器的警告訊息,可以減少告警的數目,也比較容易找到真正的問題


預設的相依性
Nagios會自動把主機和主機上的服務設定相依性
意思就是當主機當機時,只會發送主機的告警而不會發送各種服務的告警


主機相依性
依底下的例子來講,當Switch當機,Nagios就不能連到WEB
這代表WEB相依於Switch
因此當Switch當機時,不應該同時發送WEB告警 (當然也可以,視主管而定)





服務相依性
當某個服務無法運作時,會影響到其它服務的運作,就是服務相依性

如圖片的例子,Nagios使用WEB Proxy連到真正的WEB,因此當Proxy的服務不能運作時,一定也連不到後面的WEB服務






事件升級

當事件發生後持續一段時間,可能會依政策因素需要通告主管或經理,或著要調整告警的間隔,可以運用事件升級的功能覆寫原本的告警人員告警間隔

事件升級分成主機事件升級和服務事件升級
主機事件升級,針對某個主機或一群主機
服務事件升級,針對某個主機的其中一個服務




Event Handler


當偵測到主機或服務的 "狀態改變" 時,執行預先設定好的script,可以使用這個功能。
例如WEB服務當機,則Nagios送出指令重新啟動WEB服務。


會執行event handler的時間點 :
SOFT狀態時
剛進入non-OK HARD狀態時
剛進入SOFTHARDrecover狀態時


Event handler有四種模式 :
Global host event handler              全域的主機,一旦設定全部的主機都會使用這個
Global service event handler          全域的服務,全部的服務都會用這個設定
Host-specific host event handler    個別的主機設定,只作用在某個主機上
Service-specific event handler        個別的服務設定,只作用在某個服務上
如果全域和個別的設定都有設定,則會先執行全域的設定,執行完後才會執行個別的設定。

整體的執行順序是 :
Notification->Global event handler->specified event handler


啟用Event handler
Event handler有兩個地方需要啟動,都啟動後才能正常運作event handler
主設定檔的enable_event_handlers=1
服務或主機的個別設定檔的enable_event_handlers=1

Global hostglobal service的設定在主設定檔內的global_host_event_handler global_service_event_handler


執行的權限
正常狀況,執行event handler的使用者權限和Nagios的權限是一樣的。

也就是說如果要執行重開機之類的指令,權限可能會不夠,必須額外使用sudo或其它方式輔助。





範本

為了減少設定的複雜度和文件的簡潔,可以使用範本功能,快速、重複的設定有相同基礎設定的物件,範本可用在全部的物件上。範本也可再套用範本

範本一定要有兩個屬性,缺一不可
name              範本的名稱,請用英文
register           0

使用範本的方式為
use         範本的名稱 (name屬定的名稱)


如主機的範本為
define host {
name                              linux-template
register                           0
check_command             check-host-alive
check_interval                5
retry_interval                  1
max_check_attempts     5
check_period                  24x7
process_perf_data          0
notification_interval       30
notification_period         24x7
notification_options        d,u,r
}


在定義主機時,可以用use去使用範本

define host {
hostname web-server
address 192.168.1.1
use linux-template
}



Flapping Detection–狀態不穩定的機制

當主機或服務的狀態常常UP->DownDown->UP
這個時候會稱這種狀況叫 Flapping,主機或服務的狀態不穩定


偵測不穩定狀態的方法是 :
最少要儲存21check資料
檢查過去一段時間check資料的狀態變化
計算出狀態變換率 (一個百分比的數值) ,用此確認狀態變化的情況
狀態變換率flapping thresholdslowhigh值比較


如圖,圖片內有21check紀錄
綠色是正常,黃色是警告,橘色是unknown,紅色是危急
上方的藍色箭頭就是狀態變換的位置,總共有7
因此狀態變換率為
7 / 21 *100% = 35%



狀態變換率超過high的值,就會觸發狀態不穩定
狀態變換率低於low的值,就會回到狀態穩定 (前提是要先在狀態不穩定情況)


如果服務都沒發生過變動,則狀態變換率0%
如果服務在每次檢查都變動,則狀態變換率100%


另外現在的狀態不穩定的偵查機制加入權重功能
越靠近現在的狀態變換的權重比較高,越久遠的狀態變換權重比較低
依照權重的關係,原本35%的值會變成大約31%



圖片來源
https://assets.nagios.com/downloads/nagioscore/docs/nagioscore/3/en/flapping.html









Comments

Popular posts from this blog

DOS指令 -- SET和變數

WPA_supplicant的設定方式

DOS指令 -- FOR迴圈