看我出招之:我用Nagios(技術細節)

看我出招之:我用Nagios(技術細節)
 
做爲系統管理員,我最擔憂那些重要的在線系統在我不知情的狀況下停機或者中止網絡服務,並且那些發生故障的服務或主機有時候可能要好長一段時間才知道(這種狀況多發生在節假日),只要一到節假日,不少系統管理員就緊張不已。要改變這種被動局面,我在這裏推薦網絡監控軟件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的過程以及心得,但願對初學者有所幫助。
 
(一)  安裝所需軟件
 
1、安裝Nagios
Nagios能夠運行在各類版本的linux及主流的unix環境,我試過的環境有Redhat linux,Centos,Debian等。在實際的運維中,我是以centos 4來部署nagios的。安裝完操做系統以後,須要把多餘的服務都關掉,只留sshd這個服務。而後用wget下載源碼包nagios-2.6.tar.gz和httpd-2.2.0.tar.gz。接下來先分別安裝軟件,過程以下:
一、  解壓nagios. tar zxvf nagios-2.6.tar.gz
二、  配置nagios. cd nagios ; ./configure –prefix=/usr/local/nagios
三、  編譯nagios. make all
四、 安裝nagios。與別的軟件安裝稍有不一樣,nagios的安裝要好幾步才能完成。第一步執行make install安裝主要的程序、CGI及HTML文件,第二步執行 make install-commandmode 給外部命令訪問nagios配置文件的權限,第三步執行 make install-config 把配置文件的例子複製到nagios的安裝目錄。按照安裝嚮導的提示,其實這裏還有一個 make install-init的步驟,它的做用是把nagios作成一個運行腳本,使nagios隨系統開機啓動,這是一個很方便的措施。但本人是一個喜歡把問題簡化的人,沒有執行這樣的操做。
五、 驗證程序是否被正確安裝。切換目錄到安裝路徑(這裏是/usr/local/nagios),看是否存在 etc、bin、 sbin、 share、 var這五個目錄,若是存在則能夠代表程序被正確的安裝到系統了。後表是五個目錄功能的簡要說明:
 
 
bin
Nagios 執行程序所在目錄,這個目錄只有一個文件 nagios
etc
Nagios 配置文件位置,初始安裝完後,只有幾個 *.cfg-sample 文件
sbin
Nagios Cgi 文件所在目錄,也就是執行外部命令所需文件所在的目錄
Share
Nagios 網頁文件所在的目錄
Var
Nagios 日誌文件、 spid 等文件所在的目錄
      
2、安裝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所須要的。
       
 
3、安裝web服務器apache
Web服務不是nagios所必須的,可是若是nagios沒有web,查看監控對象的狀態將是很是費事和沒有趣味的事情(只有經過查看nagios的日誌來判斷狀態)。我不肯幹特無聊的事,因此就花少量時間把web安裝一下。
在unix/linux世界,apache是web服務器的首選對象,其下載網站爲[url]www.apache.org[/url]  。建議下載源碼。由於咱們不須要很複雜的web功能,所以簡單的執行一下幾個步驟就能夠正確的把apache安裝到系統:
一、   解包、配置:tar zxvf httpd-2.2.0.tar.gz ; cd httpd-2.2.0 ; ./configure   –prefix=/usr/local/apache 。
二、   編譯安裝: make ; make install 。
安裝完成後,執行命令 ./usr/local/apache/bin/apachectl –t 檢查一下apache是否正確安裝。
 
(二)、配置前的處理
最主要的工做是建立nagios用戶及其組,讓nagios的運行用戶爲nagios而不是root。再把目錄/usr/local/nagios的屬主設置爲nagios,以保證系統的安全。Nagios能夠以root用戶運行,但並不推薦這樣作。用下面的步驟來完成上述過程:
一、添加系統賬戶nagios: useradd nagios 就很容易的把用戶和組nagios添加到系統。有的類型的linux發行版添加用戶和組要麻煩一些-須要手動添加組,而後再執行 useradd –g nagios nagios這樣的操做。在實際的運用場景,nagios用戶並無必要做爲系統用戶來登陸linux系統,所以能夠沒必要設置nagios的用戶密碼,甚至能夠把nagios用戶的登陸shell設置成/bin/false。
二、更改目錄屬組:chown –R nagios.nagios /usr/local/nagios 。請注意,有的unix/linux的版本用戶和屬組分隔符號不是「.」,可能會是這樣的形式 chown –R nagios:nagios /usr/local/nagios 。
三、sendmail。看看sendmail是否正常運行?咱們須要使用sendmail來發送故障報警信息,因此這個包必須可以正常工做。Sendmail分爲服務器和客戶端兩部分,有2種發送報警郵件的方式:(1)nagios所在的機器經過sendmail客戶端程序把郵件發送到專門的郵件服務器,再由郵件服務器把消息發送到用戶郵箱。(2)郵件客戶端和服務器端就用nagios所在系統sendmail。第一種方式用起來很是規範,但更麻煩,例如須要作地址解析、修改郵件服務器的配置;另外還有一個問題-它還依賴別的系統,增長了故障點和複雜度。第二種方法十分簡單,只需啓動sendmail服務便可,並且它再也不依賴於別的系統和服務。在我工做的實際場景,這兩種方法都使用,用專門的郵件服務器會有發送延遲的狀況(由於郵件服務器要處理不少其餘用戶郵件的收發);而直接用sendmail作服務器和客戶端就異常簡單和方便了。很是幸運的是,幾乎全部的linux/unix發行版都默認安裝sendmail,費了這麼多筆墨,其實就作一個動做-把sendmail服務運行起來。
四、手機短信發送工具。我如今的公司是sp,有本身的短信通道,直接把發送短信的客戶端程序sms_send拷貝到目錄/usr/local/bin/下。若是沒有短信下發的網關通道,那怎麼辦呢?網絡上有不少短信發送的客戶端程序,頗有名的就是smsclient,把它下載下來,解包後安裝。不要忘記購買手機modem和手機卡,modem只支持SIM卡而不支持cdma。安裝完smsclient軟件和硬件modem後,測試一下是否正常。若是沒有modem又怎麼辦?辦法仍是有的:讓你的手機號能夠接受郵件,這須要你去營業廳開通這項功能。短信報警功能是最有用的功能,咱們不可能整天盯着監視屏幕,也不可能整天接受電子郵件,但咱們的手機卻能夠24小時在線,只要被監控對象發生故障,立刻就能夠收到故障報警短信。之前,我很怕放長假,由於最擔憂關鍵的設備或服務在假期出故障而本身不知道,因此放假就變成了值班;想必不少網絡管理員都有相似的經歷。在我動手部署nagios之前,曾經在網上搜索關於nagios配置的文章,發現絕大部分都沒有介紹使用手機短信這個方便的功能,真是遺憾呀!在此,強烈建議啓用nagios的短信故障報警功能。
 
(二)、配置
配置是nagios最複雜的部分,它涉及到多個文件的配置,爲了方便描述,這裏逐個的進行配置。
 
1、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 頁面文件目錄
    AuthType Basic
    Options None
    AllowOverride None
    Order allow,deny
    Allow from all
    AuthName "nagios Access"
    AuthUserFile /usr/local/nagios/etc/htpasswd  // 驗證文件路徑
    Require valid-user
</Directory>
上述文本塊的做用是對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 建立的用戶名和密碼測試一下,沒有問題的話,進行下一步配置操做。
 
2、 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 中,效果是同樣的。
 
(二)增長新的配置文件
先建立簡單的配置文件 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]sery@163.com[/email]
        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                         [email]sery@sohu.com[/email]
        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
       }
 
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  // 用逗號間隔多個主機
         }
多個主機組依上面的格式逐個追加上去。後面給一個主機組的截圖。
 
千辛萬苦,終於把這些配置給作好保存,如今幾乎有點火燒眉毛了,運行程序 /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等配置時,能夠運用一些小技巧來減小出錯的機率:如先定義少量的主機、服務,待校驗無誤後再追加。
 
    3、驗收  
用瀏覽器輸入nagios所在服務器的ip及目錄,如[url]http://61.135.X..X/nagios[/url],再輸驗證所需的用戶名和密碼,就可點擊頁面右邊的相關鏈接來查看各類狀態。關掉某個被nagios監控主機的服務或者拔掉某個服務器的網線,等幾分鐘,點擊超鏈接「Service Detail」觀察頁面狀態看是否有紅色的醒目的報警出現。
 
一下子,就會收到報警短信和報警郵件,而後在把測試全部的服務開啓或把拔下來的網線查上去,片刻後,網頁裏的紅色報警表格消失,手機短信或郵件通知故障恢復。若是你的狀況也這樣,那麼真正大功告成。
 
   Nagios的功能十分強大,在個人項目裏,由於個人需求不一樣而儘量的簡化了nagios而沒有使用代理、更多插件等功能,在一個不超過1000個服務器的網絡規模裏,它工做得很好。若是有更多的服務器,建議使用mysql數據來管理監控對象。在部署nagios的過程當中,我啊、作不少選項做了取捨,更詳細的狀況請參照官方的文檔。
 
 
[1]安全問題
[2]nagios2.5是minimal.cfg.
 
                                               2007-3-15
                                              於福源門悟真閣
相關文章
相關標籤/搜索