動機
既然snmp這麼方便,認證也很簡單,那我就自己創作屬於自己的OID吧!!
想法
做一個snmp oid,在乎叫他的時候
他會回我資料夾下的檔案數量,跟下面所有檔案的名稱,還有時間。
動手做
其實範例在
/etc/snmp/snmpd.conf裡面都講得很詳細了
所以我直接去複製範例的來改,net-snmp的預設範例在
/usr/local/src/net-snmp/local/passtest 如果沒有 find 或 locate 一下吧接下來找個地方放,cp過去/tmp吧
# cp /usr/local/src/net-snmp/local/passtest /tmp.sh # vim /tmp/agent.sh修改一下內容,改成自己的想法,我這邊就是把/tmp下面的檔案通通ls出來
然後自創一個oid .1.3.6.1.4.1.2021.200 來裝
#!/bin/sh -f
#auther:wei 20150922
PATH=$path:/bin:/usr/bin:/usr/ucb
PLACE=".1.3.6.1.4.1.2021.200"
REQ="$2"
#if $1 not null
if [ "$1" = "-n" ]; then
case "$REQ" in
$PLACE) RET=$PLACE.1;;
*) exit 0;;
esac
else
case "$REQ" in
$PLACE) exit 0;;
*) RET=$REQ;;
esac
fi
echo "$RET"
case "$RET" in
$PLACE.1)
echo "string";
pidfilelist=`ls -Al /tmp --time-style '+%s' | grep pid| awk '{print $6","$7}'`;
for item in "${pidfilelist[@]}"
do
echo $item
done;
exit 0;;
$PLACE.2)
echo "string";
echo `ls /tmp | wc -l`;
exit 0;;
*) echo "string";echo "ack... $RET $REQ";exit 0;;
esac
這樣我在下 .1.3.6.1.4.1.2021.200.1 的時候,他會回我/tmp的內的檔案名稱跟unix time改成 .1.3.6.1.4.1.2021.200.2 就會回我數量
這邊用到 ls 的參數 --time-style '+%s' 這樣他就會幫我轉換成unix時間了,以後程式讀取再做轉換也更快再來讓snmp能夠pass給我的sh
所以必須在設定檔中設定 pass
# vi /etc/snmp/snmp.conf 找到關鍵字pass 然後再後面加上一行 pass .1.3.6.1.4.1.2021.200 /tmp/agent.sh 接著reload or restart snmp服務 # /etc/init.d/snmpd restart
測試
其實直接輸入參數就可以觸發了
如果你有注意到他的$1 $2 的話...
所以我們直接送參數!
# /tmp/agent.sh aaa .1.3.6.1.4.1.2021.200.1 .1.3.6.1.4.1.2021.200.1 string 1443089401,a.pid 1443089401,b.pid 1443089401,c.pid 1443089401,d.pid 1443089401,e.pid 1443089401,f.pid 1443089401,g.pid 1443089401,h.pid 1443089401,i.pid帥啊老皮,程式在做切割加工就可以很漂亮的拿到資料了
再來試試看2,取數量
# /tmp/agent.sh aaa .1.3.6.1.4.1.2021.200.2 .1.3.6.1.4.1.2021.200.2 string 9絕讚阿!再來走走正規的取得法
# snmpwalk -v 1 -c public localhost .1.3.6.1.4.1.2021.200.2 UCD-SNMP-MIB::ucdavis.200.2 = STRING: "9"完工拉!
留言
張貼留言