關於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是通過命令返回值來判斷狀態,在 ofollow,noindex">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]#