nagios監控服務的安裝和配置

Nagios是一款開源的免費網絡監視工具,能有效監控Windows、Linux和Unix的主機狀態,交換機路由器等網絡設置,打印機等。在系統或服務狀態異常時發出郵件或短信報警第一時間通知網站運維人員,在狀態恢復後發出正常的郵件或短信通知。我最近在我們部門在搞這個東東,呵呵,順便把一些心得放到博客上給大家分享分享。(注意下面的文章不是筆者的原創,我是在前輩的基礎上加入自己的心得和排除一些錯誤信息,加以修改而已)

一、安裝配置Nagios
 
1、Nagios簡介
 
Nagios是一款遵循GPLv2的開源網絡監控軟件,可用來監控指定的多種系統的主機、服務,並可在它們的工作狀態發生變化時通知管理員。它的特性包括:
1)監控網絡服務(HTTP、POP3、SMTP、PING、MySQL等)
2)監控主機資源(磁盤空間利用率、內存利用率、CPU負載等)
3)簡潔的插件設計接口,使得用戶可以輕鬆開發所需的檢測腳本
4)並行服務模式
5)輕鬆描述網絡結構,並且能夠區辨“宕機”和“主機不可達”
6)通過郵件或用戶自定義的方式將主機或服務的工作狀態變化情況通知給管理員
7)自動日誌滾動
8)支持以冗餘方式進行主機監控
9)可以通過web方式直觀的查看當前網絡狀態、通知和問題歷史、日誌文件等等,此組件爲可選
 
Nagios通常由一個主程序(Nagios)、一個插件程序(Nagios-plugins)和四個可選的ADDON(NRPE、NSCA、NSClient++和NDOUtils)組成。Nagios的監控工作都是通過插件實現的,因此,Nagios和Nagios-plugins是服務器端工作所必須的組件。而四個ADDON中,NRPE用來在監控的遠程Linux/Unix主機上執行腳本插件以實現對這些主機資源的監控;NSCA用來讓被監控的遠程Linux/Unix主機主動將監控信息發送給Nagios服務器(這在冗餘監控模式中特別要用到);NSClient++是用來監控Windows主機時安裝在Windows主機上的組件;而NDOUtils則用來將Nagios的配置信息和各event產生的數據存入數據庫,以實現這些數據的快速檢索和處理。這四個ADDON(附件)中,NRPE和NSClient++工作於客戶端,NDOUtils工作於服務器端,而NSCA則需要同時安裝在服務器端和客戶端。
 
下圖是筆者根據自己的理解給出的Nagios各組件的關係圖,希望能幫助讀者理解。如果您對此構圖中的關係持有異議,歡迎通過各種方式跟筆者交流。
 

 
 
目前,Nagios只能安裝在Linux系統主機上,其編譯需要用到gcc。同時,如果打算使用web界面的管理工具的話,還需要有apache服務器和GD圖形庫的支持。
 
2、安裝前的準備工作
 
(1)解決安裝Nagios的依賴關係:
 
Nagios基本組件的運行依賴於httpd、gcc和gd。可以通過以下命令來檢查nagios所依賴的rpm包是否已經完全安裝:
# rpm -q httpd gcc glibc glibc-common gd gd-devel
 
對於缺少的rpm包,您可以掛載光盤直接使用rpm命令進行安裝。如果不想總是被rpm的依賴關係所困擾,您可以通過yum結合本地源來實現rpm包的管理。對於本地源的建立,可以參考筆者的另外一篇關於yum的文章。
 
說明:以上軟件包您也可以通過編譯源代碼的方式安裝,只是後面許多要用到的相關文件的路徑等需要按照您的源代碼安裝時的配置逐一修改。
 
 
(2)添加nagios運行所需要的用戶和組:
 
# groupadd nagcmd
# useradd -m nagios
# usermod -a -G nagcmd nagios
 
把apache加入到nagcmd組,以便於在通過web Interface操作nagios時能夠具有足夠的權限:
# usermod -a -G nagcmd apache
 
3、編譯安裝nagios:
 
# tar zxf nagios-3.1.2.tar.gz 
# cd nagios-3.1.2
# ./configure --with-command-group=nagcmd
# make all
# make install
# make install-init
# make install-config
# make install-commandmode
 
爲email指定您想用來接收nagios警告信息的郵件地址,默認是本機的nagios用戶:
# vi /usr/local/nagios/etc/objects/contacts.cfg 
email        nagios@localhost       #這個是默認設置
 
在httpd的配置文件目錄(conf.d)中創建Nagios的Web程序配置文件:
# make install-webconf
 
創建一個登錄nagios web程序的用戶,這個用戶帳號在以後通過web登錄nagios認證時所用:
# htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
 
以上過程配置結束以後需要重新啓動httpd:
# service httpd restart
 
4、編譯、安裝nagios-plugins
 
nagios的所有監控工作都是通過插件完成的,因此,在啓動nagios之前還需要爲其安裝官方提供的插件。
 
# tar zxf nagios-plugins-1.4.13.tar.gz 
# cd nagios-plugins-1.4.13
# ./configure --with-nagios-user=nagios --with-nagios-group=nagios
# make
# make install
 
5、配置並啓動Nagios
 
(1)把nagios添加爲系統服務並將之加入到自動啓動服務隊列:
# chkconfig --add nagios
# chkconfig nagios on
 
(2)檢查其主配置文件的語法是否正確:
# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
 
(3)如果上面的語法檢查沒有問題,接下來就可以正式啓動nagios服務了:
# service nagios start
 
(4)配置selinux
如果您的系統開啓了selinux服務,則默認爲拒絕nagios web cgi程序的運行。您可以通過下面的命令來檢查您的系統是否開啓了selinux:
#getenforce
 
如果上面命令的結果顯示開啓了selinux服務,您可以通過下面的命令暫時性的將其關閉:
#setenforce 0
 
如果您想在以後完全關閉selinux,可以通過編輯/etc/sysconfig/selinux文件,將其中的selinux後面的值“force”修改爲“disable”即可。
 
當然,您也可以通過以下方式將nagios的CGI程序運行於SELinux/targeted模式而不用關閉selinux:
# chcon -R -t httpd_sys_content_t /usr/local/nagios/sbin
# chcon -R -t httpd_sys_content_t /usr/local/nagios/share
 
(5)通過web界面查看nagios:
http://your_nagios_IP/nagios
 
登錄時需要指定前面設定的web認證帳號和密碼。
 
注意:爲了nagios系統的安全,建議您使用信息摘要強認證模式(如MD5),強制使用web的TSL/SSL安全通訊模式,並且通過訪問控制列表設定能訪問nagios的web界面的客戶端地址。
 
二、Nagios的插件簡介
 
Nagios本身並不包含任何監控機制,其所有的監控工作都是通過插件(plugin)來實現的。這些插件通常是通過命令行方式監控主機或服務工作狀態的Perl腳本或Shell腳本(通常於/usr/local/nagios/libexec目錄),由Nagios進行按需調用,並把執行結果返回給Nagios。Nagios正是根據這些返回值來判斷是否“採取某種行動”(如運行事件句柄(event handlers),發送通知等)。下圖展示了插件相對於Nagios進程和被監控對象間的關係。
 

 
官方提供了一些用來監控系統基本資源(如CPU負載、磁盤利用率、Ping速率等)的插件。如果需要監控其它形式資源(如CPU電壓、CPU風扇轉速、網絡流量等)的狀態,您可以利用官方提供的其它插件或第三方提供的插件,當然,您也可以自己編寫所需要的插件。
 
以下是常用來獲得插件的地址:
官方提供的插件通常都會提供簡單的使用幫助,可以在每個腳本後使用“-h”或“--help”來獲得這些幫助信息。如要想了解插件腳本check_nt的幫助信息,可以使用如下命令:
# ./check_nt  --help
 
三、Nagios配置文件概覽
 

 
Main Config File:主配置文件,通常爲nagios.cfg,包含許多指示Nagios守護進程工作屬性的指令。此配置文件會被Nagios Daemon和CGIs使用。
Resource  File(s):資源文件,常用來存儲用戶自定義的“宏(macro)”,如可用來存儲“密碼”等敏感性的信息,使之可以避免直接暴露在CGIs源文件中。
Object Definition Files:對象定義文件,常用來定義要監控對象以及如何監控這些對象,如主機、服務、主機組、服務組、聯繫人、聯繫人組、命令等。這些對象定義文件可以通過cfg_file指令包含於主配置文件中;如果對象定義文件有很多,則可以將它們存放於某一目錄中,而後使用cfg_dir指令一次性地由主配置文件讀取。這些文件通常位於/usr/local/nagios/etc/objects目錄中。
CGI Configure File:CGI配置文件,包含許多決定CGIs工作屬性的指令,以及一個指向主配置文件的引用。

四、Nagios常見對象概覽

對象(Objects)是Nagios“監控”和“通知”機制的基本邏輯組件,其主要包括:
  • Service
  • Service Groups
  • Hosts
  • Host Groups
  • Contacts
  • Contact Groups
  • Commands
  • Time Periods
  • Notification Escalations
  • Notification and Excution Dependenicies
  •  
  •  

 
主機和主機組:主機通常是網絡中的物理設備,至少有某個種類的訪問地址(主機名、IP地址或MAC地址);每個主機通常都提供一個到多個服務(service);主機彼此間可以形成父/子(parent/child)關係,用來描述主機間的“從屬”或“包含”關係(“網絡可達性”關係)。主機組通常指一到多個主機的組合。
 


服務和服務組(Service/Service groups):“服務”是Nagios監控邏輯的核心,通常從屬於某個主機,可以是主機的屬性(如CPU負載、磁盤空間、交換空間使用率等),也可以是由主機提供的某個“服務”(如POP3、HTTP、SSH等),甚至也可以是DNS資源記錄這樣的主機資源。服務組通常指一至多個服務定義的組合。
聯繫人和聯繫人組(Contacts/Contack Groups):“聯繫人”是指“通知(notification)”的接受對象。聯繫人通常有一個或多個“通知”方式(如移動電話、Email、即時通訊帳戶等),以接收其職責範圍內的主機或服務發來的通知。“聯繫人組”通常指一個或多個聯繫人的集合。
 
時段(Timeperiods):“時段”通常定義用來控制“主機和服務何時被監控”以及“聯繫人何時可以接收通知”的有效時間段。

命令Commands):用來定義Nagios可以調用的程序、腳本等,還包括了這些程序或腳本的調用格式。
 
五、NDOUtils的安裝與設定:
 
1、NDOUtils簡介
 
NDOUTILS ADDON主要用來將Nagios的配置信息和event產生的數據存入數據庫(目前的beta版支持mysql和pgsql,穩定版只支持mysql),以方便實現數據的快速檢索和處理,並且爲其它通過web接口程序來管理這些數據提供了保障。
在一個大型應用中,可能存在多個獨立的或分佈式佈置的Nagios服務器,這種環境中的每個Nagios服務器通常被稱爲一個Nagios實例。在多Nagios實例的環境中,既可以把所有實例的數據存入到一個數據庫,也可以將各實例的數據分別存儲。
在只有一個Nagios實例環境中,其實例名稱通常爲“default”;而在多實例的環境中,則需要爲此些Nagios實例各自命名。
 
NDO Utils主要由以下四個部分組成:
 
1)NDOMOD Event Broker Module(NDOMOD.O):用來輸出Nagios進程產生的數據(data和logic),其前提是Nagios在編譯時開啓了Event broker的功能。同時,NDOMOD模塊還可以導出Nagios配置有關的信息(包括Nagios監控進程運行時環境產生的動態數據)至文件、Unix域套接字或者TCP套接字。NDO2DB將通過前面的這三種方式獲得Nagios的有關數據。
2)NDO2DB:用來接收由NDOMOD和LOG2NDO組件輸出的信息並將之存儲在數據庫中。啓動時,NDO2DB進程將創建一個TCP套接字或Unix域套接字以監聽客戶端(輸出端)的連接請求。目前僅支持MySQL數據庫。
多個客戶端可以同時向一個NDO2DB守護進程輸出數據,此時的NDO2DB將爲每一個連接進來的客戶端(Nagios實例)建立一個連接進程,以實現每個客戶端數據的獨立存儲、檢索和處理。 
3)LOG2NDO:用來將Nagios的歷史日誌通過NDO2DB進程輸出至數據庫。LOG2NDO與NDO2DB進程通信的方法依然是標準文件、Unix域套接字或者TCP套接字三種。
4)FILE2SOCK:從標準文件或標準輸入讀入數據,並將之輸出至Unix域套接字或TCP套接字。當NDOMOD或LOG2NDO將數據輸出至標準文件時,此工具則可用來將這些標準文件中數據讀出併發送給NDO2DB進程監聽的TCP套接字或Unix域套接字。
 

 
2、安裝NDOUtils
 
# tar zxf ndoutils-1.4b8.tar.gz
# cd ndoutils-1.4b8
# ./configure --enable-mysql --with-mysql-lib=/usr/lib --with-mysql-inc=/usr/include  --disable-pgsql
# make
 
# cp -v src/{ndomod-3x.o,ndo2db-3x,file2sock,log2ndo}  /usr/local/nagios/bin
 
以上覆制的文件中前兩項是版本相關的,即如果您的nagios主版本號是2系列,則需要拷貝名爲ndomod-2x.o和ndo2db-2x的兩個文件。後兩項是通用文件,無論哪個版本都需要複製。
 
3、爲NDOUtils創建數據庫
 
# mysql -uroot -p
mysql> create database ndodb;
mysql> GRANT  CREATE,SELECT,INSERT,UPDATE,DELETE ON ndodb.* TO ndouser@localhost IDENTIFIED BY '123456';
mysql> flush privileges;
 
下面兩條命令用來生成ndoutils所需要的數據庫表等,這些表默認以“nagios_”爲前綴;install腳本命令必須在db子目錄內執行:
# cd db
# ./installdb -u ndouser -p 123456 -h localhost -d ndodb
其中各選項的意義如下:
-u用來指定導入時所用的mysql用戶帳號
-p表示前面mysql用戶的密碼
-h表示mysql服務器地址,如果是localhost,則可以省略
-d表示目標數據庫
 
說明:如果與cacti整合的話,npc插件會在cacti的數據庫自動生成ndoutils所需要表,這些表均以“npc_”爲前綴。後面講到整合的文章中會繼續對些做出說明。
 
4、複製、編輯配置文件
 
# cd ..
# cp -v config/{ndo2db.cfg,ndomod.cfg} /usr/local/nagios/etc
 
# vi /usr/local/nagios/etc/nagios.cfg
在文件中添加:
broker_module=/usr/local/nagios/bin/ndomod-3x.o config_file=/usr/local/nagios/etc/ndomod.cfg
 
此外,請確保您的/usr/local/nagios/etc/nagios.cfg中有如下行出現,否則,請自行添加:
event_broker_options=-1                //爲Nagios開啓event broker
 
5、編輯ndo2db守護進程和ndomod的配置文件
 
# vi /usr/local/nagios/etc/ndo2db.cfg
socket_type=tcp
db_servertype=mysql
db_host=localhost
db_port=3306
db_prefix=nagios_
db_user=ndouser
db_pass=123456
 
說明:
i) 以上"db_"開頭的選項用來指定連接數據庫的屬性;
ii)其默認用來接收數據的方式爲Unix域套接字,這裏修改成了TCP套接字;同時,ndomod.cfg配置文件中指定的輸出方式也應該做相應的修改;
 
接下來我們去編輯ndomod的配置文件,爲其指定數據的輸出方式和輸出目標主機:
# vi /usr/local/nagios/etc/ndomod.cfg
output_type=tcpsocket
output=127.0.0.1
 
 
6、啓動ndo2db守護進程
 
# /usr/local/nagios/bin/ndo2db-3x -c /usr/local/nagios/etc/ndo2db.cfg
 
建議此時查看系統日誌(/var/log/messages)中是否有錯誤出現。
 
如果此時Nagios進程已啓動,則需要停止並重新啓動nagios:
# killall -SIGHUP nagios
# rm -f /usr/local/nagios/var/nagios.lock
# /usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cfg
 
說明:
i)此處停止Nagios必須通過向Nagios發送SIGHUP信號的方式進行;
ii)建議此時查看nagios日誌文件中是否表明ndomod的模塊加載是否正常,以及其是否能正常連接到data sink;查看日誌,可以使用如下命令實現:# tail -30 /usr/local/nagios/var/nagios.log
 
排錯信息:
i)  如果ndomod模塊沒能正常加載的話,建議重新檢查nagios的配置文件中是否添加了所需的broker module條目;
ii) 同時,如果ndomod沒有正常連接到data sin,建議查看ndo2db.cfg文件中關於mysql連接項目的指定是否正確;
iii)確認一下在編譯NDOUtils時是否指定了關於mysql庫文件位置的選項;
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章