前言
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
断开脚本
用户断开就把/root/snmpd/interface/pptp-用户名
文件删除掉。脚本位置/etc/ppp/auth-down
#!/bin/sh
USER=$2
rm /root/snmpd/interface/pptp-$USER
收集接口流量
由于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/s