一、Nagios簡介
What's the Nagios?
Nagios是一款用於系統和網路監控的應用程序.它可以在你設定的條件下對主機和服務進行監控,在狀態變差和變好的時候給出告警信息.
Nagios最初被設計為在Linux系統之上運行,然而它同樣可以在類Unix的系統之上運行.
官方網站:http://www.nagios.org
中文幫助文檔:http://nagios-cn.sourceforge.net/nagios-cn/index.html 二、伺服器端安裝
1、安裝環境需求;
Apache
PHP
GCC compiler
GD development libraries
需要root許可權,以上環境可以及編譯安裝,也可以yum安裝.具體可參考文章《構建LAMP環境》.
2、建立Nagios用戶和組
#useradd nagios
#groupadd nagcmd
#usermod -a -G nagcmd nagios
#usermod -a -G nagcmd apache
3、軟體下載及安裝
因版本經常更新,在此只列出版本,請自行去Nagios官網下載最新穩定版本.
nagios-3.3.1.tar.gz
nagios-plugins-1.4.15.tar.gz
nrpe-2.8.1.tar.gz
安裝Nagios
一般將所有源碼文件放置在/usr/local/src,下面所有源碼操作默認目錄為此目錄.
#tar zxvf nagios-3.3.1.tar.gz
#cd nagios
#./configure --prefix=/usr/local/nagios --with-command-group=nagcmd
#make all
#make install
#make install-init
#make install-config
#make install-commandmode
配置WEB介面
# 如果是yum安裝的apache,直接執行make install-webconf.如果是編譯安裝的apache,則將sample-config/httpd.conf拷貝到apache的配置文件目錄,或者參考該文件內容自行配置.本次配置方法為以下配置:
#cp sample-config/httpd.conf /usr/local/apache/conf/extra/nagios.conf
並且編輯apache配置文件httpd.conf添加如下語句:
Include conf/extra/nagios.conf
創建一個nagiosadmin的用戶用於Nagios的WEB介面登錄.
#/usr/local/apache/bin/htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
以上配置完成後重啟apache是配置生效
#/usr/local/apache/bin/apachectl restart
去瀏覽器訪問http://$IP/nagios
測試WEB借口配置是否成功,如不能正常訪問,請檢查以上配置.
編譯並安裝Nagios插件
#tar zxvf nagios-plugins-1.4.15.tar.gz
#cd nagios-plugins
#./configure --with-nagios-user=nagios --with-nagios-group=nagios
#make && make install
啟動Nagios
首先將Nagios加入到服務列表,以便在系統啟動時自動啟動
#chkconfig --add nagios
#chkconfig nagios on
驗證nagios配置樣例文件
#/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
如果沒有報錯,可以啟動Nagios服務
#service nagios start
此時,Nagios安裝基本完畢.登錄WEB借口測試安裝結果.如果出現“http 500”內部伺服器錯誤,請檢查SELinux是否關閉,以及相關apache配置.
三、Nagios配置
1、Nagios默認配置文件介紹
Nagios安裝完畢后,默認的配置文件在/usr/local/nagios/etc目錄下,每個文件或目錄含義如下所示:
文件名
用途
cgi.cfg
控制cgi訪問的配置文件
htpasswd.user
由htpasswd生成的訪問控制文件
nagios.cfg
Nagios主配置文件
resource.cfg
變數配置文件,或者叫資源文件,通過在此文件中定義的變數,以便讓其他配置文件引用,如$USER1$
objects/
objects是一個目錄,在此目錄下有很多配置文件模板.用於定義Nagios對象
objects/commands.cfg
命令定義配置文件,裡面定義的命令可以被其他配置文件引用
objects/contacts.cfg
定義聯繫人和聯繫人組的配置文件
objects/localhost.cfg
定義監控本地主機的配置文件
objects/printer.cfg
定義監控印表機的一個配置文件模板,默認沒有啟用此文件
objects/switch.cfg
定義監控路由器的一個配置文件模板,默認沒有啟用此文件
objects/templates.cfg
定義主機、服務的一個模板配置文件,可以在其他配置文件中引用
objects/timeperiods.cfg
定義Nagios監控時間段的配置文件
objects/windows.cfg
監控Windows主機的一個配置文件,默認沒有啟用此文件
2、Nagios配置文件之間的關係
在nagios的配置過程中涉及到的幾個定義有:主機、主機組,服務、服務組,聯繫人、聯繫人組,監控時間,監控命令等,從這些定義可以看出,nagios各個配置文件之間是互為關聯,彼此引用的.
成功配置出一台nagios監控系統,
要弄清楚每個配置文件之間依賴與被依賴的關係,最重要的有四點:
第一:定義監控哪些主機、主機組、服務和服務組
第二:定義這個監控要用什麼命令實現,
第三:定義監控的時間段,
第四:定義主機或服務出現問題時要通知的聯繫人和聯繫人組.
3、開始配置Nagios
為了維護方便,我們將Nagios各個定義對象創建獨立的配置文件,文件列表及說明如下:
/internal-servers/host.cfg
定義主機和主機組
/internal-servers/services.cfg
定義服務
/objects/contacts.cfg
使用默認的聯繫人和聯繫人祖定義文件
/objects/commands.cfg
使用默認的命令定義文件
/objects/timeperiods.cfg
使用默認的時間段定義文件
/objects/templates.cfg
使用默認的資源引用文件
在配置之前,先理清一個思路.根據上文所列出的“Nagios配置文件之間的關係”可以有一個基本的思想,
首先,要確定我們要進行監控的主機、服務等;
其次,是怎麼去監控,用什麼命令去監控,這個就是在commands.cfg文件中定義了,當然默認的配置文件中基本的命令都有了;
再次,監控的服務或者主機需要在什麼時間去監控?7x24的監控?這個是在timeperiods.cfg文件中定義的;
,當被監控的服務或狀態發生變化的時候需要通知誰?這個可以再contacts.cfg文件中來指定.
有了以上思路,我們就可以開始配置了,本文檔以監控一台CentOS主機的常規狀態和Web服務為例;
1)templates.cfg文件詳情
以下主要列出 generic-contact、generic-host、linux-server、generic-service的參數情況,其他暫不做討論.
define contact{ name generic-contact ; 定義聯繫人模板名稱 service_notification_period 24x7
; 當服務出現異常時,發送通知的時間段,這個時間段“7x24"在timeperiods.cfg文件中定義 host_notification_period 24x7
; 當主機出現異常時,發送通知的時間段,這個時間段“7x24"在timeperiods.cfg文件中定義 service_notification_options w,u,c,r,f,s
; 這個定義的是“通知可以被發出的情況”w即warn,表示警告狀態,u即unknown,表示不明狀態,c即criticle,表示緊急狀態,r即recover,表示恢復狀態 host_notification_options d,u,r,f,s
; 定義主機在什麼狀態下需要發送通知給使用者,d即down,表示宕機狀態,u即unreachable,表示不可到達狀態,r即recovery,表示重新恢復狀態. service_notification_commands notify-service-by-email
; 服務故障時,發送通知的方式,可以是郵件和簡訊,這裡發送的方式是郵件,其中“notify-service-by-email”在commands.cfg文件中定義 host_notification_commands notify-host-by-email
; 主機故障時,發送通知的方式,可以是郵件和簡訊,這裡發送的方式是郵件,其中“notify-host-by-email”在commands.cfg文件中定義 register 0
; 不註冊,這裡是在定義一個模板 }
define host{ name generic-host
; 主機模板名稱 notifications_enabled 1
; 開啟通知 event_handler_enabled 1
; 事件處理開啟 flap_detection_enabled 1
; 擺動檢測開啟 failure_prediction_enabled 1
; Failure prediction is enabled process_perf_data 1
; 是否啟用進程性能數據記錄、Nagios的數據輸出功能 retain_status_information 1
; 重啟時保留狀態信息 retain_nonstatus_information 1
; Retain non-status information across program restarts
notification_period
24x7
; 異常時通知時間段 register 0
; 不註冊 }
define host{
name
linux-server
; 主機模板名稱
use
generic-host
; 引用templates.cfg文件中定義的generic-host
check_period
24x7
; 告訴nagios檢查主機的時間段
check_interval
5
; 檢測主機時間間隔
retry_interval
1
; 主機檢查重試間隔1分鐘
max_check_attempts
10
; 主機異常到發送警報的時間,10個時間單位
check_command check-host-alive ; 默認的檢測linux主機命令
notification_period
workhours
; 主機故障時,發送通知的時間範圍,其中“workhours”在timeperiods.cfg中進行了定義
notification_interval
120
; 在主機出現異常后,故障一直沒有解決,nagios再次對使用者發出通知的時間.單位是分鐘.如果你覺得,所有的事件只需要一次通知就夠了,可以把這裡的選項設為0
notification_options
d,u,r
; 定義主機在什麼狀態下可以發送通知給使用者,d即down,表示宕機狀態,u即unreachable,表示不可到達狀態,r即recovery,表示重新恢復狀態.
contact_groups
admins
; 指定聯繫人組,這個“admins”在contacts.cfg文件中定義
register
0
; 不註冊
}
define service{ name generic-service
; 服務模板名稱 active_checks_enabled 1
; 開啟主動服務檢查 passive_checks_enabled 1
; 被動服務檢查 parallelize_check 1
; Active service checks should be parallelized (disabling this can lead to major performance problems) obsess_over_service 1
; We should obsess over this service (if necessary) check_freshness 0
; 默認服務狀態為未檢查 notifications_enabled 1 event_handler_enabled 1 flap_detection_enabled 1 failure_prediction_enabled 1 process_perf_data 1 retain_status_information 1 retain_nonstatus_information 1 is_volatile 0
; The service is not volatile check_period 24x7 max_check_attempts 3 normal_check_interval 10
; 硬態重新檢測的時間間隔,默認為3個時間單位 retry_check_interval 2
; 每隔兩分鐘重新檢測服務直到可以確定為硬狀態 contact_groups admins
notification_options
w,u,c,r
notification_interval
120
; 在主機出現異常后,故障一直沒有解決,nagios再次對使用者發出通知的時間
notification_period
24x7
; 在主機出現異常后,Nagios通知聯繫人的時間段 register 0 }
其他幾個模板基本類似,在此不做過多解釋.
2)創建host.cfg文件
#192.168.1.100
#註釋
define host {
use linux-server
#use表示引用,也就是將主機linux-server的所有屬性引用到本host定義中來,在nagios配置中,很多情況下會用到引用.
host_name server_name
#定義主機名稱,可以根據被監控主機的情況進行命名
alias server_alias
#主機別名
address 192.168.1.100
#主機IP地址
}
define hostgroup {
hostgroup_name MyServer
#定義主機組名稱
alias My_Server
#定義主機組別名
members server_name
#成員列表
}
3)修改contacts.cfg文件
define contact{
contact_name nagiosadmin
#Short name of user
use generic-contact
#引用templates.cfg文件中generic-contact對象定義
alias Nagios Admin
#Full name of user
email ****@139.com
#報警需要通知的郵件地址,本例為使用139郵箱轉發郵件到手機的報警方式 }
define contactgroup{
contactgroup_name
admins
#聯繫人組名稱
alias Nagios Administrators
#別名
members nagiosadmin
#成員 }
4)創建services.cfg文件
define service {
use generic-service
#引用templates.cfg文件中generic-service服務對象定義
hostgroup_name MyServer
#指定對主機組MyServer進行該服務監控
service_description Disk Partition
#服務名稱
check_command check_nrpe!check_disk
#監控命令,這裡使用的是nrpe方式監控磁碟使用狀況,稍後討論nrpe的使用和配置
}
其他服務監控類似,不一一詳解了.
5)檢測配置並啟動Nagios
Nagios可以檢查配置文件的正確性,使用以下命令;
#/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
如果有錯誤,我們可以通過錯誤提示很快定位錯誤配置位置進行修改;
沒有錯誤后,就可以啟動nagios了!
#service nagios start
還有reload restart stop 操作.
6)Nagios發送郵件報警配置
Nagios發送報警有比較多的方式,如飛信、MSN、簡訊貓和139郵箱等.本文使用139郵箱方式,
139郵箱的簡訊通知可以方便的實現手機通知.
配置主機hosts文件,在127.0.0.1后添加nagios-test.com;nagios-test.com可以自己定義
配置/etc/sysconfig/network文件,將hostname更改為nagios-test.com,可以自己定義,但是這兩處
保持一致,然後重啟network服務使配置生效.
使用以下命令測試是否可以發送郵件;
#printf “This is a test mail” | mail -s “My test mail” 15800000000@139.com
在這個過程中,如果沒有收到郵件,可以去查看/var/log/maillog,是否發送郵件,以及是否拒絕接收,決絕原因等.
如果以上方式可以發送郵件之後,Nagios默認配置及可以發送郵件報警.轉發到手機的配置請在139郵箱里進行設置. 四、客戶端安裝及配置
1)下載並安裝NRPE
NRPE是Nagios的客戶端,NRPE的設計初衷是允許我們在遠程Linux/Unix上執行Nagios-plugins.這樣做的主要原因是為了讓Nagios監控遠程Linux/Unix主機就像監控“本地主機”資源.更詳盡的情況可參考:http://nagios.sourceforge.net/docs/nrpe/NRPE.pdf
在Nagios官網可以下載到最新穩定版NRPE,本文檔使用的版本為nrpe-2.8.1.tar.gz.
添加nagios用戶
#useradd nagios
安裝nagios-plugins
#tar zxvf nagios-plugins-1.4.15.tar.gz
#cd nagios-pulgins-1.4.15
#./configure
#make && make install
安裝NRPE
#tar zxvf nrpe-2.8.1.tar.gz
#cd nrpe-2.8.1
#./configure
#make all
#make install-plugin
#make install-daemon
#make install-daemon-config
以上沒有錯誤的話,NRPE就安裝完成了.
2)NRPE配置
NRPE只有一個配置文件
#/usr/local/nagios/etc/nrpe.cfg
一般配置文件只需要更改允許的IP就可以使用了.編輯nrpe.cfg;
修改allowed_hosts=127.0.0.1為我們的Nagios_Server_IP即可.
3)啟動NRPE
#/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d
將這條命令添加到/etc/rc.local文件,在系統啟動時啟動.
#echo ‘/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d’ >> /etc/rc.local
4)檢測NRPE啟動情況
#netstat -ap | grep nrpe
正常的話應該顯示
tcp 0 0 *:5666 *:* LISTEN 2561/nrpe
監聽埠5666,nrpe啟動正常.如果沒有以上結果,請檢查你的iptables配置.
5)檢查NRPE是否允許服務端訪問
在Nagios服務端執行
#/usr/local/nagios/libexec/check_nrpe -H nrpe_host_IP
如果返回NRPE的版本信息,證明nrpe客戶端安裝成功. 五、關於Nagios與NRPE的關係的一些經驗
Nagios在使用NRPE進行監控時,是Nagios服務端主動去被監控端檢測,服務端使用的是check_nrpe -H nrpe_host_ip -c command進行的請求,在被監控端,NRPE收到後會在nrpe配置文件nrpe.cfg中查找定義的command,如果找不到,會告訴服務端沒有定義該命令.找到該命令后,會按照nrpe.cfg定義的命令所指向的本地命令去檢測本機相關狀態,檢測完成後將檢測結果返回給Nagios服務端.
參考資料:
http://nagios-cn.sourceforge.net/nagios-cn/index.html
http://nagios.sourceforge.net/docs/nrpe/NRPE.pdf
http://www.nagios.org/documentation
本文出自 「放逐天涯」 博客,請務必保留此出處http://andy2018.blog.51cto.com/3690563/868159