1. 程式人生 > >關於nagios系統下使用shell腳本自定義監控插件的編寫以及沒有實時監控圖的問題

關於nagios系統下使用shell腳本自定義監控插件的編寫以及沒有實時監控圖的問題

計數 發現 critical 一定的 sda shell cpu www align

關於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腳本自定義監控插件的編寫以及沒有實時監控圖的問題