歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> 使用cacti監控虛接口

使用cacti監控虛接口

日期:2017/3/1 11:56:42   编辑:關於Linux

前言

linux系統中的tun、pppx等虛接口無法被cacti監控流量。因為這些是vpn連接成功後才生成動態接口,即使接口的名稱一樣,每一次生成的接口id都不相同,導致cacti無法連續監控接口的流量。
為了解決此問題,筆者想到了一個比較dirty但行之有效的方法。

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

snmpd自定義的oid

/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流出字節數

cacti新建數據源模板

做了這麼多准備工作,終於到重點了。

欲知後事如何,且聽下回分解。。。

Copyright © Linux教程網 All Rights Reserved