之前可能是由于虚拟机被挂起,恢复后系统时间出现偏差,导致 cacti 的图形在某五分钟出现了一个峰值,既影响查看图形,还影响数据统计,于是打算把这一段错误的数据删掉。

但由于有一百多的接口,三百多的 rrd 数据库文件,一个个改也未免太傻了点。花了半天来研究怎么批量修改数据,记录一下。


###单个文件的修改方式 ####转换 rrd 文件至 xml

1
rrdtool dump 1.rrd > 1.xml

####修改 xml 文件

1
vi 1.xml
1
2
3
4
vi 1.xml
/<!-- 2015-04-07 00:00:00+08:00:00 CST
dd
:x

####转换回 rrd 文件

1
rrdtool restore 1.xml 1.rrd

###批量处理文件 首先理一下顺序

  • 停止 snmp、mysql 服务
  • 备份 rra 文件
  • 批量转换 rrd 文件为 xml
  • 批量删除 xml 文件中问题行
  • 批量转换 xml 文件回 rrd
  • 覆盖原有数据
  • 重启服务

####停止 snmp、mysql 服务 目的是避免新数据采集导致问题

1
2
service snmpd stop
service mysqld stop

####备份 rrd 文件

1
2
tar -cvf rrd.tar /var/www/html/cacti/rra/
cp /var/www/html/cacti/rra/ ~/rra

####批量转换 rrd 文件为 xml

1
# cat rra2xml.sh
1
2
3
4
5
6
7
8
9
#!/bin/bash
rrddump="/usr/bin/rrdtool dump"
xmldir=~/rraxml/
rradir=~/rra/*
for file in `find ${rradir} -mtime -2 |awk -F\/ '{print $NF}'`
# find rra directory 2 days change
do
${rrddump} ${rradir}${file} > ${xmldir}/${file}
done
1
# ./rra2xml.sh

这里 ~/rraxml/ 文件夹中的 rrd 文件已经是 xml 格式了,但是为了省事就没变。 这段代码抄自网络,具体哪一个站点现在也找不到了。 ####批量删除 xml 文件中问题行 由于本人才疏学浅,不会写脚本,于是拖到 Windows 上来操作。 使用的是一款名为 UltraReplace 的国人作品。 首先要在设置里添加 rrd 文件类型,然后选择“特征替换”,起始特征字符串为“<!-- 2015-04-07 00:00:00+08:00:00 CST”,结束特征字符串为“</row>”,选择“+文件夹”,然后点击“开始”。 然后传回 Linux 服务器。 ####批量转换 xml 文件回 rrd

1
# cat rra2xml.sh
1
2
3
4
5
6
7
8
9
#!/bin/bash
rrdrestore="/usr/bin/rrdtool restore"
xmldir=~/n/rraxml2/
rradir=~/n/rrd2/
for file in `find ${xmldir} -mtime -2 |awk -F\/ '{print $NF}'`
# find rra directory 2 days change
do
${rrdrestore} ${xmldir}${file} ${rradir}${file}
done
1
# ./rra2xml.sh

####覆盖原有数据

1
mv -f ~/rraxml/* /var/www/html/cacti/rra/

####重启服务

1
2
service snmpd start
service mysqld start

看峰值是否已被删除,过十分钟左右如果有新图形说明成功了。