RRDtool 系列连载-6 :如何从 RRD 数据库中提取数据 - RRDtool - 阿勃的 blog
2018-11-30
RRDtool 系列连载-6 :如何从 RRD 数据库中提取数据
一)前言
RRD 是 Round Robin Database 的意思,那么是否可以象普通的数据库进行查询操作呢?
答案是可以的。fetch 就是用来做这种事情的工具。当然 fetch 不能和 select 语句相比,它只是根据用户指定的时间,
从合适的 RRA 中取出数据,并加以格式化。不过和 MRTG 相比,已经好很多了,至少你不用取看该死的 log 文件。
实际上,fetch 操作其实可以不学,因为 RRDtool 会自动帮你选好数据。但你如何确定 RRDtool 取的数据就是你想要的呢?
或者说你如何证明 RRDtool 绘制出来的图是正确的呢?
废话少说,下面开始正文
二)fetch 操作的语法
[Copy to clipboard][ - ]
CODE:
rrdtool fetch filename CF [--resolution|-r resolution] [--start|-s start] [--end|-e end]
其中 --start、--end、-r 都是可选的 。RRDtool 默认的 --end 是 now ,--start 是 end-1day ,也就是1天前。
CF 可以是 AVERAGE、MAX、MIN、LAST ,当然必须建库时有该 CF 类型的 RRA 才可以查,否则会报错。
三)fetch 如何取数据
在确定了时间范围后,RRDtool 会从多个 RRA 中挑选最佳的那个 RRA 的数据。至于什么是“最佳”,则从两个方面考虑 :
A)第一是该 RRA 的数据要尽可能的覆盖所请求的时间范围。如何计算一个 RRA 的覆盖时间呢?以 eth0.rrd 的第一个RRA 为例,
有 600 个记录,每个记录相隔300秒,则总的时间覆盖范围是180000 秒≈2天,所以如果 –-start 和 -–end 规定的时间范围
大于2天,则 RRDtool 不会从该 RRA 中取数据。
B)第二是 resolution 的要求。还是上面的例子,如果是要画3天的数据,从时间覆盖范围上来讲,第2、3、4 个 RRA 都符合要求。
那究竟挑选那个 RRA 的数据呢?如果 fetch 中有指定 –r 选项,则挑选 resolution 等于 –r 指定的值那个 RRA 的数据。如果没有
–r 选项,则从第一个合适的 RRA 中取数据。
C)fetch 如果不加 –-start、--end、-r ,则默认输出 resolution 最小的那个 RRA 的数据。就像下面的例子1一样。
四)实际例子
实例一 :默认情况
[Copy to clipboard][ - ]
CODE:
[root@dns1 bob]# rrdtool fetch eth0.rrd AVERAGE |more
eth0_in eth0_out
1164467700: 1.133724