作為系統管理者,我最擔心那些重要的線上系統在我不知情的情況下停機或者停止網絡服務,而且那些發生故障的服務或主機有時候可能要好長一段時間才知道(這種情況多發生在節假日),隻要一到節假日,很多系統管理者就緊張不已。要改變這種被動局面,我在這裡推薦網絡監控軟體Nagios,個人認為它最大的好處是可以發故障報警短信—隻要Nagios監控的對象發生故障,系統就會自動發送短信到手機上。下面摘錄Nagios官方網站的描述:
Nagios is an open source host, service and network monitoring program. Who uses it? Lots of people, including many big companies and organizations:Nagios是一個用來監控主機、服務和網絡的開放源碼軟體,很多大的公司或組織都在使用它。在我來到現在這個機構之前,已經有一個Netsaint(nagios的老版本)在監控那些線上伺服器,但是不完善,後來我立了一個項,部署了新的監控平台nagios把所有的線上伺服器都監控起來了;到目前為止,監控了413個主機和754個服務。
雖然Nagios十分受用,但配置起來确是麻煩,根據其讀音我給它取可一個中文名-難夠死。基于這樣的原因,我将盡可能詳細地向大家講述我用Nagios的過程以及心得,希望對初學者有所幫助。
(一) 安裝所需軟體
一、安裝Nagios
Nagios可以運作在各種版本的linux及主流的unix環境,我試過的環境有Redhat linux,Centos,Debian等。在實際的運維中,我是以centos 4來部署nagios的。安裝完作業系統之後,需要把多餘的服務都關掉,隻留sshd這個服務。然後用wget下載下傳源碼包nagios-2.6.tar.gz和httpd-2.2.0.tar.gz。接下來先分别安裝軟體,過程如下:
1、 解壓nagios. tar zxvf nagios-2.6.tar.gz
2、 配置nagios. cd nagios ; ./configure –prefix=/usr/local/nagios
3、 編譯nagios. make all
4、 安裝nagios。與别的軟體安裝稍有不同,nagios的安裝要好幾步才能完成。第一步執行make install安裝主要的程式、CGI及HTML檔案,第二步執行 make install-commandmode 給外部指令通路nagios配置檔案的權限,第三步執行 make install-config 把配置檔案的例子複制到nagios的安裝目錄。按照安裝向導的提示,其實這裡還有一個 make install-init的步驟,它的作用是把nagios做成一個運作腳本,使nagios随系統開機啟動,這是一個很友善的措施。但本人是一個喜歡把問題簡化的人,沒有執行這樣的操作。
5、 驗證程式是否被正确安裝。切換目錄到安裝路徑(這裡是/usr/local/nagios),看是否存在 etc、bin、 sbin、 share、 var這五個目錄,如果存在則可以表明程式被正确的安裝到系統了。後表是五個目錄功能的簡要說明:
bin
Nagios執行程式所在目錄,這個目錄隻有一個檔案nagios
etc
Nagios配置檔案位置,初始安裝完後,隻有幾個*.cfg-sample檔案
sbin
Nagios Cgi檔案所在目錄,也就是執行外部指令所需檔案所在的目錄
Share
Nagios網頁檔案所在的目錄
Var
Nagios日志檔案、spid 等檔案所在的目錄
二、安裝nagios的插件
沒有插件,nagios将什麼作用也沒有,插件也是nagios擴充功能的強大武器,除了下載下傳常用的插件外,我們還可以根據實際要求編寫自己的插件。Nagios的插件nagios-plugins-1.4.5在[url]www.nagios.org[/url]上可以找到,接着我們用wget下載下傳它。注意:插件與nagios之間的版本關聯不大,不一定非得用nagios-plugins-1.4.5這個版本。下載下傳完成後,安裝它是很簡單的:先執行配置 ./configure –prefix=/usr/local/nagios ,接着編譯安裝 make ; make install即可。這裡需要說明一下的是在配置過程指定的安裝路徑是/usr/local/nagios,而不是/usr/local/nagios-plus,安裝完成後,将在目錄/usr/local/nagios生成目錄libexec(裡面有很多檔案),這正是nagios所需要的。
三、安裝web伺服器apache
Web服務不是nagios所必須的,但是如果nagios沒有web,檢視監控對象的狀态将是非常費事和沒有趣味的事情(隻有通過檢視nagios的日志來判斷狀态)。我不願幹特無聊的事,是以就花少許時間把web安裝一下。
在unix/linux世界,apache是web伺服器的首選對象,其下載下傳網站為[url]www.apache.org[/url] 。建議下載下傳源碼。因為我們不需要很複雜的web功能,是以簡單的執行一下幾個步驟就可以正确的把apache安裝到系統:
1、 解包、配置:tar zxvf httpd-2.2.0.tar.gz ; cd httpd-2.2.0 ; ./configure –prefix=/usr/local/apache 。
2、 編譯安裝: make ; make install 。
安裝完成後,執行指令 ./usr/local/apache/bin/apachectl –t 檢查一下apache是否正确安裝。
(二)、配置前的處理
最主要的工作是建立nagios使用者及其屬組,讓nagios的運作使用者為nagios而不是root。再把目錄/usr/local/nagios的屬主設定為nagios,以保證系統的安全。Nagios可以以root使用者運作,但并不推薦這樣做。用下面的步驟來完成上述過程:
1、添加系統帳戶nagios: useradd nagios 就很容易的把使用者群組nagios添加到系統。有的類型的linux發行版添加使用者群組要麻煩一些-需要手動添加組,然後再執行 useradd –g nagios nagios這樣的操作。在實際的運用場景,nagios使用者并沒有必要作為系統使用者來登入linux系統,是以可以不必設定nagios的使用者密碼,甚至可以把nagios使用者的登入shell設定成/bin/false。
2、更改目錄屬組:chown –R nagios.nagios /usr/local/nagios 。請注意,有的unix/linux的版本使用者和屬組分隔符号不是“.”,可能會是這樣的形式 chown –R nagios:nagios /usr/local/nagios 。
3、sendmail。看看sendmail是否正常運作?我們需要使用sendmail來發送故障報警資訊,是以這個包必須能夠正常工作。Sendmail分為伺服器和用戶端兩部分,有2種發送報警郵件的方式:(1)nagios所在的機器通過sendmail用戶端程式把郵件發送到專門的郵件伺服器,再由郵件伺服器把消息發送到使用者郵箱。(2)郵件用戶端和伺服器端就用nagios所在系統sendmail。第一種方式用起來非正常範,但更麻煩,例如需要做位址解析、修改郵件伺服器的配置;另外還有一個問題-它還依賴别的系統,增加了故障點和複雜度。第二種方法十分簡單,隻需啟動sendmail服務即可,而且它不再依賴于别的系統和服務。在我工作的實際場景,這兩種方法都使用,用專門的郵件伺服器會有發送延遲的情況(因為郵件伺服器要處理很多其他使用者郵件的收發);而直接用sendmail做伺服器和用戶端就異常簡單和友善了。非常幸運的是,幾乎所有的linux/unix發行版都預設安裝sendmail,費了這麼多筆墨,其實就做一個動作-把sendmail服務運作起來。
4、手機短信發送工具。我現在的公司是sp,有自己的短信通道,直接把發送短信的用戶端程式sms_send拷貝到目錄/usr/local/bin/下。如果沒有短信下發的網關通道,那怎麼辦呢?網絡上有很多短信發送的用戶端程式,很有名的就是smsclient,把它下載下傳下來,解包後安裝。不要忘記購買手機modem和手機卡,modem隻支援SIM卡而不支援cdma。安裝完smsclient軟體和硬體modem後,測試一下是否正常。如果沒有modem又怎麼辦?辦法還是有的:讓你的手機号可以接受郵件,這需要你去營業廳開通這項功能。短信報警功能是最有用的功能,我們不可能成天盯着監視螢幕,也不可能成天接受電子郵件,但我們的手機卻可以24小時線上,隻要被監控對象發生故障,馬上就可以收到故障報警短信。以前,我很怕放長假,因為最擔心關鍵的裝置或服務在假期出故障而自己不知道,是以放假就變成了值班;想必很多網絡管理者都有類似的經曆。在我動手部署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
<Directory "/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
</Directory>
Alias /nagios /usr/local/nagios/share
<Directory "/usr/local/nagios/share"> //nagios頁面檔案目錄
Options None
AuthName "nagios Access"
上述文本塊的作用是對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建立的使用者名和密碼測試一下,沒有問題的話,進行下一步配置操作。
二、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 //發送短信報警
command_name service-notify-by-sms
command_line /usr/local/bin/sms_send "'$HOSTADDRESS$' $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$" $CONTACTPAGER$
主機和服務的郵件報警通知已經在檔案中,不須更改。也可以把短信和郵件報警通知這些配置塊寫到檔案commands.cfg中,效果是一樣的。
(二)增加新的配置檔案
先建立簡單的配置檔案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 [email protected]
pager 13333333333 //手機号,收報警短信
} //不要把這個符号寫掉了
contact_name sery
notify-by-email
fy-by-sms
email [email protected]
pager 13312345678
上面的檔案定義了2個聯系人,如果有更多聯系人的話,照這個格式在後面追加即可。服務通知選項(service_notification_options)與主機通知選項(host_notification_options)的幾個選項在這裡說明一下:w-warning , u-unknown,c-critical,r-recovery;d-down,u-unreachable,注意一下,主機報警和服務報警有些差異。
緊接着的第三個手動建立的配置檔案是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
host_name 24-25
alias server 24-25
address 202.X.24.25
contact_groups sagroup
check_command check-host-alive //down機就發報警通知
notification_interval 10
更多的主機依此格式逐個追加進來。小技巧,如果是連續的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 //檢查主機是否存活
host_name 74-210
service_description check_tcp 80
contact_groups sagroup
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 //用逗号間隔多個主機
}
多個主機組依上面的格式逐個追加上去。後面給一個主機組的截圖。
千辛萬苦,終于把這些配置給做好儲存,現在幾乎有點迫不及待了,運作程式/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等配置時,可以運用一些小技巧來減少出錯的機率:如先定義少許的主機、服務,待校驗無誤後再追加。
三、驗收