前面搭建的Nagios服務雖然能顯示信息,能報警。可是在企業工做中還會須要一個歷史趨勢圖,跟蹤每個業務的長期趨勢,而且能以圖形的方式展現,例如:根據磁盤的剩餘趨勢,肯定是否須要提早購買磁盤。php
PNP是一款配合Nagios出圖的軟件,官方站點爲:http://www.pnp4nagios.orghtml
[root@Nagios 6]# yum -y install cairo pango zlib zlib-devel freetype freetype-devel gd gd-devel [root@Nagios 6]# rpm -qa cairo pango zlib zlib-devel freetype freetype-devel gd gd-devel freetype-2.3.11-17.el6.x86_64 zlib-1.2.3-29.el6.x86_64 zlib-devel-1.2.3-29.el6.x86_64 freetype-devel-2.3.11-17.el6.x86_64 gd-2.0.35-11.el6.x86_64 gd-devel-2.0.35-11.el6.x86_64 cairo-1.8.8-6.el6_6.x86_64 pango-1.28.1-11.el6.x86_64 #而後安裝rrdtool依賴的libart_lgpl相關軟件包,這個軟件包要優先於rrdtool安裝 [root@Nagios 6]# yum -y install libart_lgpl libart_lgpl-devel [root@Nagios 6]# rpm -qa libart_lgpl libart_lgpl-devel libart_lgpl-2.3.20-5.1.el6.x86_64 libart_lgpl-devel-2.3.20-5.1.el6.x86_64 #PNP工具最終是經過rrdtool實現的畫圖,所以須要提早安裝rrdtool [root@Nagios 6]# yum -y install rrdtool rrdtool-devel [root@Nagios 6]# rpm -qa rrdtool rrdtool-devel rrdtool-1.3.8-10.el6.x86_64 rrdtool-devel-1.3.8-10.el6.x86_64 [root@Nagios 6]# which rrdtool /usr/bin/rrdtool
此處選擇0.4.14的PNP版本,若是選擇高版本在出圖方面可能會有坑,正常狀況下,選04版本已經足夠了,所以,若是沒有特殊需求,建議最好徹底按照書本測試步驟,在弄清楚以後再變通版本。linux
PNP軟件沒法yum安裝,可經過編譯的方式進行安裝,操做過程以下:ios
[root@Nagios ~]# yum -y install perl-Time-HiRes [root@Nagios ~]# cd nagios/ [root@Nagios nagios]# ll pnp-0.4.14.tar.gz -rw-r--r--. 1 root root 455593 Aug 12 12:22 pnp-0.4.14.tar.gz [root@Nagios nagios]# tar xf pnp-0.4.14.tar.gz -C /usr/src/ [root@Nagios nagios]# cd /usr/src/pnp-0.4.14/ [root@Nagios pnp-0.4.14]# ./configure \ > --with-rrdtool \ > --with-perfdata-dir=/usr/local/nagios/share/perfdata/ [root@Nagios pnp-0.4.14]# make all [root@Nagios pnp-0.4.14]# make install [root@Nagios pnp-0.4.14]# make install-config [root@Nagios pnp-0.4.14]# make install-init [root@Nagios pnp-0.4.14]# ll /usr/local/nagios/libexec/ | grep process -rwxr-xr-x 1 nagios nagios 31813 Aug 19 23:04 process_perfdata.pl
若是configure後出現以下警告信息,請忽略:web
################# # WARNING:The RRDs Perl Modules are not found on your System # Using RRDs will speedup things in larg ##################
PNP提供了一個獲取數據出圖的Perl腳本,能夠用以下命令查到:面試
[root@Nagios pnp-0.4.14]# ll /usr/local/nagios/libexec/ | grep process -rwxr-xr-x 1 nagios nagios 31813 Aug 19 23:04 process_perfdata.pl
1)執行編輯命令vi,須要改nagios.cfg主配置文件833行,將以下參數對應的值從0改成1,表示記錄數據。shell
[root@Nagios nagios]# sed -n '833p' /usr/local/nagios/etc/nagios.cfg process_performance_data=0 #默認0,改成1 #而後繼續向下大概在845,846行的位置,找到以下兩項,取消參數開頭的註釋。 [root@Nagios nagios]# sed -n '845,846p' /usr/local/nagios/etc/nagios.cfg #host_perfdata_command=process-host-perfdata #取消註釋 #service_perfdata_command=process-service-perfdata #取消註釋
2)執行編輯命令vi,須要修改commands.cfg配置文件,定義出圖獲取數據的命令。vim
[root@Nagios nagios]# sed -n '227,238p' /usr/local/nagios/etc/objects/commands.cfg # 'process-host-perfdata' command definition define command{ command_name process-host-perfdata command_line /usr/bin/printf "%b" "$LASTHOSTCHECK$\t$HOSTNAME$\t$HOSTSTATE$\t$HOSTATTEMPT$\t$HOSTSTATETYPE$\t$HOSTEXECUTIONTIME$\t$HOSTOUTPUT$\t$HOSTPERFDATA$\n" >>/usr/local/nagios/var/host-perfdata.out } # 'process-service-perfdata' command definition define command{ command_name process-service-perfdata command_line /usr/bin/printf "%b" "$LASTSERVICECHECK$\t$HOSTNAME$\t$SERVICEDESC$\t$SERVICESTATE$\t$SERVICEATTEMPT$\t$SERVICESTATETYPE$\t$SERVICEEXECUTIONTIME$\t$SERVICELATENCY$\t$SERVICEOUTPUT$\t$SERVICEPERFDATA$\n" >>/usr/local/nagios/var/service-perfdata.out }
如今刪除上述的默認配置,而後將其修改成以下的配置內容:瀏覽器
[root@Nagios nagios]# sed -n '227,238p' /usr/local/nagios/etc/objects/commands.cfg # 'process-host-perfdata' command definition define command{ command_name process-host-perfdata command_line /usr/local/nagios/libexec/process_perfdata.pl } # 'process-service-perfdata' command definition define command{ command_name process-service-perfdata command_line /usr/local/nagios/libexec/process_perfdata.pl }
3)執行檢查語法命令bash
[root@Nagios nagios]# /etc/init.d/nagios checkconfig #..以上省略若干... Total Warnings: 0 Total Errors: 0 Things look okay - No serious problems were detected during the pre-flight check OK
4)執行命令使Nagios配置文件生效。
[root@Nagios nagios]# /etc/init.d/nagios reload Running configuration check...done. Reloading nagios configuration...done
5)此時打開瀏覽器訪問「http://192.168.0.200/nagios/pnp/」,應該會出現以下圖所示的圖形界面,可是沒有業務數據顯示。
若是同窗們打開出現以下錯誤:
若是出現上圖中的錯誤,先彆着急,可能過一下子從新訪問上述地址就會恢復正常。
若是過了很長時間從新訪問上述地址還不正常,能夠執行以下命令看看,而後再訪問試試:
yum -y install php-gd gd gd-devel
7.1結尾的圖形是沒有具體的業務數據圖形趨勢的,由於那時尚未爲Nagios的各個主機和具體要監控的服務配置獲取數據信息,下面是讓各個主機或服務獲取數據的配置。
若是要讓全部的主機獲取數據並出趨勢圖,則需編輯Nagios的主機hosts.cfg文件,不過,只要在每個被監控主機的配置下面增長同一個參數項「process_perf_data 1」便可。操做步驟以下:
[root@Nagios nagios]# cd /usr/local/nagios/etc/objects/ [root@Nagios objects]# cat hosts.cfg # Define a host for the local machine define host{ use linux-server host_name web01 alias web01 address 192.168.0.223 process_perf_data 1 #爲web01增長1此行,表示記錄web01主機狀態數據 } define host{ use linux-server host_name web02 alias web02 address 192.168.0.224 process_perf_data 1 #爲Web02增長此行,表示記錄web02主機狀態數據 } define hostgroup{ hostgroup_name linux-servers alias Linux Servers members web01,web02
若是須要全部的主機對應的服務獲取數據並出趨勢圖,則要編輯Nagios的服務配置文件services.cfg,固然,也只須要在每個對應服務下面增長同一個參數項便可,即「process_perf_data 1」,配置步驟以下:
[root@Nagios objects]# cat /usr/local/nagios/etc/objects/services.cfg define service { use generic-service host_name web01,web02 service_description Disk Partition check_command check_nrpe!check_disk process_perf_data 1 #爲每一個service添加此行 } define service { use generic-service host_name web01,web02 service_description Swap Useage check_command check_nrpe!check_swap process_perf_data 1 #爲每一個service添加此行 } define service { use generic-service host_name web01,web02 service_description MEM Useage check_command check_nrpe!check_mem process_perf_data 1 #爲每一個service添加此行 } define service { use generic-service host_name web01,web02 service_description Current Load check_command check_nrpe!check_load process_perf_data 1 #爲每一個service添加此行 } define service { use generic-service host_name web01,web02 service_description Disk lostat check_command check_nrpe!check_iostat!5!11 process_perf_data 1 #爲每一個service添加此行 } define service { use generic-service host_name web01,web02 service_description PING check_command check_ping!100.0,20%!500.0,60% process_perf_data 1 #爲每一個service添加此行 } #url examples http://www.yunjisuan.com define service { use generic-service host_name web01 service_description www_url check_command check_weburl! -H www.yunjisuan.com process_perf_data 1 #爲每一個service添加此行 } define service { use generic-service host_name web01 service_description www_url check_command check_http process_perf_data 1 #爲每一個service添加此行 } define service { use generic-service host_name web01 ervice_description www_static_url check_command check_weburl! -H www.yunjisuan.com -u /static/test.html process_perf_data 1 #爲每一個service添加此行 } define service { use generic-service host_name web01 service_description www_yunjisuan_url check_command check_weburl! -H www.yunjisuan.com -u "/article/index.phpm=article&a=list&id=670" process_perf_data 1 #爲每一個service添加此行 } #tcp examples define service { use generic-service host_name web01 service_description ssh_22 check_command check_tcp! 22 process_perf_data 1 #爲每一個service添加此行 } define service { use generic-service host_name web01 service_description http_80 check_command check_tcp! 80 process_perf_data 1 #爲每一個service添加此行 }
因爲每一個主機對應的服務內容太多了,所以能夠採起在全部服務對應的統一模板裏添加配置參數的方式,這樣可以使全部的服務均可以生效。這裏每一個服務使用的模板就是由服務裏的「use generic-service」這個選項肯定的,查看與模板文件裏服務模板generic-service名對應的服務參數:
[root@Nagios objects]# sed -n '154,177p' /usr/local/nagios/etc/objects/templates.cfg | awk -F ";" '{print $1}' name generic-service active_checks_enabled 1 passive_checks_enabled 1 parallelize_check 1 obsess_over_service 1 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 check_period 24x7 max_check_attempts 3 normal_check_interval 10 retry_check_interval 2 contact_groups admins notification_options w,u,c,r notification_interval 60 notification_period 24x7 register 0 }
提示:
爲了看的清晰,這裏去掉了全部註釋,服務的模板裏默認已經配置了「process_perf_data 1」,即凡是使用templates.cfg模板文件里名字爲generic-service的模板,均做爲服務的模板,這樣就至關於全部服務都執行generic-service模板裏的配置了。
配置完畢重啓Nagios服務:
[root@Nagios objects]# /etc/init.d/nagios reload Running configuration check...done. Reloading nagios configuration...done
到此,若是等一段時間,而後查看PNP URL就能夠發現生成了圖形數據,有些數據須要壓力測試或者真實環境才能看到,例如主機負載等。趨勢圖以下圖所示:
在整合PNP URL超連接到Nagios Web界面後,會在全部的主機或主機對應服務的前面,出現一個閃電樣的超連接1圖標,單擊超連接,就能夠查看到對應的主機或服務實際的監控狀態趨勢圖。
默認狀況PNP的URL爲http://192.168.0.200/nagios/pnp/index.php和Nagios不在一個界面裏,因此查看主機或服務對應的趨勢圖很費勁。那麼如何完善呢?
咱們能夠直接在host.cfg裏在但願出圖的主機裏配置以下一行參數:
action_url /nagios/pnp/index.php?host=$HOSTNAME$ #實際上就是給URL傳個主機參數
而後編輯host.cfg,增長上述配置。配置結果以下:
[root@Nagios objects]# cat /usr/local/nagios/etc/objects/hosts.cfg # Define a host for the local machine define host{ use linux-server host_name web01 alias web01 address 192.168.0.223 process_perf_data 1 action_url /nagios/pnp/index.php?host=$HOSTNAME$ #添加超連接圖標 } define host{ use linux-server host_name web02 alias web02 address 192.168.0.224 process_perf_data 1 action_url /nagios/pnp/index.php?host=$HOSTNAME$ #添加超連接圖標 } define hostgroup{ hostgroup_name linux-servers alias Linux Servers members web01,web02 }
接着,檢查語法從新加載Nagios
[root@Nagios objects]# /etc/init.d/nagios reload Running configuration check...done. Reloading nagios configuration...done
若是配置過程都正確,打開瀏覽器訪問Nagios界面,最終能夠看到以下圖所示的圖形。圖中,右邊方框裏標記的白色方格里,中間帶波浪線的就是超連接圖標。單擊進去便可看到一個主機全部的服務圖。
和上述主機添加超連接圖標的配置幾乎同樣,執行「vi /usr/local/nagios/etc/objects/services.cfg」,添加以下內容:
action_url /nagios/pnp/index.php?host=$HOSTNAME$&srv=$SERVICEDESC$ #實際上就是給URL傳了一個主機的參數和一個主機對應服務的參數
給具體服務增長超連接配置方法是,直接在define service {}大括號中增長參數便可,具體配置的內容以下「action_url參數部分」:
[root@Nagios objects]# cat /usr/local/nagios/etc/objects/services.cfg define service { use generic-service host_name web01,web02 service_description Disk Partition check_command check_nrpe!check_disk process_perf_data 1 action_url /nagios/pnp/index.php?host=$HOSTNAME$&srv=$SERVICEDESC$ #給具體服務增長超連接配置 } define service { use generic-service host_name web01,web02 service_description Swap Useage check_command check_nrpe!check_swap process_perf_data 1 action_url /nagios/pnp/index.php?host=$HOSTNAME$&srv=$SERVICEDESC$ #給具體服務增長超連接配置 } define service { use generic-service host_name web01,web02 service_description MEM Useage check_command check_nrpe!check_mem process_perf_data 1 action_url /nagios/pnp/index.php?host=$HOSTNAME$&srv=$SERVICEDESC$ #給具體服務增長超連接配置 } define service { use generic-service host_name web01,web02 service_description Current Load check_command check_nrpe!check_load process_perf_data 1 } define service { use generic-service host_name web01,web02 service_description Disk lostat check_command check_nrpe!check_iostat!5!11 process_perf_data 1 } define service { use generic-service host_name web01,web02 service_description PING check_command check_ping!100.0,20%!500.0,60% process_perf_data 1 } #url examples http://www.yunjisuan.com define service { use generic-service host_name web01 service_description www_url check_command check_weburl! -H www.yunjisuan.com process_perf_data 1 } define service { use generic-service host_name web01 service_description www_url check_command check_http process_perf_data 1 } define service { use generic-service host_name web01 service_description www_static_url check_command check_weburl! -H www.yunjisuan.com -u /static/test.html process_perf_data 1 } define service { use generic-service host_name web01 service_description www_yunjisuan_url check_command check_weburl! -H www.yunjisuan.com -u "/article/index.phpm=article&a=list&id=670" process_perf_data 1 } #tcp examples define service { use generic-service host_name web01 service_description ssh_22 check_command check_tcp! 22 process_perf_data 1 } define service { use generic-service host_name web01 service_description http_80 check_command check_tcp! 80 process_perf_data 1 }
配置完成後的效果圖以下:
也能夠快速設置讓所有的服務出圖,找到templates.cfg模板文件,找到默認的服務名generic-service,在這個服務名大括號的內部結尾增長「action_url /nagios/pnp/index.php?host=$HOSTNAME$&srv=$SERVICEDESC$ 」一行便可。
[root@Nagios objects]# sed -n '153,178p' /usr/local/nagios/etc/objects/templates.cfg | awk -F ";" '{print $1}' define service{ name generic-service active_checks_enabled 1 passive_checks_enabled 1 parallelize_check 1 obsess_over_service 1 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 check_period 24x7 max_check_attempts 3 normal_check_interval 10 retry_check_interval 2 contact_groups admins notification_options w,u,c,r notification_interval 60 notification_period 24x7 register 0 action_url /nagios/pnp/index.php?host=$HOSTNAME$&srv=$SERVICEDESC$ #在最後添加此行 }
這樣全部主機的全部服務都將增長出圖的超連接圖標了。
如今,人要檢查語法並從新加載Nagios
[root@Nagios objects]# /etc/init.d/nagios reload Running configuration check...done. Reloading nagios configuration...done
所有主機和服務的監控圖最終結果以下圖所示:
此時,單擊任意一個超連接圖標,就能夠查看對應的主機或服務的業務趨勢圖了,到此,Nagios的主機和服務出圖的配置就完成了,是否是很簡單?
想真正繪製出業務的趨勢圖全靠下面命令生成的數據。這些歷史數據要備份好。
[root@Nagios objects]# ll /usr/local/nagios/share/perfdata/ total 8 drwxr-xr-x 2 nagios nagios 4096 Aug 20 02:10 web01 drwxr-xr-x 2 nagios nagios 4096 Aug 20 02:03 web02 [root@Nagios objects]# tree /usr/local/nagios/share/perfdata/ /usr/local/nagios/share/perfdata/ |-- web01 | |-- Current_Load.rrd | |-- Current_Load.xml | |-- Disk_Partition.rrd | |-- Disk_Partition.xml | |-- Disk_lostat.rrd | |-- Disk_lostat.xml | |-- MEM_Useage.rrd | |-- MEM_Useage.xml | |-- PING.rrd | |-- PING.xml | |-- Swap_Useage.rrd | |-- Swap_Useage.xml | |-- http_80.rrd | |-- http_80.xml | |-- ssh_22.rrd | |-- ssh_22.xml | |-- www_static_url.rrd | |-- www_static_url.xml | |-- www_url.rrd | |-- www_url.xml | |-- www_yunjisuan_url.rrd | `-- www_yunjisuan_url.xml `-- web02 |-- PING.rrd `-- PING.xml 2 directories, 24 files
要將Nagios故障報警給管理員時,經常使用的方式包括郵件報警和手機報警,下面分別介紹
- 普通郵件報警就是在故障發生或恢復時,將報警信息發到系統管理員或相關維護人員的信箱中,通常來講最好使用公司內部信箱做爲報警信箱。同窗們回家學習測試時若是用QQ,126等信箱可能會有收不到郵件的狀況或者被看成垃圾郵件了。
- 通常白天上班時,郵件報警還算比較及時,可是若是人不在計算機旁,郵件報警就不行了,所以,郵件報警只適合不是特別重要的業務,或者做爲發送大量報警信息中的一個輔助方式,如硬盤,內存,及日誌相關等不須要及時解決的服務報警。故而,在生產環境中,郵件報警通常會結合其餘報警方式一塊兒使用。
- 那麼,下面就來看一下郵件報警的基本配置方法。
首先,添加監控報警的接收Email地址
[root@Nagios objects]# sed -n '35p' /usr/local/nagios/etc/objects/contacts.cfg | awk -F ";" '{print $1}' email 215379068@qq.com #將本行內容改爲你的QQ郵箱
打開postfix服務
[root@Nagios objects]# /etc/init.d/postfix start Starting postfix: [ OK ] [root@Nagios objects]# echo "/etc/init.d/postfix start" >> /etc/rc.local [root@Nagios objects]# tail -3 /etc/rc.local touch /var/lock/subsys/local /etc/init.d/nagios start /etc/init.d/postfix start
用命令測試發郵件:
[root@Nagios objects]# echo "this is test email" | mail -s "yunjisuan" 215379068@qq.com #將郵件從QQ攔截名單取出,而後添加白名單
特別警示!
同窗們在家玩Nagios必定要用本身的QQ玩,誰給我發,我和誰急-_-!
templates.cfg系統定義模板
#模板:generic-service [root@Nagios objects]# sed -n '153,178p' /usr/local/nagios/etc/objects/templates.cfg | awk -F ";" '{print $1}' define service{ name generic-service active_checks_enabled 1 passive_checks_enabled 1 parallelize_check 1 obsess_over_service 1 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 check_period 24x7 #告訴Nagios檢查服務的時間段 max_check_attempts 3 #對Nagios服務的最大檢查次數 normal_check_interval 10 #兩次檢查的時間間隔 retry_check_interval 2 #從新檢查時間間隔 contact_groups admins #指定聯繫人主 notification_options w,u,c,r #定義何種異常能夠被通知(email),w即warn表示警告狀態,r即recover,表示恢復狀態 notification_interval 60 #服務出現異常,故障一直沒解決,Nagios再次對聯繫人發出通知的時間間隔 notification_period 24x7 #指定email的時間段 register 0 action_url /nagios/pnp/index.php?host=$HOSTNAME$&srv=$SERVICEDESC$ } #模板:generic-contact [root@Nagios objects]# sed -n '28,37p' /usr/local/nagios/etc/objects/templates.cfg | awk -F ";" '{print $1}' define contact{ name generic-contact #聯繫人名稱 service_notification_period 24x7 #服務異常,發送通知時間段 host_notification_period 24x7 #主機異常,發送通知時間段 service_notification_options w,u,c,r,f,s #何種異常進行通知 host_notification_options d,u,r,f,s #何種異常進行通知 service_notification_commands notify-service-by-email #定義服務異常發送郵件命令,commands.cfg文件裏定義 host_notification_commands notify-host-by-email #定義主機異常發送郵件命令,commands.cfg文件裏定義 register 0 }
commands.cfg命令定義模板
#定義發送郵件命令 [root@Nagios objects]# sed -n '27,37p' commands.cfg # 'notify-host-by-email' command definition define command{ command_name notify-host-by-email #主機異常發送郵件命令的定義 command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /bin/mail -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$ } # 'notify-service-by-email' command definition define command{ command_name notify-service-by-email #服務異常發送郵件命令的定義 command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$\n" | /bin/mail -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$ }
contacts.cfg聯繫人定義模板
[root@Nagios objects]# cat contacts.cfg | egrep -v "#|^$" | awk -F ";" '{print $1}' define contact{ contact_name nagiosadmin #定義成員 use generic-contact alias Nagios Admin #成員別名 email 215379068@qq.com #成員郵箱 } define contactgroup{ contactgroup_name admins #聯繫人組名 alias Nagios Administrators #別名 members nagiosadmin #組員名單定義 }
前文在部署Nagios服務時已經安裝了nagios-plugins-1.4.16.tar.gz,這個軟件包就是Nagios的插件安裝包,安裝後,執行ls -l /usr/local/nagios/libexec能夠看到以下插件內容:
[root@Nagios objects]# ls -l /usr/local/nagios/libexec/ total 5288 lrwxrwxrwx 1 root root 27 Aug 18 08:29 check_111 -> /service/scripts/check_test -rwxr-xr-x. 1 nagios nagios 376524 Aug 14 10:11 check_apt -rwxr-xr-x. 1 nagios nagios 2245 Aug 14 10:11 check_breeze -rwxr-xr-x. 1 nagios nagios 128296 Aug 14 10:11 check_by_ssh lrwxrwxrwx. 1 root root 9 Aug 14 10:11 check_clamd -> check_tcp -rwxr-xr-x. 1 nagios nagios 85694 Aug 14 10:11 check_cluster -r-sr-xr-x. 1 root nagios 123603 Aug 14 10:11 check_dhcp -rwxr-xr-x. 1 nagios nagios 417895 Aug 14 10:11 check_disk -rwxr-xr-x. 1 nagios nagios 9148 Aug 14 10:11 check_disk_smb -rwxr-xr-x. 1 nagios nagios 80689 Aug 14 10:11 check_dummy -rwxr-xr-x. 1 nagios nagios 3056 Aug 14 10:11 check_file_age -rwxr-xr-x. 1 nagios nagios 6318 Aug 14 10:11 check_flexlm lrwxrwxrwx. 1 root root 9 Aug 14 10:11 check_ftp -> check_tcp -rwxr-xr-x. 1 nagios nagios 520614 Aug 14 10:11 check_http -r-sr-xr-x. 1 root nagios 133689 Aug 14 10:11 check_icmp -rwxr-xr-x. 1 nagios nagios 93416 Aug 14 10:11 check_ide_smart -rwxr-xr-x. 1 nagios nagios 15137 Aug 14 10:11 check_ifoperstatus -rwxr-xr-x. 1 nagios nagios 12601 Aug 14 10:11 check_ifstatus lrwxrwxrwx. 1 root root 9 Aug 14 10:11 check_imap -> check_tcp -rwxr-xr-x. 1 nagios nagios 6890 Aug 14 10:11 check_ircd lrwxrwxrwx. 1 root root 9 Aug 14 10:11 check_jabber -> check_tcp -rwxr-xr-x. 1 nagios nagios 106573 Aug 14 10:11 check_load -rwxr-xr-x. 1 nagios nagios 6020 Aug 14 10:11 check_log -rwxr-xr-x. 1 nagios nagios 20287 Aug 14 10:11 check_mailq -rwxr-xr-x. 1 nagios nagios 93142 Aug 14 10:11 check_mrtg -rwxr-xr-x. 1 nagios nagios 92487 Aug 14 10:11 check_mrtgtraf -rwxr-xr-x. 1 nagios nagios 105606 Aug 14 10:11 check_nagios lrwxrwxrwx. 1 root root 9 Aug 14 10:11 check_nntp -> check_tcp lrwxrwxrwx. 1 root root 9 Aug 14 10:11 check_nntps -> check_tcp -rwxrwxr-x. 1 nagios nagios 76744 Aug 14 10:32 check_nrpe -rwxr-xr-x. 1 nagios nagios 127679 Aug 14 10:11 check_nt -rwxr-xr-x. 1 nagios nagios 130078 Aug 14 10:11 check_ntp -rwxr-xr-x. 1 nagios nagios 119167 Aug 14 10:11 check_ntp_peer -rwxr-xr-x. 1 nagios nagios 117728 Aug 14 10:11 check_ntp_time -rwxr-xr-x. 1 nagios nagios 159372 Aug 14 10:11 check_nwstat -rwxr-xr-x. 1 nagios nagios 8324 Aug 14 10:11 check_oracle -rwxr-xr-x. 1 nagios nagios 108934 Aug 14 10:11 check_overcr -rwxr-xr-x. 1 nagios nagios 132691 Aug 14 10:11 check_ping -rwxr-xr-x 1 nagios nagios 6184 Aug 19 23:04 check_pnp_rrds.pl lrwxrwxrwx. 1 root root 9 Aug 14 10:11 check_pop -> check_tcp -rwxr-xr-x. 1 nagios nagios 396833 Aug 14 10:11 check_procs -rwxr-xr-x. 1 nagios nagios 106492 Aug 14 10:11 check_real -rwxr-xr-x. 1 nagios nagios 9584 Aug 14 10:11 check_rpc -rwxr-xr-x. 1 nagios nagios 1412 Aug 14 10:11 check_sensors lrwxrwxrwx. 1 root root 9 Aug 14 10:11 check_simap -> check_tcp -rwxr-xr-x. 1 nagios nagios 446511 Aug 14 10:11 check_smtp lrwxrwxrwx. 1 root root 9 Aug 14 10:11 check_spop -> check_tcp -rwxr-xr-x. 1 nagios nagios 103000 Aug 14 10:11 check_ssh lrwxrwxrwx. 1 root root 9 Aug 14 10:11 check_ssmtp -> check_tcp -rwxr-xr-x. 1 nagios nagios 108233 Aug 14 10:11 check_swap -rwxr-xr-x. 1 nagios nagios 160386 Aug 14 10:11 check_tcp -rwxr-xr-x. 1 nagios nagios 105022 Aug 14 10:11 check_time lrwxrwxrwx. 1 root root 9 Aug 14 10:11 check_udp -> check_tcp -rwxr-xr-x. 1 nagios nagios 117534 Aug 14 10:11 check_ups -rwxr-xr-x. 1 nagios nagios 83434 Aug 14 10:11 check_users -rwxr-xr-x. 1 nagios nagios 2939 Aug 14 10:11 check_wave -rwxr-xr-x. 1 nagios nagios 109723 Aug 14 10:11 negate -rwxr-xr-x 1 nagios nagios 31813 Aug 19 23:04 process_perfdata.pl -rwxr-xr-x. 1 nagios nagios 103242 Aug 14 10:11 urlize -rwxr-xr-x. 1 nagios nagios 1904 Aug 14 10:11 utils.pm -rwxr-xr-x. 1 nagios nagios 2728 Aug 14 10:11 utils.sh
提示:
默認安裝後大概有60個左右的插件,數量比較多,這裏只介紹幾個常見的。
以上結果內容都是Nagios插件,如今你們應該對Nagios插件有一個基本的瞭解了。其實,Nagios軟件自己僅僅是一個監控的平臺,若是要監控具體的主機及服務的狀態和數據信息,還必須配置或調用插件或程序文件才能完成任務,所以,若是沒有Nagios插件,Nagios就是一個空殼,啥都作不了。
- 既然已經安裝了Nagios的插件軟件包,爲何還要開發Nagios插件呢?
- 首先想說明的是,在生產場景中經常使用的大部分服務都是不須要編寫插件就能夠完成監控的,check_http,check_tcp,check_nrpe等這些自帶的插件已經很強大了。可是,仍然有部分咱們想要監控的服務,是Nagios未自帶插件的,如:監控LVS RS的lo網卡的VIP,監控NFS狀態,又或是監控iostat,mem,sar系統指標及相關APP應用(MQ隊列)等。這個時候咱們有兩個選擇,一個是去網上搜索,看看有沒有別人寫過的腳本,拿來使用或修改後使用;另外就是本身開發編寫腳本。這裏建議你們學會手工編寫插件,若是開始不會寫,能夠把網上別人分享的插件拿來改,改着改着就會寫了。
- 若是要開發插件,最好掌握一門開發語言,例如:Shell,Python。
- Nagios插件是Nagios提供的一種經過可擴展的方式部署的程序組件,該插件可經過Shell,Java,C/C++,PHP等多種語言開發,運維或者系統架構人員只要經過修改Nagios配置文件和相應參數,就能很方便的將該插件集成到Nagios中,實現對目標系統的監控。
- Nagios服務爲1插件程序提供了兩個返回值接口和插件交互:一個是插件執行後的退出狀態碼,另外一個是插件執行過程當中在控制檯打印的1第一行數據。退出狀態碼能夠被Nagios主程序做爲判斷被監控系統服務狀態的依據,控制檯打印的第一行數據能夠被Nagios主程序做爲被監控系統服務狀態的補充說明,會顯示在Web管理頁面,以下圖所示:
爲了管理Nagios插件,Nagios每查詢一個服務的狀態時,就會產生一個子進程,並使用來自該命令的輸出和退出代碼來肯定其具體的狀態。Nagios主程序可識別的插件的退出狀態碼和說明以下:
注意:
此處數字代碼的含義曾經有公司面試時考過。最後一種狀態一般表示該插件沒法肯定服務的狀態。例如,可能出現了網絡或內部錯誤。相關狀態能夠從以下文件中看到:
[root@Nagios objects]# head -7 /usr/local/nagios/libexec/utils.sh #! /bin/sh STATE_OK=0 STATE_WARNING=1 STATE_CRITICAL=2 STATE_UNKNOWN=3 STATE_DEPENDENT=4 #提示:結尾處比列舉的還多個狀態,但不經常使用
Nagios插件程序中須要調用監控服務規定的操做序列,並根據預先定義的規則,對返回結果進行分析,判斷服務的當前狀態,而後以指定的狀態碼退出程序,同時將對該狀態的說明不換行輸出到控制檯。
Nagios的插件開發不限制任何開發語言,只要該插件能被Nagios調用,並獲取到相應業務數據就OK,如能在命令行執行輸出結果也能夠,經常使用的插件語言有Shell,Perl,Python,PHP, C/C++。
如下腳本只是針對訪問客戶端192.168.0.223的IP的
[root@Nagios libexec]# cat check_url.sh #!/bin/bash # anthor:Mr.chen by 2017-8-20 wget -T 10 --spider 192.168.0.223 >/dev/null 2>&1 #用wget檢查192.168.0.223是否是能夠訪問,-T超時時間 --spider不下載網頁 if [ $? -eq 0 ];then #判斷上述wget命令返回值,0成功非0失敗 echo "URL 192.168.0.223 OK" exit 0 else echo "URL 192.168.0.223 CRITICAL" exit 2 fi
下面利用傳參把腳本改進爲通用的WebURL插件
[root@Nagios libexec]# cat check_url.sh #!/bin/bash # anthor:Mr.chen by 2017-8-20 PROGNAME=`basename $0` #取腳本名 PROGPATH=`dirname $0` #取腳本路徑 usage(){ #打印幫助 echo "Usage: /bin/sh ${PROGPATH}/${PROGNAME} url" exit 1 } [ $# -ne 1 ] && usage #參數個數不是1,打印幫助 wget -T 10 --spider $1 >/dev/null 2>&1 #URL地址改爲傳參 if [ $? -eq 0 ];then echo "URL $1 OK" exit 0 else echo "URL $1 CRITICAL" exit 2 fi
如下是監控WebURL的插件腳本專業型寫法
[root@Nagios libexec]# cat check_url.sh #!/bin/bash # anthor:Mr.chen by 2017-8-20 PROGNAME=`basename $0` PROGPATH=`dirname $0` usage(){ echo "Usage: /bin/sh ${PROGPATH}/${PROGNAME} url" exit 1 } [ $# -ne 1 ] && usage . $PROGPATH/utils.sh if wget -T 20 --spider $1 >/dev/null 2>&1;then echo "URL $1 OK" exit $STATE_OK else echo "URL $1 NO" exit $STATE_CRITICAL fi
最後手工測試如下改進的WebURL插件腳本
[root@Nagios libexec]# sh /usr/local/nagios/libexec/check_url.sh www.yunjisuan.com URL www.yunjisuan.com OK [root@Nagios libexec]# echo $? 0 [root@Nagios libexec]# sh /usr/local/nagios/libexec/check_url.sh bbs.yunjisuan.com URL bbs.yunjisuan.com OK [root@Nagios libexec]# echo $? 0 [root@Nagios libexec]# sh /usr/local/nagios/libexec/check_url.sh blog.yunjisuan.com URL blog.yunjisuan.com NO [root@Nagios libexec]# echo $? 2
Nagios主動模式監控和Nagios客戶端的nrpe進程沒有關係。
主動模式的全部操做徹底在Nagios主服務器上進行。部署步驟以下:
(1)開發check_url.sh,放到/usr/local/nagios/libexec中,受權爲可執行
root@Nagios libexec]# cd /usr/local/nagios/libexec/ [root@Nagios libexec]# chmod +x check_url.sh [root@Nagios libexec]# ll check_url.sh -rwxr-xr-x 1 root root 337 Aug 20 06:38 check_url.sh [root@Nagios libexec]# cat check_url.sh #!/bin/bash # anthor:Mr.chen by 2017-8-20 PROGNAME=`basename $0` PROGPATH=`dirname $0` usage(){ echo "Usage: /bin/sh ${PROGPATH}/${PROGNAME} url" exit 1 } [ $# -ne 1 ] && usage . $PROGPATH/utils.sh if wget -T 20 --spider $1 >/dev/null 2>&1;then echo "URL $1 OK" exit $STATE_OK else echo "URL $1 NO" exit $STATE_CRITICAL fi
(2)在commands.cfg中創建check_url命令:
[root@Nagios objects]# cd /usr/local/nagios/etc/objects/ [root@Nagios objects]# tail -7 commands.cfg # 'check_url' command definition by Mr.chen define command { command_name check_url command_line $USER1$/check_url.sh 192.168.0.223 #加載腳本並傳參數 } #提示:$USER1$是Nagios默認變量,爲/usr/local/nagios/libexec
(3)在services.cfg裏添加監控上述URL地址的服務
能夠將服務直接添加進services裏也能夠,寫一個子服務的配置文件,寫在/usr/local/nagios/etc/objects/services目錄裏
#建立須要監控的子服務配置文件 [root@Nagios objects]# pwd /usr/local/nagios/etc/objects [root@Nagios objects]# cd services [root@Nagios services]# pwd /usr/local/nagios/etc/objects/services [root@Nagios services]# vim check_url.cfg [root@Nagios services]# cat check_url.cfg define service { use generic-service host_name web01 service_description http_zhudong_url check_command check_url }
因爲/usr/local/nagios/etc/objects/services/*已經被nagios.cfg主配置文件引用,所以無需在include進service.cfg配置文件。
[root@Nagios etc]# cat nagios.cfg | grep "/usr/local/nagios/etc/objects/services" cfg_file=/usr/local/nagios/etc/objects/services.cfg cfg_dir=/usr/local/nagios/etc/objects/services
各個配置文件與Nagios.cfg主配置文件的關係以下圖所示:
(4)從新加載Nagios,查看結果
[root@Nagios etc]# /etc/init.d/nagios reload Running configuration check...done. Reloading nagios configuration...done
(5)查看Nagios服務頁面監控結果,以下圖所示:
備註:
Web01服務器須要可以提供http協議的web訪問。
等待刷新....
Nagios被動模式下的全部插件都須要部署在被監控的Nagios客戶端。部署步驟以下。
1)在Nagios客戶端web01上取/etc/passwd的文件指紋,即md5值。
[root@web01 ~]# md5sum /etc/passwd >/opt/ps.md5 [root@web01 ~]# cat /opt/ps.md5 3660c548ce618df6c066f0db6bedd2af /etc/passwd #記住這個校驗碼
2)在Nagios客戶端web01上開發插件腳本,並測試
#請注意這是在web01客戶端的操做 [root@web01 ~]# cd /usr/local/nagios/libexec/ [root@web01 libexec]# vim check_passwd [root@web01 libexec]# vim check_passwd [root@web01 libexec]# cat check_passwd #!/bin/bash # author:Mr.chen by 2017-8-20 OriMd5="3660c548ce618df6c066f0db6bedd2af" #以前記錄的校驗碼 CurrMd5=`md5sum /etc/passwd | cut -c 1-32` #每次都從新生成校驗碼 if [ "$OriMd5" == "$CurrMd5" ];then echo "/etc/passwd:OK" exit 0 else echo "/etc/passwd:FAILED" exit 2 fi [root@web01 libexec]# sh check_passwd /etc/passwd:OK [root@web01 libexec]# chmod +x check_passwd #提示:還能夠用md5sum -c /opt/ps.md5的方法比較
3)在Nagios客戶端web01上編輯nrpe.cfg,插入以下的內容後保存
root@web01 libexec]# cd /usr/local/nagios/etc/ [root@web01 etc]# vim nrpe.cfg [root@web01 etc]# tail -1 nrpe.cfg #在文件末尾加入以下內容 command[check_passwd]=/usr/local/nagios/libexec/check_passwd
4)在Nagios客戶端web01上重啓nrpe,並檢查是否重啓成功(check_nrpe檢驗)
[root@web01 etc]# ps -ef | grep nrpe | grep -v grep nagios 1027 1 0 Aug18 ? 00:00:05 /usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d [root@web01 etc]# pkill nrpe [root@web01 etc]# ps -ef | grep nrpe | grep -v grep [root@web01 etc]# /usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d [root@web01 etc]# ps -ef | grep nrpe | grep -v grep nagios 4362 1 0 06:33 ? 00:00:00 /usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d
5)在Nagios服務器端nagios-server上進入service目錄,建立配置文件check_passwd_web01.cfg
#請注意這裏是Nagios服務器端的操做 [root@Nagios ~]# cd /usr/local/nagios/etc/objects/services [root@Nagios services]# vim check_passwd_web01.cfg [root@Nagios services]# cat check_passwd_web01.cfg define service { use generic-service service_description check_passwd check_command check_nrpe!check_passwd #這裏的check_passwd就是Nagios客戶端nrpe.cfg裏command[check_passwd]=/usr/local/nagios/libexec/check_passwd配置的中括號命令名check_passwd }
6)在Nagios服務器端檢查語法
[root@Nagios services]# /etc/init.d/nagios checkconfig #以上省略若干.... Total Warnings: 0 Total Errors: 0 Things look okay - No serious problems were detected during the pre-flight check OK.
7)在Nagios服務器端加載Nagios配置,而後打開Nagios頁面查看
[root@Nagios services]# /etc/init.d/nagios reload Running configuration check...done. Reloading nagios configuration...done
等待刷新....