/usr/local/nagios/etc/nagios.cfg:
interval_length 表示時間單位,默認為60,即1分鍾
/usr/local/nagios/etc/objects/services.cfg:(新版本不存在這個文件)
normal_check_interval 表示重新檢測的時間間隔,默認為3個時間單位
check_interval 與normal_check_interval的作用一樣,只能在3.X中使用
retry_check_interval 重試時間
max_check_attempts 這個是出現故障的連接次數,達到這個次數之后就報警
關於max_check_attempts、normal_check_interval、retry_check_interval三個參數。
首先要說明兩個概念,
一、軟態:被監控項處於retry_check檢測周期內的非正常狀態;
二、硬態:被監控項達到max_check_attempts最大次數后的非正常狀態;除此之外的狀態,我們估且稱之為“常態”。
我們試着看看設置如下參數時,Nagios是怎么做狀態檢測及告警的:
max_check_attempts 3
normal_check_interval 3
retry_check_interval 2
notification_interval 3
首先,Nagios每三分鍾檢測一次服務,當某次檢測到服務狀態為異常時,直接進入軟態(1/3 soft state),此后,以每2分鍾(retry_check_interval)的檢測頻率,再進行2次(一共進行3次檢測,從而達到 max_check_attempts)檢測,如果這兩次檢測服務都為異常,則直接進入硬態(hard state)。進入硬態后,Nagios以每3分鍾(normal_check_interva)一次的頻率檢測服務,這與常態時是一樣的;同時每3分鍾 (notification_interval)進行一次告警。
注意:修改這些參數后並不是即時生效。首先要重啟nagios,然后等待下一次檢測完成,nagios才會按新的參數計算檢測時間與報警次數。
出現alert后,如果要發送email報警,需要滿足以下條件:
service中有定義notifications_enabled=1,且此service的contacts有定義service_notification_commands。
service_notification_commands的command出自於commands.cfg,這里定義了使用什么命令發送郵件。
host的alert是一樣的。
收不到郵件通常有以下幾種可能:
郵件被拒收,檢查mail的log可以看到。
nagios是否發送告警郵件,跟contact.cfg(或hosts.cfg)配置文件里的幾個參數有關系。下面就着重講義下這幾個參數:
notifications_enabled:是否啟用通知提醒功能。1為開啟,0為禁用。顯而易見,此選項值為0時,nagios肯定是不會發送郵件的。
contact_groups:定義接收通知提醒郵件的聯系人群組。請確認你的郵件地址是否填寫正確並在組中。
notification_interval:重復發送提醒郵件(信息)的最短間隔時間。默認間隔時間是60分鍾。如果這個值被設為0,nagios將 不會重復發送告警通知郵件,而是一次。 notification_period:定義發送告警通知的時間段。關鍵主機服務,設為7×24;一般主機服務,設為上班時間(WorkTime)。那 么,如果定義的監控不在定義的告警時間段里,無論發生什么情況,nagios都不會發送告警通知郵件。
notification_options:定義被監控主機(對象)在何種情況下發送告警通知郵件,可選狀態如下:
(1) w:WARNING,警告
(2) u:UNKNOWN,未知
(3) c:CRITICAL,危險(已達臨界值)
(4) d:DOWN,已宕機
(5) r:RECOVERY,狀態已恢復至OK
(6) f:FLAPPING,(未弄懂這個狀態的意思,也許是狀態波動很大)
(7) n:NONE,不發送告警通知郵件
nagios監控與報警時間間隔:
max_check_attempts:
check_interval:
retry interval:
notification_interval:
在OK狀態,nagios用check_interval定義的時間間隔來監控,出現問題后,切換為retry_interval和 max_check_attempts進行監控,達到max_check_attempts后觸發首次報警,同時恢復為check_interval進行 監控,並用notification_interval定義的時間間隔來發送報警,服務恢復后,在最近的check_interval點發送OK短信,完 成報警周期。
特殊:
1.max_check_attempts定義為1,檢測到問題后立即報警,不重試。
2.notification_interval定義為0,報警只發送一次,不重發。
巧用Escalations限制Nagios報警次數
Nagios是非常強大的一款監控工具,尤其是它的告警功能,現在網上實現的形式多種多樣如結合移動139郵箱、Fetion、MSN等,但是如果服務 器出現故障而未能及時的解決,Nagios就會不斷的發送告警信息,實在令人頭疼。現在用如下方法可以解決Nagios的告警次數問題。
vi escalations.cfg
escalations有自動調整;不斷增加; 逐步上升等意思,本身配置文件的功能是當服務在某一告警次數前沒有恢復,告警頻率周期將會縮短,同時將告警信息發送至指定聯系人。
其內容為:
define hostescalation{
host_name WWW-Server //被監控主機名稱,與Hosts.cfg中一致
first_notification 4 // 第n條信息起,改變頻率間隔
last_notification 0 // 第n條信息起,恢復頻率間隔
notification_interval 30 // 通知間隔(分)
contact_groups sysadmin
}
說明:從第4條告警信息起至服務器恢復前,告警信息發送至sysadmin組下的聯系人,告警間隔為30分鍾1條信息。
define serviceescalation{
host_name WWW-Server //被監控主機名稱,與Hosts.cfg中一致
service_description Check_HTTP,Check_Jetty //被監控服務名稱,與Services.cfg中一致
first_notification 4
last_notification 0
notification_interval 30
contact_groups nt-admins,managers,everyone
}
保存
修改nagios.cfg
vi nagios.cfg
添加:
cfg_file=/etc/nagios/objects/escalations.cfg
檢查nagios配置文件是否正確
/usr/sbin/nagios -v /etc/nagios/nagios.cfg
重新啟動nagios服務:
service nagios restart
測試:
服務器啟動后停掉被監控測試機的相應服務,確認告警信息是否按照設置發送至不同信箱
總結
escalations這個功能官方給的定義是notification的擴充,使notification變得更加靈活,方便。文中我使用的方法算是 耍了個小聰明,將第四條告警信息后的所有信息全部發送至我公司郵箱直至服務器恢復(recovery的信息還是會發送至手機的),從而實現限制告警信息發 送至手機的條數。這樣,用Escalations限制Nagios報警次數的功能就成功實現了。