这一节讲解cacti自定义脚本监控.
目的:通过隧道监控奥联的网卡流量。
问题:奥联SNMP协议不支持隧道。
思路:
1、既然隧道不支持SNMP,那就用登录的方式,然后用命令获取数据,最后再输出.
2、自定义输入源,数据模板,图像模板,添加主机,添加到图像.
开始:
1、创建自动登录ssh 或自动telnet登录,用命令获取相关数据,输出有用的数据
vi /usr/share/cacti/scripts/branch-apn.sh
#!/bin/bash
ip="$1"
username="$2"
password="$3"
#这里定义脚本后面跟的三个参数
command1="cat /proc/net/dev"
command2="ifconfig | grep Link"
#定义登录后执行的命令
tmpfile=/tmp/$ip.tmp
#定义临时文件
rm -fr $tmpfile &>/dev/null
#选删除临时文件
(sleep 2;echo "$username";sleep 2 ;echo "$password" ;sleep 2 ;echo "$command2";sleep 2;echo "$command1" ;sleep 2;echo "$command1"; sleep 2; echo "exit") | telnet $ip &>> $tmpfile
#执行登录命令,将将结果保存到临时文件
ethif=`grep "Link " $tmpfile | awk '{print $1}' | grep eth0`
#定义变量,用来判断是eth0还是ixp0,因为这个项目要监控两款APN,它们的网卡标识不同。这里进行一个判断。
if [ $ethif ];then
eth=eth0
else
eth=ixp0
fi
#得出eth的值。
RXpre=`grep $eth $tmpfile | grep -v grep |sed -n 2p| awk '{print $1}'| awk -F: '{print $2}'`
TXpre=`grep $eth $tmpfile | grep -v grep |sed -n 2p| awk '{print $9}'`
#获取一秒前的进出字节数
RXnext=`grep $eth $tmpfile | grep -v grep |sed -n 3p| awk '{print $1}'| awk -F: '{print $2}'`
TXnext=`grep $eth $tmpfile | grep -v grep |sed -n 3p| awk '{print $9}'`
#获取一秒后的理出字节数
RX=$((${RXnext}-${RXpre}))
TX=$((${TXnext}-${TXpre}))
#两个数相减得到流量值
printf INT:$RX
printf " "OUT:$TX
#输出相要的数据
rm -fr $tmpfile
#删除临时文件.
脚本的原理是获取当前网卡的总字节,一秒后再次获取一次网卡的总字节,两次相减得到这一秒钟的流量。
2、自定义输入源(见图)
点吉create出现下面的画面.
下一步就是创建数据模板(见图):
点击create后出现下图:
到这里已经完成一半了,下一步是定义图像模板(见图):
定义好后的内容为下图:
到这里已经完成的图像模板的定义.下面就是添加主机,添加监控项,添加到图像了.
添加主机:Console -> Devices --Add
添加监控项:Console -> Devices--Create Graphs for this Host--选择创建的图像模板
添加图像:Console -> Graph Trees --选择或新建组--Add--host--选择主机--create
喝杯咖啡回来,正常应该出图出数据了.
如有问题可按以下方式解决:
Console -> Utilities -> View Cacti Log File 看cacti日志;
是否生成rrd文件;
rrdtool fetch rrd文件 AVERAGE是否有数据;
手动运行脚本是否有数据输出;
下一节讲解批量导入主机.