1.在接口生成的時候記錄下本次生成的接口名稱,然後通過snmpwalk命令獲取本次接口的oid值。
2.通過計劃任務每30秒一次,獲取本次接口的流量保存在本地。
3.使用net-snmp的自定義oid獲取已經保存在本地的數值。
4.cacti添加基於自定義oid的數據源模板、圖形模板、數據查詢模板。由於自定義的oid總是固定的,所以可以連續監控到接口的流量。
環境介紹:
- 被監控節點 Centos 6.4 snmpd 5.5 pptpd
- cacti系統版本cactiez 0.87
以pptpd為例,用戶連接之後保存本次的接口名稱到/root/snmpd/interface/命名為pptp-用戶名。
pptpd通過/etc/ppp/auth-up腳本可以傳遞相關參數。在/etc/ppp/auth-up加入一下內容(如果沒有此文件可新建)
#!/bin/bash REALDEVICE=$1 USER=$2 echo $REALDEVICE >/root/snmpd/interface/pptp-$USER
這裡可以通過接入vpn來測試連接腳本是否有效。如用戶d2o接入了pptp,生成了一個名為ppp0的接口。如無意外,在目錄/root/snmpd/interface/下會生成了一個名為pptp-d2o的文件,文件內容ppp0。
[root@localhost ~]# cat /root/snmpd/interface/pptp-d2o ppp0
由於crontab最小的間隔是1分鐘,所以用了2個文件來采集數據,每5分鐘執行一次cron_control.sh,然後cron_control.sh裡面每29秒執行一次interface_cron.sh。實現效果就是每5分鐘根據接口名獲取一次oid,每29秒抓取一次流量數據,並把數據保存到results.in和results.out,分別對應流入流出的字節數。
/root/snmpd/interface_index用來保存需要監控流量的用戶的用戶名,並為cacti提供snmpd索引。
例如監控d2o、h2o、t2o三個用戶,/root/snmpd/interface_index的內容如下
pptp-d2o pptp-h2o pptp-t2o
/root/snmpd/interface_cron.sh根據接口oid獲取接口流量數據
#!/bin/sh ##interface_cron.sh ##get virtual interface traffic by crontab ## ##power by D2O ##http://blog.csdn.net/conupefox ## ##2016.5.6 WORKDIR=/root/snmpd cat /dev/null >$WORKDIR/results.in cat /dev/null >$WORKDIR/results.out for i in `cat $WORKDIR/interface_index`; do if [ -s $WORKDIR/oid/$i ]; then snmpwalk -On -v 2c -c d2o localhost .1.3.6.1.2.1.2.2.1.10.`cat $WORKDIR/oid/$i` | awk '{print $4}' >>$WORKDIR/results.in snmpwalk -On -v 2c -c d2o localhost .1.3.6.1.2.1.2.2.1.16.`cat $WORKDIR/oid/$i` | awk '{print $4}' >>$WORKDIR/results.out else echo >>$WORKDIR/results.in echo >>$WORKDIR/results.out fi done
/root/snmpd/cron_control.sh ps.其實可以寫成for循環
##power by D2O ##http://blog.csdn.net/conupefox ## ##2016.5.6 WORKDIR=/root/snmpd ##get oid for i in `cat $WORKDIR/interface_index`; do if [ -s $WORKDIR/interface/$i ]; then snmpwalk -On -v 2c -c d2o localhost .1.3.6.1.2.1.2.2.1.2 | grep `cat $WORKDIR/interface/$i` | tail -n 1 | awk -F "[. ]" {'print $12'} >$WORKDIR/oid/$i else cat /dev/null >$WORKDIR/oid/$i fi done $WORKDIR/interface_cron.sh sleep 29 $WORKDIR/interface_cron.sh sleep 29 $WORKDIR/interface_cron.sh sleep 29 $WORKDIR/interface_cron.sh sleep 29 $WORKDIR/interface_cron.sh sleep 29 $WORKDIR/interface_cron.sh sleep 29 $WORKDIR/interface_cron.sh sleep 29 $WORKDIR/interface_cron.sh sleep 29 $WORKDIR/interface_cron.sh sleep 29 $WORKDIR/interface_cron.sh
crontab -e
*/5 * * * * /root/snmpd/cron_control.sh > /dev/null 2>&1
/etc/snmp/snmpd.conf添加自定義的oid,調用interface_traffic.sh。interface_traffic.sh為cacti提供最終的繪圖數據。
/etc/snmp/snmpd.conf
extend .1.3.6.1.4.1.2021.60.1 interfacelist /root/snmpd/interface_traffic.sh --list extend .1.3.6.1.4.1.2021.60.1.42 interfacelist /root/snmpd/interface_traffic.sh --index extend .1.3.6.1.4.1.2021.60.2 interfacelist /root/snmpd/interface_traffic.sh in extend .1.3.6.1.4.1.2021.60.3 interfacelist /root/snmpd/interface_traffic.sh out
/root/snmpd/interface_traffic.sh
#!/bin/sh ##interface_traffic.sh ##monitoring virtual interface traffic ## ##power by D2O ##http://blog.csdn.net/conupefox ## ##2016.5.6 WORKDIR=/root/snmpd case "$1" in --list) cat $WORKDIR/interface_index ;; --index) intcount=`cat $WORKDIR/interface_index | wc -l` for i in `seq 1 $intcount`; do echo $i done exit $intcount # this is the value at OID .1.3.6.1.4.1.2021.60.1.42.100.1 ;; in | out) cat $WORKDIR/results.$1 ;; *) exit 254 ;; esac
至此,可以使用snmpwalk來測試自定義的oid是否已經生效。(別忘了重啟snmpd哦)
snmpwalk -On -v 2c -c public localhost .1.3.6.1.4.1.2021.60.1 得到用戶列表(在上面例子中是3個用戶d2o h2o t2o)。
snmpwalk -On -v 2c -c public localhost .1.3.6.1.4.1.2021.60.1.42 列出所有索引值,並返回用戶個數。
snmpwalk -On -v 2c -c public localhost .1.3.6.1.4.1.2021.60.2流入字節數
snmpwalk -On -v 2c -c public localhost .1.3.6.1.4.1.2021.60.3流出字節數
做了這麼多准備工作,終於到重點了。
欲知後事如何,且聽下回分解。。。