Nagios 配置指南
Nagios很好很強(qiáng)大,Nagios配置過程也非常簡單。
圖-Nagios
配置是nagios最復(fù)雜的部分,它涉及到多個(gè)文件的配置,為了方便描述,這里逐個(gè)的進(jìn)行配置。
一、apache 配置。
我們分兩個(gè)步驟來完成這個(gè)配置。第一步是修改apache的配置文件httpd.conf,這里的文件路徑是 /usr/local/apache/conf/httpd.conf 。把a(bǔ)pache的運(yùn)行用戶[1]和運(yùn)行組改成nagios,往下把下面的行追加到文件httpd.conf的末尾:
- #setting for nagios
- ScriptAlias /nagios/cgi-bin /usr/local/nagios/sbin
- //Cgi文件所在目錄
- AuthType Basic
- Options ExecCGI
- AllowOverride None
- Order allow,deny
- Allow from all
- AuthName "Nagios Access"
- AuthUserFile /usr/local/nagios/etc/htpasswd //驗(yàn)證文件路徑
- Require valid-user
- Alias /nagios /usr/local/nagios/share
- //nagios頁面文件目錄
- AuthType Basic
- Options None
- AllowOverride None
- Order allow,deny
- Allow from all
- AuthName "nagios Access"
- AuthUserFile /usr/local/nagios/etc/htpasswd //驗(yàn)證文件路徑
- Require valid-user
上述文本塊的作用是對(duì)nagios的目錄進(jìn)行用戶驗(yàn)證,只有合法的授權(quán)用戶才可以訪問nagios的頁面文件。第二步是生成用戶驗(yàn)證文件:只要執(zhí)行命令 /usr/local/apache/bin/htpasswd –c /usr/local/nagios/etc/htpasswd sery ,就會(huì)生成web的合法訪問用戶sery;命令交互執(zhí)行,需要輸入2次密碼,然后就在文件/usr/local/nagios/etc/htpasswd寫入一行-第一個(gè)字段是剛生成的用戶名,第二個(gè)是加密后的密碼,如果還要添加更多的用戶,執(zhí)行命令 htpasswd 就不需要選項(xiàng) “-c”,否則就會(huì)覆蓋所有已經(jīng)生成的行。
配置完成后,執(zhí)行/usr/local/apache/bin/apachctl –t 檢查apache配置文件是否有語法錯(cuò)誤,無誤后用/usr/local/apache/bin/apachctl start & 把a(bǔ)pache啟動(dòng),然后從另外的機(jī)器的瀏覽器輸入nagios 的訪問地址(如:[url]http://ip/nagios[/url]),如果正常,將出現(xiàn)下圖的登錄驗(yàn)證窗口等待用戶輸入:

輸入用htpasswd創(chuàng)建的用戶名和密碼測(cè)試一下,沒有問題的話,進(jìn)行下一步配置操作。
#p#
二、nagios配置
剛安裝完成的nagios,其配置文件的目錄是/usr/local/nagios/etc,下圖是其etc目錄的文件:

先把這些文件改名,如 cgi.cfg-sample改成cgi.cfg ,用命令cp cgi.cfg-sample cgi.cfg …依樣把余下的幾個(gè)*.cfg-sample都復(fù)制成*.cfg文件。從nagios2.6版開始,不用修改配置文件localhost.cfg就可以直接運(yùn)行../bin/nagios –v nagios.cfg驗(yàn)證程序是否能正常運(yùn)行(nagios2.5及以前版本的最小運(yùn)行的配置文件是minimal.cfg,但需要修改這個(gè)文件多處才能驗(yàn)證成功)。當(dāng)然,我們不能指望這個(gè)最小的配置文件能夠滿足實(shí)際的需求,因此,需要對(duì)現(xiàn)有的配置文件進(jìn)行修改,其次增加自定義的一些配置文件。這里,我們分兩步進(jìn)行:先修改配置文件再增添自定義文件。
(一) 修改配置文件
Nagios的主配置文件是nagios.cfg,我們就從這個(gè)文件開始修改。用vi編輯nagios.cfg,注釋行 #cfg_file=/usr/local/nagios/etc/localhost.cfg[2],然后把下面幾行的注釋去掉:
- cfg_file=/usr/local/nagios/etc/contactgroups.cfg //聯(lián)系組配置文件路徑
- cfg_file=/usr/local/nagios/etc/contacts.cfg //聯(lián)系人配置文件路徑
- cfg_file=/usr/local/nagios/etc/hostgroups.cfg //主機(jī)組配置文件路徑
- cfg_file=/usr/local/nagios/etc/hosts.cfg //主機(jī)配置文件路徑
- cfg_file=/usr/local/nagios/etc/services.cfg //服務(wù)配置文件路徑
- cfg_file=/usr/local/nagios/etc/timeperiods.cfg //監(jiān)視時(shí)段配置文件路徑
改check_external_commands=0為check_external_commands=1 .這行的作用是允許在web界面下執(zhí)行重啟nagios、停止主機(jī)/服務(wù)檢查等操作。把command_check_interval的值從默認(rèn)的1改成command_check_interval=10s(根據(jù)自己的情況定這個(gè)命令檢查時(shí)間間隔,不要太長也不要太短)。主配置文件要改的基本上就是這些,通過上面的修改,發(fā)現(xiàn)/usr/local/nagios/etc并沒有文件hosts.cfg等一干文件,怎么辦?稍后手動(dòng)創(chuàng)建它們。
第二個(gè)要修改的配置文件是cgi.cfg,它的作用是控制相關(guān)cgi腳本。先確保use_authentication=1。曾看過不少的文章,都是建議把use_authentication的值設(shè)置成”0”來取消驗(yàn)證,這是一個(gè)十分糟糕的想法。接下來修改default_user_name=sery ,再后面的修改在下表列出:
- authorized_for_system_information=nagiosadmin,sery
- authorized_for_configuration_information=nagiosadmin,sery
- authorized_for_system_commands=sery //多個(gè)用戶之間用逗號(hào)隔開
- authorized_for_all_services=nagiosadmin,sery
- authorized_for_all_hosts=nagiosadmin,sery
- authorized_for_all_service_commands=nagiosadmin,sery
- authorized_for_all_host_commands=nagiosadmin,sery
那么上述用戶名打那里來的呢?是執(zhí)行命令 /usr/local/apache/bin/htpasswd –c /usr/local/nagios/etc/htpasswd sery 所生成的,這個(gè)要注意,不能隨便加沒有存在的驗(yàn)證用戶,為了安全起見,不要添加過多的驗(yàn)證用戶。
第3個(gè)修改的配置文件是misccommands.cfg,這個(gè)文件的主要功能是用來發(fā)送報(bào)警短信和報(bào)警郵件,對(duì)其的修改如下所示:
- #host-notify-by-sms //發(fā)送短信報(bào)警
- define command {
- command_name host-notify-by-sms
- command_line /usr/local/bin/sms_send "Host $HOSTSTATE$ alert for $HOSTNAME$! on '$DATETIME$' " $CONTACTPAGER$
- }
- #service notify by sms //發(fā)送短信報(bào)警
- define command {
- command_name service-notify-by-sms
- command_line /usr/local/bin/sms_send "'$HOSTADDRESS$' $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$" $CONTACTPAGER$
- }
主機(jī)和服務(wù)的郵件報(bào)警通知已經(jīng)在文件中,不須更改。也可以把短信和郵件報(bào)警通知這些配置塊寫到文件commands.cfg中,效果是一樣的。
#p#
(二)增加新的配置文件
先創(chuàng)建簡單的配置文件timeperiods.cfg,其內(nèi)容如下:
- 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è)文件的定義明晰易懂,不多做說明。另建議7X24小時(shí)監(jiān)控。
第二個(gè)手動(dòng)創(chuàng)建的配置文件是 contacts.cfg,其格式如下:
define contact {
contact_name sa //不要有空格
alias system administrator
service_notification_period 24x7
host_notification_period 24x7
service_notification_options w,u,c,r
host_notification_options d,u,r
service_notification_commands service-notify-by-sms,service-
notify-by-email //這個(gè)命令讀配置文件miscommands.cfg
host_notification_commands host-notify-by-email,host-noti
fy-by-sms //這個(gè)命令讀配置文件miscommands.cfg
email sery@163.com
pager 13333333333 //手機(jī)號(hào),收?qǐng)?bào)警短信
} //不要把這個(gè)符號(hào)寫掉了
- define contact {
- contact_name sery
- alias system administrator
- service_notification_period 24x7
- host_notification_period 24x7
- service_notification_options w,u,c,r
- host_notification_options d,u,r
- service_notification_commands service-notify-by-sms,service-
- notify-by-email
- host_notification_commands host-notify-by-email,host-noti
- fy-by-sms
- email sery@sohu.com
- pager 13312345678
- }
上面的文件定義了2個(gè)聯(lián)系人,如果有更多聯(lián)系人的話,照這個(gè)格式在后面追加即可。服務(wù)通知選項(xiàng)(service_notification_options)與主機(jī)通知選項(xiàng)(host_notification_options)的幾個(gè)選項(xiàng)在這里說明一下:w-warning , u-unknown,c-critical,r-recovery;d-down,u-unreachable,注意一下,主機(jī)報(bào)警和服務(wù)報(bào)警有些差異。
#p#
緊接著的第三個(gè)手動(dòng)創(chuàng)建的配置文件是contactgroups.cfg文件,這個(gè)文件是依照上一個(gè)文件contacts.cfg來的,contactgroups文件相對(duì)簡單一些,其格式如下:
- define contactgroup {
- contactgroup_name sagroup //不要用空格
- alias system administrator group
- members sa,sery //本例有2個(gè)成員
- }
多個(gè)成員之間用逗號(hào)做分界符,如果有更多的聯(lián)系組,就依相同的格式在文件中追加余下的組。
關(guān)鍵的角色終于登場(chǎng),這就是配置文件hosts.cfg。下面是我定義的兩個(gè)主機(jī)的基本樣式:
- #define monitor host
- # Wangjing IDC servers #
define host {
host_name nagios-server
alias nagios server
address 61.x..x.49
contact_groups sagroup //多個(gè)聯(lián)系組用逗號(hào)分隔,數(shù)據(jù)來源于contactgroups.cfg
check_command check-host-alive
max_check_attempts 5
notification_interval 10 //值可調(diào),大小什么值合適需自己測(cè)定
notification_period 24x7
notification_options d,u,r
}
define host {
host_name 24-25
alias server 24-25
address 202.X.24.25
contact_groups sagroup
check_command check-host-alive //down機(jī)就發(fā)報(bào)警通知
max_check_attempts 5
notification_interval 10
notification_period 24x7
notification_options d,u,r
}
更多的主機(jī)依此格式逐個(gè)追加進(jìn)來。小技巧,如果是連續(xù)的ip段,最好自己寫個(gè)腳本生成hosts.cfg文件,為了以后維護(hù)方便,盡可能在文件中使用易讀的注釋(如本例# Wangjing IDC servers #)。
再一個(gè)重量級(jí)的配置文件是services.cfg,沒有這個(gè)文件,什么監(jiān)控也沒用。下面給出一個(gè)樣式文件:
#service definition
###########################################
# Wangjing IDC servers service for host-live #
###########################################
define service {
host_name nagios-server //來源:hosts.cfg
service_description check-host-alive
check_period 24x7
max_check_attempts 4
normal_check_interval 3
retry_check_interval 2
contact_groups sagroup //來源:contactgroups.cfg
notification_interval 10
notification_period 24x7
notification_options w,u,c,r
check_command check-host-alive //檢查主機(jī)是否存活
}
define service {
host_name 74-210
service_description check_tcp 80
check_period 24x7
max_check_attempts 4
normal_check_interval 3
retry_check_interval 2
contact_groups sagroup
notification_interval 10
notification_period 24x7
notification_options w,u,c,r
check_command check_tcp!80 //檢查tcp 80端口服務(wù)是否正常
}
書寫時(shí)要注意的是,check_tcp與要監(jiān)控的服務(wù)端口之間要用”!”做分隔符。如果服務(wù)太多,以應(yīng)該考慮用腳本來生成。
主機(jī)組配置文件hostgroups.cfg,這是一個(gè)可選的項(xiàng)目,它建立在文件hosts之上,其格式如下:
- define hostgroup {
- hostgroup_name sa-servers
- alias sa servers
- members nagios-server,24-25,24-26 //用逗號(hào)間隔多個(gè)主機(jī)
- }
多個(gè)主機(jī)組依上面的格式逐個(gè)追加上去。后面給一個(gè)主機(jī)組的截圖。

#p#
千辛萬苦,終于把這些配置給做好保存,現(xiàn)在幾乎有點(diǎn)迫不及待了,運(yùn)行程序/usr/local/nagios –v /usr/local/nagios/etc/nagios.cfg來檢查所有配置文件的正確性。如果十分幸運(yùn)的話,運(yùn)行完畢將在輸出尾部出現(xiàn)
- Total Warnings: 0
- Total Errors: 0
- Things look okay - No serious problems were detected during the pre-flight check
這樣的情況,大功告成;但我卻沒有這么幸運(yùn),修改了好多個(gè)地方才成功。不過值得慶幸的是,這個(gè)校驗(yàn)的錯(cuò)誤報(bào)告時(shí)非常有用的(不象有的系統(tǒng)的幫助文檔中看不中用)??次夜室庠O(shè)置的一個(gè)錯(cuò)誤產(chǎn)生的輸出:
- [root@netmonitor nagios]# bin/nagios -v etc/nagios.cfg
- Nagios 2.5
- Copyright (c) 1999-2006 Ethan Galstad ([url]http://www.nagios.org[/url])
- Last Modified: 07-13-2006
- License: GPL
- Reading configuration data...
- Error: Could not find any host matching 'nagios-server'
- Error: Could not expand member hosts specified in hostgroup (config file '/usr/local/nagios/etc/hostgroups.cfg', starting on line 2)
它告訴我配置文件在什么位置產(chǎn)生錯(cuò)誤(實(shí)際上我故意在配置文件里加了一個(gè)注釋符號(hào)來測(cè)試)。驗(yàn)證通過以后,就可以執(zhí)行命令/usr/local/nagios –d /usr/local/nagios/etc/nagios.cfg 把nagios作為守護(hù)進(jìn)程。然后用ps –aux | grep nagios 看進(jìn)程是否處于運(yùn)行狀態(tài)。到這一步,nagios服務(wù)基本上算是配置完畢。做hosts.cfg、services.cfg等配置時(shí),可以運(yùn)用一些小技巧來減少出錯(cuò)的概率:如先定義少許的主機(jī)、服務(wù),待校驗(yàn)無誤后再追加。
通過文章詳細(xì)的描述,我們都應(yīng)該學(xué)會(huì)nagios配置,為自己的系統(tǒng)保駕護(hù)航!
【編輯推薦】
- Nagios配置之準(zhǔn)備工作
- Nagios 安裝三部曲
- Nagios網(wǎng)絡(luò)監(jiān)控工作原理
- Nagios 簡介與功能
- Nagios Sendmail無法發(fā)送mail郵件的解決方法
- Nagios中告警郵件如何處理 Sendmail服務(wù)的配置