著名的開源服務(wù)監(jiān)系統(tǒng)nagios擁有強(qiáng)大的功能,可謂服務(wù)器監(jiān)控之神。它的功能之一就是故障告警。一旦出現(xiàn)問題,它可以第一時(shí)間通知工作人員。那么如此強(qiáng)大的告警提醒功能如果出現(xiàn)了問題,要如何定位問題?配置文檔中的相關(guān)參數(shù)又表示什么意義呢?下面我會(huì)逐個(gè)向大家介紹。
問題闡述:無法發(fā)送告警提醒信息(email、傳真、短信等)
解決方法:順藤摸瓜,根據(jù)告警提醒功能運(yùn)作的原理,一層一層去檢查設(shè)置。
ps:如果你還沒有設(shè)置你的告警,也可以順著我的敘述來設(shè)置你的告警 ^-^
(1)所有提醒任務(wù)首先要查看hosts.cfg或者services.cfg,在這兩個(gè)文件中有如下幾個(gè)參數(shù)關(guān)系到提醒:
notifications_enabled : 是否開啟提醒功能。1為開啟,0為禁用。注,一般,這個(gè)選項(xiàng)會(huì)在主配置文件(nagios.cfg)中定義,效果相同。
contact_groups: 定義接受提醒的聯(lián)系人組,如果hosts.cfg文件中所有的條件都符合,那么提醒任務(wù)將會(huì)繼續(xù)檢查contactgroup.cfg文件。
notification_interval: 重復(fù)發(fā)送提醒信息的最短間隔時(shí)間。默認(rèn)間隔時(shí)間是60分鐘。如果這個(gè)值設(shè)置為0,將不會(huì)發(fā)送重復(fù)提醒。
notification_period: 發(fā)送提醒的時(shí)間段。非常重要的主機(jī)(服務(wù))我定義為7×24,一般的主機(jī)(服務(wù))就定義為上班時(shí)間。如果不在定義的時(shí)間段內(nèi),無論什么問題發(fā)生,都不會(huì)發(fā)送提醒。
notification_options: 這個(gè)參數(shù)定義了發(fā)送提醒包括的情況:d = 狀態(tài)為DOWN, u = 狀態(tài)為UNREACHABLE
, r = 狀態(tài)恢復(fù)為OK , f =
flapping。,n=不發(fā)送提醒。
綜上,如果要提醒信息順利通過hosts.cfg文件,并且發(fā)出提醒的話,要滿足:
notifications_enabled
值為1
contact_groups 的組已經(jīng)定義正確。見(3)
notification_period 定義的時(shí)間段包括出問題的時(shí)間,檢查方法如見(2)
notification_options 定義的包括需要提醒的狀態(tài)改變。
(2)檢查timeperiod的配置,一般在主配置文件中,或者在timeperiod.cfg等配置文件中可以找到:
define timeperiod {
timeperiod_name 24x7
alias 24 Hours A Day, 7 Days A Week
sunday 00:00-24:00
monday 00:00-24:00
tuesday 00:00-24:00
wednesday 00:00-24:00
thursday 00:00-24:00
friday 00:00-24:00
saturday 00:00-24:00
} |
這個(gè)配置就是定義了一個(gè)名字是"24×7"的時(shí)間段,包括從周一到周日中每天的24小時(shí)。這個(gè)時(shí)間段里,系統(tǒng)會(huì)將故障告警信息發(fā)送給聯(lián)系人。
(3)檢查contactgroup.cfg的配置
define contactgroup{
contactgroup_name
novell-admins
alias Novell
Administrators
members
jdoe,rtobert,tzach
} |
此配置定義了一個(gè)名字叫 novell-admins 的聯(lián)系人組,包括成員 jdoe,rtobert,tzach 等三個(gè)人。你要確定(1)中contact_groups 的值在這里有定義。
(4)要檢查各個(gè)聯(lián)系人的配置,就要查看contacts.cfg文件:
define contact{
contact_name jdoe
alias John Doe
service_notification_period
24x7
host_notification_period
24x7
service_notification_options
w,u,c,r
host_notification_options
d,u,r
service_notification_commands
notify-by-email
host_notification_commands
host-notify-by-email
email
jdoe@localhost.localdomain
pager
555-5555@pagergateway.localhost.localdomain
address1
xxxxx.xyyy@icq.com
address2 555-555-5555
} |
這個(gè)配置文件例子頂一了一個(gè)jdoe的聯(lián)系方式和另外一些參數(shù)。注意這里的參數(shù)也可能會(huì)造成提醒信息沒有發(fā)送。email、pager、address分別對應(yīng)該聯(lián)系人的email地址、傳真地址、其他地址等等。這里解釋一下其他相關(guān)的參數(shù):
host_notification_period: 主機(jī)類提醒發(fā)送時(shí)間。定義主機(jī)類提醒發(fā)給該聯(lián)系人的時(shí)間段。在hosts.cfg中已經(jīng)定義了一個(gè)notification_period,那個(gè)定義是是定義所有該主機(jī)需要提醒的人接受提醒的時(shí)間段。這里的這個(gè)時(shí)間段則是說明這個(gè)人接受提醒信息的時(shí)間段,也就是說提醒發(fā)送的時(shí)間必須同時(shí)滿足主機(jī)配置文件和此配置文件中的時(shí)間段才會(huì)正常發(fā)送給聯(lián)系人jdoe。這個(gè)參數(shù)對于那些24小時(shí)3班導(dǎo)的人,或者10點(diǎn)之后起床的老板,是很有用的。
service_notification_period: 這個(gè)參數(shù)類似于host_notification_period,不多說了。
host_notification_commands: 這個(gè)參數(shù)說明發(fā)送主機(jī)提醒信息的命令。呵呵,如果以上的配置都沒有問題,但是沒有接受到提醒的話,要留意這里!
service_notification_commands: 這個(gè)參數(shù)說明發(fā)送服務(wù)提醒信息的命令。
host_notification_options:定義接受提醒的主機(jī)狀態(tài)改變:d = DOWN , u = UNREACHABLE, r=UP or OK, f = flapping,n =什么都不發(fā)送。
service_notification_options: 定義接受提醒的服務(wù)狀態(tài)改變。參數(shù)意義同host_notification_options。
(5)小結(jié)。根據(jù)以上的分析,如果關(guān)于服務(wù)狀態(tài)改變、提醒信息發(fā)送時(shí)間段、聯(lián)系人的聯(lián)系地址等都沒有問題,那么可能的問題就是發(fā)送提醒信息的命令出現(xiàn)問題。查看這些命令之前,請確定nagios系統(tǒng)的服務(wù)器上有mail或sendmail等發(fā)送郵件的軟件包,且工作正常。如果你有一些短信貓,或者用了其他的提醒腳本,請確定其工作正常。
另外,nagios還包括一個(gè)名為 Notification Escalations 的模塊,用來擴(kuò)展已經(jīng)很強(qiáng)大的提醒體系。
舉例說明一下這個(gè)模塊的功能:你定義一臺主機(jī)的提醒,首次發(fā)現(xiàn)問題不提醒,直到連續(xù)三次重復(fù)出現(xiàn)問題時(shí),主機(jī)管理員A會(huì)收到提醒,然后過了一段時(shí)間,問題還沒有修復(fù),這是又繼續(xù)發(fā)送第4次提醒給A(此時(shí)A共收到2次提醒),在第五次提醒的時(shí)候,就發(fā)給了管理員B,……,在第十次提醒的時(shí)候就發(fā)給了管理員的老板……如果你用到這個(gè)模塊,也需要檢查其是否配置正確。
(6)提醒命令
一般的提醒命令名稱如 xxx-notify-by-xxx,他只是一個(gè)名字,具體是用什么來實(shí)現(xiàn)這個(gè)提醒的具體工作的,要查看command.cfg文件中,關(guān)于此命令的定義,舉個(gè)例子:
# 'notify-by-email' command definition
define command{
command_name notify-by-email
command_line /usr/bin/printf "%b"
"*****Nagios2.9*****"n"nNotification Type: $NOTIFICATIONTYPE$"n"nService:
$SERVICEDESC$"nHost: $HOSTALIAS$"nAddress: $HOSTADDRESS$"nState:
$SERVICESTATE$"n"nDate/Time: $LONGDATETIME$"n"nAdditional
Info:"n"n$SERVICEOUTPUT$" | /bin/mail -s "** $NOTIFICATIONTYPE$ alert
- $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$ }
|
上例中,定義了一個(gè)名字為"
notify-by-email"的命令,這個(gè)命令的內(nèi)容,就是
command_line對應(yīng)的命令行定義的。如果你是用獨(dú)立的腳本來完成提醒功能,可能會(huì)類似下面的情況:
#host-notify-by-sms
define command {
command_name host-notify-by-sms
command_line /nagios/sms.sh
}
|
posted on 2009-05-13 13:52
Blog of JoJo 閱讀(264)
評論(0) 編輯 收藏 所屬分類:
每日一記