關於nagios系統下使用shell腳本自定義監控插件的編寫以及沒有實時監控圖的問題
關於nagios系統下shell自定義監控插件的編寫、腳本規範以及沒有實時監控圖的問題的解決辦法
在自已編寫監控插件之前我們首先需要對nagios監控原理有一定的了解
Nagios的功能是監控服務和主機,但是他自身並不包括這部分功能,所有的監控、檢測功能都是通過各種插件來完成的。
啟動Nagios後,它會周期性的自動調用插件去檢測服務器狀態,同時Nagios會維持一個隊列,所有插件返回來的狀態信息都進入隊列, Nagios每次都從隊首開始讀取信息,並進行處理後,把狀態結果通過web顯示出來。
Nagios提供了許多插件,利用這些插件可以方便的監控很多服務狀態。安裝完成後,在nagios主目錄下的/libexec裏放有nagios自帶的可以使用的所有插件,
如,check_disk是檢查磁盤空間的插件,check_load是檢查CPU負載的,等等。基本上每一個插件可以通過運行./check_xxx –h 來查看其使用方法和功能。
Nagios可以識別4種狀態返回信息:
0(OK)表示狀態正常/綠色、
1(WARNING)表示出現警告/黃色
2(CRITICAL)表示出現非常嚴重的錯誤/紅色
3(UNKNOWN)表示未知錯誤/深黃色。
Nagios根據插件返回來的值,來判斷監控對象的狀態,並通過web顯示出來,以供管理員及時發現故障。
當我們知道了nagios是通過命令返回值來判斷狀態,在shell中也即是通過命令的退出狀態碼來判斷,這樣我們可以自已編寫一個監控腳本
1.編寫檢查weburl地址的插件
可以如下的命令及語法進行編寫。
[root@hd1 libexec]# cat check_url #!/bin/bash #get the shell script name PROGNAME=`basename $0` #get the file path PROGPATH=`dirname $0` usage() { echo "Usage: /bin/sh $PROGNAME url" exit 1 } [ $# -ne 1 ] &&usage . $PROGPATH/utils.sh t=`ping -c1 $1|awk ‘NR==2 {print $7,$8}‘` o=`ping -c1 $1|awk ‘NR==5{print $12}‘` ping -c1 $1>/dev/null 2>&1 if [ $? -eq 0 ] then echo "Url $1 OK|$t;0.000000 size=295B;;;0" exit $STATE_OK else echo "Url $1 NO|Socket timeout after $o" exit $STATE_CRITICAL fi [root@hd1 libexec]#
接下來,腳本授權可執行 以及主動監控腳本寫進command.cfg ,服務寫進services.cfg
企業級監控nagios實踐文檔已經說過。 自行操作。
編寫監控腳本是請參考utils.sh 規範
以上監控腳本的編寫,在此作為一種編寫nagios監控插件的思路,其中在if語句中的echo語句中、我們可以發現輸出的內容是由 | 分隔
其中只寫入"|"之前的內容也行,"|"之後的的內容為可選見容, nagios會將"|"之後的內容作為性能數據輸出 。
得到性能數據之後會在服務器端/usr/local/nagios/share/perfdata下生成文件。
如可輸出給pnp4nagios,性能數據格式如下:
‘label‘=value[UOM];[warn];[crit];[min];[max]
需要註意的是:
1、性能數據的多個選項值之間用分號;分割
2、如果label中包含空格、等號、或者單引號,則label需要用單引號來括起來
3、warn/crit/min/max可以為null值
value, min and max只能為負號"-" "0到9"和小數點"." 並且單位必須統一
4、如果UOM單位是%,則min和max不需要再指定
5、UOM單位可以是如下: 默認空,表示數量(用於用戶數、處理器數等)
s 表示秒(也可以用us,ms)
% 表示百分比
B 表示字節(也可以用KB,MB,TB,GB)
c 一個連續的計數(如:接口傳輸的字節數)
實際情況中性能數據選項值,可以參考已有監控插件的返回值。
[root@hd1 ~]# cd /usr/local/nagios
[root@hd1 nagios]# chown nagios.nagcmd share
用戶和組必須改為:nagios nagcmd
文件的權限問題,web用戶apache無法在/usr/local/nagios/share中寫入。在前面已經把用戶apache加入組nagcmd中了,所以直接改變文件夾的所有者和所屬的組就可以了。
下一步
重新加載nagios
/etc/init.d/nagios reload
可以看到自己寫的監控腳本 有實時監控圖了。 OK
2.編寫一個被動插件,監控客戶端的/dev/sda3分區的如果磁盤占用率超過7%報警exit 2,如果不大於7%不報警,exit 0
[root@hd2 libexec]# cat check_sda3 #! /bin/bash #get the shell script name PROGNAME=`basename $0` #get the file path PROGPATH=`dirname $0` usage() { echo "Usage: /bin/sh $PROGNAME url" exit 1 } [ $# -ne 1 ] &&usage . $PROGPATH/utils.sh n=`df -i|awk ‘NR==2{print $5}‘|sed ‘s/‘%‘//g‘` if [ $n -le 7 ] then echo "disk usage rate is ok!|sda3=$n;7;50;0;100" exit $STATE_OK elif [ $n -gt 7 -a $n -le 50 ] then echo "disk usage rate is warning!!|sda3=$n;7;50;0;100" exit $STATE_WARNING elif [ $n -gt 50 ] then echo "disk usage rate is critical!!!|sda3=$n;7;50;0;100" exit $STATE_CRITICAL fi [root@hd2 libexec]#
關於nagios系統下使用shell腳本自定義監控插件的編寫以及沒有實時監控圖的問題