Nagios 配置指南
Nagios很好很強大,Nagios配置過程也非常簡單。
圖-Nagios
配置是nagios最復雜的部分,它涉及到多個文件的配置,為了方便描述,這里逐個的進行配置。
一、apache 配置。
我們分兩個步驟來完成這個配置。第一步是修改apache的配置文件httpd.conf,這里的文件路徑是 /usr/local/apache/conf/httpd.conf 。把apache的運行用戶[1]和運行組改成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 //驗證文件路徑
- 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 //驗證文件路徑
- Require valid-user
上述文本塊的作用是對nagios的目錄進行用戶驗證,只有合法的授權用戶才可以訪問nagios的頁面文件。第二步是生成用戶驗證文件:只要執行命令 /usr/local/apache/bin/htpasswd –c /usr/local/nagios/etc/htpasswd sery ,就會生成web的合法訪問用戶sery;命令交互執行,需要輸入2次密碼,然后就在文件/usr/local/nagios/etc/htpasswd寫入一行-第一個字段是剛生成的用戶名,第二個是加密后的密碼,如果還要添加更多的用戶,執行命令 htpasswd 就不需要選項 “-c”,否則就會覆蓋所有已經生成的行。
配置完成后,執行/usr/local/apache/bin/apachctl –t 檢查apache配置文件是否有語法錯誤,無誤后用/usr/local/apache/bin/apachctl start & 把apache啟動,然后從另外的機器的瀏覽器輸入nagios 的訪問地址(如:[url]http://ip/nagios[/url]),如果正常,將出現下圖的登錄驗證窗口等待用戶輸入:

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

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

#p#
千辛萬苦,終于把這些配置給做好保存,現在幾乎有點迫不及待了,運行程序/usr/local/nagios –v /usr/local/nagios/etc/nagios.cfg來檢查所有配置文件的正確性。如果十分幸運的話,運行完畢將在輸出尾部出現
- Total Warnings: 0
- Total Errors: 0
- Things look okay - No serious problems were detected during the pre-flight check
這樣的情況,大功告成;但我卻沒有這么幸運,修改了好多個地方才成功。不過值得慶幸的是,這個校驗的錯誤報告時非常有用的(不象有的系統的幫助文檔中看不中用)。看我故意設置的一個錯誤產生的輸出:
- [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)
它告訴我配置文件在什么位置產生錯誤(實際上我故意在配置文件里加了一個注釋符號來測試)。驗證通過以后,就可以執行命令/usr/local/nagios –d /usr/local/nagios/etc/nagios.cfg 把nagios作為守護進程。然后用ps –aux | grep nagios 看進程是否處于運行狀態。到這一步,nagios服務基本上算是配置完畢。做hosts.cfg、services.cfg等配置時,可以運用一些小技巧來減少出錯的概率:如先定義少許的主機、服務,待校驗無誤后再追加。
通過文章詳細的描述,我們都應該學會nagios配置,為自己的系統保駕護航!
【編輯推薦】
- Nagios配置之準備工作
- Nagios 安裝三部曲
- Nagios網絡監控工作原理
- Nagios 簡介與功能
- Nagios Sendmail無法發送mail郵件的解決方法
- Nagios中告警郵件如何處理 Sendmail服務的配置