Linux 技术手札

RRD 修改旧资料数值

RRD 是十分好用的统计工具,很多伺服的监测也会使用 RRD。

今天发现 RRD 内的一组数据纪录出错,但 RRD 内建并没有修改旧数据的功能,需要将 RRD 数据库备份成 XML 档,修改 XML 档后,再复原到数据库,以下是修改的方法,在这里记录一下。

1. 例如要修改数据的 RRD 档是 /usr/local/rrd/file.rrd, 先用 rrdtool 的 dump 功能,将 RRD 的资料汇出成 XML 档:

# rrdtool dump /usr/local/rrd/file.rrd file-backup.xml

2. 然后直接用 vi 刚刚建立的 XML 档:

# vi file-backup.xml

例如要找的资料时间是 2020-05-18 08:00:00,找出这个时间字串的一行

3.每一个数值会用 分隔,次序跟建立 RRD 档时的顺序一样。但仔细一看那些数值都看不懂的,因为 RRD 会用科学记数法储存,例如像这样 5.6206361067e+01。

要转换这个数值,可以用 python 实现。例如上面的 5.6206361067e+01,用以下写法:

执行后可以看到结果是 56, 例如我想将数值改成 60,python 可以这样写:

执行后可以得出结果是 6.000000e+01,开启上面建立的 file-backup.xml,将这个数值记录在正确的位置。

为了方便修改,用 Python 写了这个小程式,可以将数值由十进制及科学记数间转换:

将上面 Script 储存后,使用方法是这样:

$ script.py 123
1.230000e+02

上面会将 123 转换成科学记数法,如果输入科学记数法,会回传十进制数值:

$ script.py 1.230000e+02
123

4. 修改后 XML 档后,用 rrdtool 的 restore 功能复原数据:

先将原来的 RRD 资料档搬到其他位置:

# mv /usr/local/rrd/file.rrd /usr/local/rrd/file.rrd.bak

复原数据:

# rrdtool restore file-backup.xml /usr/local/rrd/file.rrd

这样便完成了,当下次用 rrdtool graph 更新 RRD 图片时,便会产生正确的统计图。

Exit mobile version