標籤:
在自已編寫監控外掛程式之前我們首先需要對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中也即是通過命令的退出狀態代碼來判斷,這樣我們可以自已編寫一個監控指令碼
如編寫監控postgresql資料庫的ESTABLISHED串連數,可以如下的命令及文法進行編寫。
#!/bin/bash#if [ "$1" = "-w" ] && [ "$2" -gt "0" ] && [ "$3" = "-c" ] && [ "$4" -gt "0" ]; then pgsql=`netstat -lnaput| grep ":5432" | grep ESTABLISHED | wc -l` if [ "$pgsql" -ge "$4" ]; then echo "Pgsql_concurrent: CRITICAL Total: $pgsql - concurrent_count |USED=$pgsql;200;500;;" $(exit 2) elif [ "$pgsql" -ge "$2" ]; then echo "Pgsql_concurrent: WARNING Total: $pgsql - concurrent_count|USED=$pgsql;200;500;;" $(exit 1) else echo "Pgsql_concurrent: OK Total: $pgsql - concurrent_count|USED=$pgsql;200;500;;" $(exit 0) fielse echo "check_PgsqlCount" echo "" echo "Usage:" echo "check_PgsqlCount -w <warn count> -c <crit count>" echo "" echo "Copyright (C) 2014 http://www.cnblogs.com/5201351 ([email protected])" exitfi
以上監控指令碼為筆者工作所編寫,在此作為一種編寫nagios監控外掛程式的思路,其中在if語句中的3條echo語句中、我們可以發現輸出的內容是由|分隔
其中唯寫入"|"之前的內容也行,"|"之後的的內容為可選見容,nagios會將"|"之後的內容作為效能資料輸出。如可輸出給pnp4nagios,效能資料格式如下:
‘label‘=value[UOM];[warn];[crit];[min];[max]
需要注意的是:
1、效能資料的多個選項值之間用分號;分割
2、如果label中包含空格、等號、或者單引號,則label需要用單引號來括起來
3、warn/crit/min/max可以為null值,如果有值單位必須統一
4、如果UOM單位是%,則min和max不需要再指定
5、UOM單位可以是如下: 預設空,表示數量(用於使用者數、處理器數等)
s 表示秒(也可以用us,ms)% 表示百分比B 表示位元組(也可以用KB,MB,TB,GB)c 一個連續的計數(如:介面傳輸的位元組數)
關於nagios系統下使用shell指令碼自訂監控外掛程式的編寫