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在www.nagios.org 上可以找到,接着我們用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服務器的首選對象,其下載網站爲www.apache.org   。建議下載源碼。因爲我們不需要很複雜的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頁面文件目錄 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 的訪問地址(如:http://ip/nagios ),如果正常,將出現下圖的登錄驗證窗口等待用戶輸入:

 

 

 

輸入用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,但需要修改這個文件多處才能 驗證成功)。

當然,我們不能指望這個最小的配置文件能夠滿足實際的需求,因此,需要對現有的配置文件進行修改,其次增加自定義的一些配置文件。這裏,我們分兩步進行:先修改配置文件再增添自定義文件。

 

1、修改配置文件
Nagios的主配置文件是nagios.cfg,我們就從這個文件開始修改。用vi編輯nagios.cfg,註釋行 #cfg_file=/usr/local/nagios/etc/localhost.cfg[2],然後把下面幾行的註釋去掉:(3.2版本已經將配置文件移至object文件夾,詳情看nagios/etc 下的配置文件)

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中,效果是一樣的。

 

2、增加新的配置文件
先創建簡單的配置文件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 //手機號,收報警短信
        }     //不要把這個符號寫掉了

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 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 } 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 (http://www.nagios.org)
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所在服務器的ip及目錄,如http://61.135.X..X/nagios ,再輸驗證所需的用戶名和密碼,就可點擊頁面右邊的相關連接來查看各種狀態。關掉某個被nagios監控主機的服務或者拔掉某個服務器的網線,等幾分鐘,點擊超連接“Service Detail”觀察頁面狀態看是否有紅色的醒目的報警出現。

 

一會兒,就會收到報警短信和報警郵件,然後在把測試所有的服務開啓或把拔下來的網線查上去,片刻後,網頁裏的紅色報警表格消失,手機短信或郵件通知故障恢復。如果你的情況也這樣,那麼真正大功告成。
Nagios 的功能十分強大,在我的項目裏,因爲我的需求不同而儘可能的簡化了nagios而沒有使用代理、多更多插件等功能,在一個不超過1000個服務器的網絡規 模裏,它工作得很好。如果有更多的服務器,建議使用mysql數據來管理監控對象。在部署nagios的過程中,我多很多選項作了取捨,更詳細的情況請參 照官方的文檔。

 

 

感謝原作者寫出這麼好的配置文章。

 

 

發佈了31 篇原創文章 · 獲贊 0 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章