通过shell脚本批量更新Cacti的RRD数据库文件

  • A+
所属分类:网络维护

Cacti是一个开源的监控工具,基于mysql、php、apache、rrdtools,3z学堂在日常工作中经常使用其来监控网络流量。

近期在日常工作中遇见一个问题,在监控100GE网络端口时,发现监控到的流量数据在大于30多G左右的时候会出现无法显示的现象,如下图所示:
通过shell脚本批量更新Cacti的RRD数据库文件

通过对监控的数据源进行debug发现,在创建初始监控数据的时候,Cacti通过rrd命令创建了监控数据的原始rrd文件并定义了其支持的最大值。此最大值通过snmp采集的时候获取端口speed数据写入,应该是在获取100GE端口的带宽数据时出现了错误。通过shell脚本批量更新Cacti的RRD数据库文件

Data Source Debug

/usr/bin/rrdtool create \
/var/www/html/rra/202/4344.rrd \
--step 60  \
DS:traffic_in:COUNTER:120:0:4294967295 \
DS:traffic_out:COUNTER:120:0:4294967295 \

找到原因后,查阅rrd官方文档,发现可以通过rrdtoo tune的命令格式对已建立的rrd文件进行最大值修改通过shell脚本批量更新Cacti的RRD数据库文件

具体命令为:

rrdtool tune xxxx.rrd --maximum traffic_out:1000000000000

直接修改rrd文件的最大值为1000G。

由于监控的数据比较多,有近千个rrd文件,如果一个一个去修改得改到猴年马月去,于是写了个shell脚本来进行批量操作。

代码如下:

#!/bin/bash
for line in ` ls -F |grep '/$'`
do
cd $line
for file in `ls -l | grep rrd | awk '{print $9}'`
do
rrdtool tune $file --maximum traffic_out:1000000000000
rrdtool tune $file --maximum traffic_in:1000000000000
echo "$file ok"
done
cd ..
done

脚本通过ls列出目录和目录中的rrd文件,然后通过两个for循环,进入cacti的rra数据库目录,并通过rrdtool tune命令对rrd文件进行最大值修改。



将脚本命名为changemax.sh放在cacti的rra文件目录下,位于/var/www/html/rra/,使用chmod +x changemax.sh赋予执行权限,然后运行./changmax.sh即可。

通过shell脚本批量更新Cacti的RRD数据库文件

通过shell脚本批量更新Cacti的RRD数据库文件

上千个rrd文件,1分钟内全部搞定,改完后效果:

通过shell脚本批量更新Cacti的RRD数据库文件

此次3z学堂给大家分享的时平时工作中遇到的一些维护问题,后续也会继续给大家分享,希望能够帮助到遇到同样问题的朋友。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: