nagios網絡監控
nagios是什麼:
Nagios是一款開源的免費網絡監視工具,能有效監控Windows、Linux和Unix的主機狀態,交換機路由器等網絡設置,打印機等。在系統或服務狀態異常時發出郵件或短信報警第一時間通知網站運維人員,在狀態恢復後發出正常的郵件或短信通知。
nagios是功能強大的監控軟件,主要用來監控網絡設備的狀態(比如:主機的資源狀態);適合於:對大量的服務器進行監控,判斷其負載或服務是否正常,發生異常能通過郵件、短信報警。特別注意:流量監控不是他的強項,流量監控建議使用cacti.可以繪製非常直觀的圖形
nagios能監視什麼:
nagios可以監控:1、主機是否宕機(通過ping命令,如果ping不通會認爲主機屬於宕機狀態,但不影響所監控的其他服務);2、服務器資源(cpu使用率、硬盤剩餘空間等);3、網絡服務(smtp\pop3\http\);4、監控網絡設備(路由器、交換機等。)
操作步驟:
1、 安裝編譯所需的軟件包:如下圖所示:
# yum –y install httpd php-* gd-* mysql-devel
(若mysql-devel包不安裝,會沒有check_mysql插件。)
2、創建運行nagios服務的用戶
注:useradd nagios #創建運行nagios服務的用戶
usermod -G nagios apache #使apache用戶對nagios目錄具有寫權限,不然web頁面操作失敗.
3、nagios軟件安裝
釋放nagios源碼包,進行編譯前的預備置:
編譯並安裝nagios及相關操作,如下圖所示:
注:
make install //安裝主程序,CGI和HTML文件
make install-init //在/etc/rc.d/init.d安裝啓動腳本
make install-commandmode //配置目錄權限
make install-config //安裝示例配置文件
make install-webconf //安裝nagios的web接口,會在/etc/httpd/conf.d目錄中創建nagios.conf文件。
注:若在RHEL6X32位系統中安裝nagios-cn-3.2.3.tar.bz2要先執行make clean操作,然後再執行./configure和make all等操作,否則執行make all時會報如下錯誤。
驗證安裝是否成功:驗證程序是否被正確安裝,我們切換目錄到安裝路徑(默認安裝目錄是/usr/local/nagios),看是否存在etc、bin、sbin、share、var、這五個目錄,如果存在說明程序被正確安裝到系統了
下面我們對這五個目錄功能做簡要說明:
bin:nagios執行程序所在的目錄,nagios文件即爲主程序。
etc:nagios配置文件目錄,當make install-config完以後etc下面就會出現默認的配置文件。
sbin:nagios CGI文件所在目錄,這裏存放的是一些外部命令執行程序。
share:nagios網頁文件目錄,存放一些html文件。
var:nagios日誌文件、pid等文件目錄。
4、安裝nagios-plugins插件:
nagios-plugins是nagios官方提供的一套插件程序,nagios監控主機的功能其實都是通過執行插件程序來實現的。
釋放nagios-plugins源碼包並進行編譯前的預備置
編譯並安裝nagios-plugins插件:
這個裝完之後會在/usr/local/nagios/libexec文件夾中多出一些文件,這裏存放nagios所要用到的所有插件.
安裝後所有插件命令將被安裝到/usr/local/nagios/libexec 目錄下
到此nagios就安裝完畢,但還需修改nagios的配文件
預備知識:
聯繫人 contact:出了問題向誰報告?一般當然是系統管理員了
監控時間段 timeperiod :7X24小時不間斷還是週一至週五,或是自定義的其他時間段
被監控主機 Host :所需要監控的服務器,當然可以是監控機自己
監控命令 command :nagios發出的哪個指令來執行某個監控,這也是自己定義的
被監控的服務 Service :例如主機是否存活,80端口是否開,磁盤使用情況或者自定義的服務等
注意:多個被監控主機可以定義爲一個主機組,多個聯繫人可以被定義爲一個聯繫人組
5、修改配置文件:修改nagios的主配置文件nagios.cfg
cfg_file=/usr/local/nagios/etc/objects/hosts.cfg #新建hosts.cfg文件,存放主機與主機組定義
cfg_file=/usr/local/nagios/etc/objects/services.cfg #新建services.cfg文件,存放服務與服務組定義
#cfg_file=/usr/local/nagios/etc/objects/localhost.cgf #加“#”註釋localhost.cfg
修改後結果如下圖所示:
將localhost.cfg文件註釋掉,添加有關hosts.cfg和services.cfg文件定義。
注:
在/usr/local/nagios/etc/objects目錄下存放一些以.cfg爲後綴的文件
timeperiods.cfg //監控時間段配置文件
如下圖所示定義了一個監控時間段,它的名稱是24x7(時間段的名稱,這個地方不要有空格),監控的時間是每天全天24小時
commands.cfg //命令配置文件
圖略
contacts.cfg //聯繫人配置文件
如下圖所示定義了一個聯繫人,聯繫人的名稱是nagioscontact,並定義了一個聯繫人組,聯繫人組名是admins,包含一個成員nagioscontact
下面列出其中重要的幾個選項做說明:
service_notification_period 24x7
服務出了狀況通知的時間段,這個時間段就是上面在timeperiods.cfg中定義的.
host_notification_period 24x7
主機出了狀況通知的時間段, 這個時間段就是上面在timeperiods.cfg中定義的
service_notification_options w,u,c,r
當服務出現w-報警(warning),u-未知(unkown),c-嚴重(critical),或者r-從異常情況恢復正常,在這四種情況下通知聯繫人
host_notification_options d,u,r
當主機出現d-當機(down),u-返回不可達(unreachable),r-從異常情況恢復正常,在這3種情況下通知聯繫人
service_notification_commands notify-service-by-email
服務出問題通知採用的命令notify- service-by-email,這個命令是在commands.cfg中定義的,作用是給聯繫人發郵件,還可以飛信發手機短信給聯繫人,但需要安裝飛信程序。. host_notification_commands notify- host-by-email
同上,主機出問題時採用的也是發郵件和飛信的方式通知聯繫人。
email [email protected]
很明顯,聯繫的人email地址
Pager 137XXXXXXXX
聯繫人接收報警信息電話
可以將多個聯繫人組成一個聯繫人組
define contactgroup{
contactgroup_name admins //聯繫人組的名稱,同樣不能空格
alias Nagios Administrators //別名
members nagioscontact
//組的成員,來自於上面定義的聯繫人,如果有多個聯繫人則以逗號相隔
templates.cfg //模板配置文件
圖略
/usr/local/nagios/etc/cgi.cfg //它的作用是控制相關cgi腳本
其他配置文件以實際情況來進行配置
發現在/usr/local/nagios/etc/objects目錄中並不存在hosts.cfg和services.cfg文件,這兩個文件需要手工創建。
6、創建hosts.cfg文件:
#vi /usr/local/nagios/etc/objects/hosts.cfg
內容如下:
注:
define host{
use linux-server //定義使用的模板
host_name nagios //被監控主機的名稱,最好別帶空格
alias nagios //別名
address 127.0.0.1 //被監控主機的IP地址
check_command check-host-alive
//監控的命令check-host-alive,這個命令來自commands.cfg,用來監控主機是否存活
max_check_attempts 5 //檢查失敗後重試的次數
check_period 24x7 //檢查的時間段24x7,同樣來自timeperiods.cfg中定義
notification_interval 10 //提醒的間隔,每隔10分鐘提醒一次
notification_period 24x7 //提醒的週期, 24x7,同樣來自timeperiods.cfg中定義
contact_groups admins //聯繫人組,上面在contactgroups.cfg中定義的admins
notification_options d,u,r //指定什麼情況下提醒
}
主機組並不是必須的,這是配合nagios的監控頁面的顯示
通過簡單的複製修改就可以定義多個主機了.後面我們會加上被監控主機mysql
7、創建services.cfg文件:(這裏只是簡單介紹,也可在services.cfg文件中添加hosts.cfg文件中的參數)
#vi /usr/local/nagios/etc/objects/services.cfg
內容如下:
check_local_users!20!50 //監測遠程主機當前的登錄用戶數量,如果大於20用戶則報warning,如果大於50則報critical
check_local_disk!20%!10%!/ //如果可用空間低於20%會報Warning,如果可用空間低於10%則報Critical:
check_local_procs!250!400!RSZDT //監測遠程主機當前的進程總數,如果大於250進程則報warning,如果大於400進程則報critical,S(休眠)、R(運行)、Z(僵死)、D (不可中斷)、T (停止)
check_load -w 5,4,3 -c 10,6,4這個命令的意義如下
當1分鐘多於5個進程等待,5分鐘多於4個,15分鐘多於3個則爲warning狀態
當1分鐘多於10個進程等待,5分鐘多於6個,15分鐘多於4個則爲critical狀態
Check_local_swap!20%!10% //如果交換空間低於20%會報Warning,如果可用空間低於10%則報Critical
服務組並不是必須的,這是配合nagios的監控頁面的顯示
校驗nagios配置文件的正確性:
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
若顯示如下圖所示則表示沒有錯誤
nagios監控頁面訪問用戶和密碼:
注:安裝好nagios後會在apache安裝目錄中的conf.d目錄存在一個nagios.conf文件,這個文件中定義了有關訪問nagios的web頁面的定義。在httpd.conf文件使用Include conf.d/*.conf配置項將nagios.conf文件的定義包含到httpd.conf文件中。
執行htpasswd命令添加一個訪問nagios頁面的授權用戶
啓動httpd和nagios服務並設置開機自動啓動
#service nagios start #啓動nagios和httpd服務
#service httpd start #啓動httpd服務
#chkconfig httpd on
#chkconfig nagios on
注意:如果你開啓了selinux 需要配置如下二步:
chcon -R -t httpd_sys_content_t /usr/local/nagios/sbin/
chcon -R -t httpd_sys_content_t /usr/local/nagios/share/
訪問nagios監控頁面,輸入上面添加的用戶名和密碼
http://IP/nagios (注意nagios服務器上有關防火牆的設置)
顯示結果如下:
二、監控mysql服務運行
1、mysql主機上運行有mysql服務:
安裝mysql的服務器軟件包(這裏我是以RPM類型包安裝mysql服務器)
啓動mysqld服務並設置爲開機自動啓動
#service mysqld start
#chkconfig mysqld on
2、在mysql服務器上創建監控檢測帳戶:
3、在nagios主機上檢測是否可以連接mysql主機上的mysql服務(注意要在mysql主機設置防火牆允許3306端口的通信)
注:若沒有check_mysql插件,是因爲沒有安裝mysql-devel包,將mysql-devel包安裝後重新安裝一下nagios-plugins就有了
4、在nagios主機上添加對mysql服務監控的定義:
#vi /usr/local/nagios/etc/objects/hosts.cfg 添加如下行
#vi /usr/local/nagios/etc/objects/services.cfg 添加如下行
#vi /usr/local/nagios/etc/objects/commands.cfg 添加如下行(注:check_mysql命令必須存在於/usr/local/nagios/libexec目錄中)
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg #檢測無誤後重載nagios
service nagios reload
訪問ngios的web頁面:如下所示,能通過監控發現MYSQL服務運行正常。
如果訪問nagios頁面報下圖錯誤
解決方法:修改/usr/local/nagios/etc/cgi.cfg文件
三、Nagios通過NRPE監控遠程主機系統狀況(如msyql主機)
NRPE總共由兩部分組成:
check_nrpe插件:運行在監控主機上 (即nagios主機)
NRPE daemon:運行在遠程的linux主機上(通常就是被監控機)
整個的監控過程:
當Nagios需要監控某個遠程linux主機的服務或者資源情況時:
1:nagios運行check_nrpe插件,我們要在nagios配置文件中告訴它要檢查什麼.
2:check_nrpe插件會通過SSL連接到遠程的NRPE daemon.
3:NRPE daemon會運行相應的nagios插件來執行檢查本地資源或服務.
4:NRPE daemon將檢查的結果返回給check_nrpe插件,插件將其遞交給nagios做處理.
注意:NRPE daemon需要nagios插件和Nrpe一起安裝在遠程被監控linux主機上,否則,daemon不能做任何的監控. 別外因爲它們間的通信是加密的SSL,所以需要安裝SSL
這個插件需要openssl的支持,沒有就直接安裝一下(yum install openssl-devel)
1、遠程主機設定(即被監控主機設定)這裏仍然對mysql服務器進行監控,在mysql主機上進行如下操作:
被監控端只需安裝nagios-plugins和nrpe就可以的
創建nagios用戶:
編譯安裝nagios-plugins插件上:
安裝xinetd軟件包:
編譯安裝nrpe軟件包:
注:make install-daemon //安裝守護進程
make install-daemon-config //安裝配置文件
make install-xinetd //安裝xinetd腳本
配置nrpe,添加nrpe 服務
vi /etc/xinetd.d/nrpe 修改如下行
only_from = 127.0.0.1 192.168.10.100 //在後面增加監控主機(即nagios服務器)的地址192.168.10.100,以空格間隔
//改後 only_from = 127.0.0.1 192.168.10.100
如下圖所示:
編輯/etc/services文件,增加NRPE服務
vi /etc/services 在該文件尾部添加如下行
nrpe 5666/tcp #nrpe服務監聽端口
修改後如下圖:
vi /usr/local/nagios/etc/nrpe.cfg 修改如下行
將下圖中的#註釋去掉並進行修改
修改後效果如下圖:
command[check_disk]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /
注:command[check_disk]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p / #根分區監測
重啓xinetd服務 ,查看NRPE是否已經啓動
可以看到5666端口已經在監聽了,並確保防火牆允許此端口
附錄:
/usr/local/nagios/libexec/check_nrpe –h查看這個命令的用法
可以看到用法是check_nrpe –H 被監控的主機 -c要執行的監控命令
注意:-c後面接的監控命令必須是nrpe.cfg文件中定義的.也就是NRPE daemon只運行nrpe.cfg中所定義的命令
查看NRPE的監控命令
vim /usr/local/nagios/etc/nrpe.cfg //內容如下:
# The following examples use hardcoded command arguments...
command[check_users]=/usr/local/nagios/libexec/check_users -w 5 -c 10
command[check_load]=/usr/local/nagios/libexec/check_load -w 15,10,5 -c 30,25,20
command[check_hda1]=/usr/local/nagios/libexec/check_disk -w 20 -c 10 -p /dev/hda1
command[check_zombie_procs]=/usr/local/nagios/libexec/check_procs -w 5 -c 10 -s Z
command[check_total_procs]=/usr/local/nagios/libexec/check_procs -w 150 -c 200
注意:其他命令需要自行添加
也就是check_nrpe 的-c參數可以接的內容,等號(=)後面是實際執行的插件程序(只這與commands.cfg中定義命令的形式十分相似,不過是寫在了一行).也就是說check_users就是等號後面/usr/local/nagios/libexec/check_users -w 5 -c 10的簡稱.
上面這5行定義的命令分別是檢測登陸用戶數,cpu負載,hda1的容量,殭屍進程,總進程數.各條命令具體的含義見插件用法(執行”插件程序名 –h”)
如:
由於-c後面只能接nrpe.cfg中定義的命令,也就是說現在我們只能用上面定義的這五條命令.可以在本機實驗一下.執行
/usr/local/nagios/libexec/check_nrpe -H localhost -c check_users
/usr/local/nagios/libexec/check_nrpe -H localhost -c check_load
/usr/local/nagios/libexec/check_nrpe -H localhost -c check_hda1
/usr/local/nagios/libexec/check_nrpe -H localhost -c check_zombie_procs
/usr/local/nagios/libexec/check_nrpe -H localhost -c check_total_procs
2、 監控主機設置(即nagios服務器)
編譯安裝nrpe軟件包:
執行下列命令,如能看到下圖輸出說明連接正常。
/usr/local/nagios/libexec/check_nrpe -H 192.168.10.101
#vi /usr/local/nagios/etc/objects/commands.cfg 添加如下行
附錄:
上圖含義如下
command_name check_nrpe
定義命令名稱爲check_nrpe,在services.cfg中要使用這個名稱.
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
用$USER1$代替/usr/local/nagios/libexec
這是定義實際運行的插件程序.這個命令行的書寫要完全按照check_nrpe這個命令的用法.不知道用法的就用check_nrpe –h查看; -c後面帶的$ARG1$參數是傳給nrpe daemon執行的檢測命令,之前說過了它必須是nrpe.cfg中所定義的那5條命令中的其中一條.
注:比如想要監控mysql主機(192.168.10.101)的SWAP分區,你需要mysql主機的nrpe.cfg面加入
重啓xinetd服務。
在監控主機上執行:
如果這裏沒有定義好,那你在服務器端會報錯誤:NRPE command ‘check_swap’ not defined
在監控主機(即nagios服務器)的/usr/local/nagios/etc/objects/services.cfg文件中添加要監控的資源,如下圖所示:
保存退出並執行下列命令檢查是否有錯誤:
最後重新加載nagios.cfg文件。
通過瀏覽器訪問nagios的web頁面,查看新添加的監控資源(swap信息)
附錄:
在services.cfg中使用check_nrpe的時候要用!帶上這個參數
#vi /usr/local/nagios/etc/objects/services.cfg 添加如下行
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg #檢測無誤後重載nagios
service nagios reload
注:
define service{
use generic-service //使用的模板
host_name mysqlhost //被監控的主機名,這裏注意必須是linux且運行着nrpe,而且必須是hosts.cfg中定義的
service_description check-disk //監控項目的名稱
check_command check_nrpe!check_disk //監控命令是check_nrpe,是在commands.cfg中定義的,帶的參數是check_disk,是在nrpe.cfg中定義的
max_check_attempts 5 //最大檢測嘗試次數
normal_check_interval 3 //正常檢測間隔時間
retry_check_interval 2 //重試檢測間隔時間
check_period 24x7 //監控週期設置
notification_interval 10 //通知間隔
notification_period 24x7 //通知週期設置
notification_options w,u,c,r //定義什麼狀態時報警
contact_groups sagroup //報警聯繫組
}
訪問ngios的web頁面:如下所示,能過監控發現MYSQL系統的運行情況。
四:通過郵件發送報警
nagios除了豐富的監控功能外,報警功能相當的強大。對於報警而言,常用的無非就是郵件和短信報警兩種方式,本文中主要是寫的nagios的郵件報警的功。
郵件報警的配置
我們只需要編輯/usr/local/nagios/etc/object下的contact.cfg文件,在email後添加管理員的郵箱即可。一般而言,如果監控項目的分工不是太細的話就是管理員可以負責所有的監控、並對其進行處理的話,可以直接將一個或者多個管理員的郵件地址寫上,使用空格或者逗號隔開。
但是如果監控的內容中服務器有單獨的管理員,網絡有單獨的管理員的話,我們就可以定義多個contact(聯繫人),然後再用contactgroup(聯繫組)對各contact進行分組。
例如管理網絡的有兩人,管理服務器的有兩個人,我們就可以定義兩個contactgroup,然後定義四個管理員的contact,如下例是當前我正在使用的contact.cfg,服務器管理員有兩名,網絡管理員有兩名
contact.cfg的配置
define contact{
contact_name zhang1
use generic-contact
alias zhang1
service_notification_period 24x7
host_notification_period 24x7
service_notification_options w,u,c,r
host_notification_options d,u,r
service_notification_commands notify-service-by-email
host_notification_commands notify-host-by-email
email [email protected]
}
define contact{
contact_name zhang2
use generic-contact
alias zhang2
service_notification_period 24x7
host_notification_period 24x7
service_notification_options w,u,c,r
host_notification_options d,u,r
service_notification_commands notify-service-by-email
host_notification_commands notify-host-by-email
email [email protected]
}
define contact{
contact_name li1
use generic-contact
alias li1
service_notification_period 24x7
host_notification_period 24x7
service_notification_options w,u,c,r
host_notification_options d,u,r
service_notification_commands notify-service-by-email
host_notification_commands notify-host-by-email
email [email protected]
}
define contact{
contact_name li2
use generic-contact
alias li2
service_notification_period 24x7
host_notification_period 24x7
service_notification_options w,u,c,r
host_notification_options d,u,r
service_notification_commands notify-service-by-email
host_notification_commands notify-host-by-email
email [email protected]
}
define contactgroup{
contactgroup_name network
alias network
members zhang1,zhang2
}
define contactgroup{
contactgroup_name system
alias system
members li1,li2
}
注:
1、在commands.cfg文件中要定義發郵件的命令(默認就存在)
2、在hosts.cfg和services.cfg文件添加有關發通知的聯繫人信息和間隔等。
3、nagios是利用本地的郵件服務器發送郵件(sendmail或postfix),只要確保sendmail或postfix啓動就可以。