神奇的环形数据库工具-rrdtool
admin
2023-07-10 17:44:03
0次

一 前言

前段时间写多主机性能指标监控工具res-monitor时有提到它,这里就专门对它做个介绍吧。

像res-monitor这类工具,既要实时获取数据,又要实时图形化展示数据,常规的是把采集的数据存放到数据库,然后再读数据库数据画图展示,然而,当我遇到rrdtool的时候,眼前一亮,很特别,它一方面可以把数据存储起来,扮演数据库的角色;另一方面又能根据存储的数据绘图,而且图形表达能力很强,如线状图、饼状图、柱状图、区域面积图等;支持高性能的数据存储、绘图,很方便集成在各种脚本中。从github的修改记录来看,它从2012年发布至今,一直在维护和更新着,可见其生命力。

Rrdtool很强大,完成数据存储和实时展示绘图等工作,只需要掌握3个命令,但这三个命令的参数相当多,使用起来有点复杂,另外,需要注意的是,它主要应用在linux平台,在windows上只能用Cygwin打包版本的,而且有些,需要绕过去。

本文不打算详细介绍rrdtool的原理,因为这块可以看官方文档,主要是说明如何使用它,并给出一些应用参考。
Rrdtool网址: https://oss.oetiker.ch/rrdtool/index.en.html

什么是rrd数据库

Rrdtool是环形数据库工具,存储和读取的是环形数据库,表现是后缀为.rrd的二进制文件。要大概理解啥是环形数据库,我对它的理解就是把它想象成圆形的时钟,随着时间推移,不断往里写数据,同时有个标记指向当前数据记录的最新位置,就像时钟上的指针指示当前时间一样。又因为它是圆形的,无始无终,可以一直往里写数据,只是历史数据会被覆盖掉,所以,有时它又被叫做时序结构数据库。

rrdtool常用命令

以下仅列出rrdtool的三个常用命令create、update、graph,看到这些命令格式,大概你就感觉到这工具使用的复杂性了。
Create命令格式:

rrdtool create filename [--start|-b start time] [--step|-s step] [--template|-t template-file] [--source|-r source-file] [--no-overwrite|-O] [--daemon|-d address] [DS:ds-name[=mapped-ds-name[[source-index]]]:DST:dst arguments] [RRA:CF:cf arguments]

Update命令格式:

rrdtool {update | updatev} filename [--template|-t ds-name[:ds-name]...] [--skip-past-updates|-s] [--daemon|-d address] [--] N:value[:value]... timestamp:value[:value]... at-timestamp@value[:value]...

Graph命令格式:

rrdtool graph|graphv filename [option ...] [data definition ...] [data calculation ...] [variable definition ...] [graph element ...] [print element ...]

针对各个参数的说明实在太多,不在此列出,建议直接看官方文档https://oss.oetiker.ch/rrdtool/doc/rrdtool.en.html,该部分:

神奇的环形数据库工具-rrdtool

rrdtool应用——监控带宽使用情况实例

命令格式太复杂,但是,只要搞定上面三个命令,以后用起来就轻松了,直接套用格式就行,如下是res-monitor监控带宽使用的命令配置实例,应用在python代码里,仅供参考哦。
1)    使用create命令创建rrd数据库文件

rrdtool_create = ('{bin_file} create {rrd_file} -s {interval} '
                  'DS:recvAvg:GAUGE:300:0:U '
                  'DS:sendAvg:GAUGE:300:0:U '
                  'RRA:AVERAGE:0.5:1:600 ')

命令说明:
Create命令创建rrd数据库,设置间隔为5s,定义里个数据源(DS),且数据源类型是保留原始值(GAUGE),数据接收的最大时间跨度是5分钟,否则设置U(unknown),指定按每个数据取平均值(AVERAGE)的方式归档存放数据;

2)    使用update命令更新rrd数据库

rrdtool_update = '{bin_file} update {rrd_file} N:'

命令说明:
Update命令向rrd数据库写数据,注意N:后面的数据组数和create指定的数据源对应,上面create是2个数据源,update的数据也只能是2组。可以理解成多行2列的表,每列对应create指定的数据源,update就是一行行往里面填数据。

3)    使用graph命令读取rrd数据库并绘制

    rrdtool_graph = ('{bin_file} graph {rrd_graph} '
                             '--start now-1800s '
                             '--vertical-label "NET Utilization" '
                             '--units-exponent 0 '
                             '--alt-autoscale-max '
                             '--lower-limit 0 '
                             '--title "NET/TOTAL:recv/send(MB/s)" '
                             '--font TITLE:10: Roman.ttf --font AXIS:10: Roman.ttf –font UNIT:10: Roman.ttf --font LEGEND:10: Roman.ttf '
                             'DEF:recvAvgFlow={rrd_relative_file}:recvAvg:AVERAGE '
                             'LINE1:recvAvgFlow#e60000:"recv(MB/s)" '
                             'GPRINT:recvAvgFlow:AVERAGE:"AVERAGE\:%3.1lf" '
                             'GPRINT:recvAvgFlow:MIN:"MIN\:%3.1lf" '
                             'GPRINT:recvAvgFlow:MAX:"MAX\:%3.1lf\\n" '
                             'DEF:sendAvgFlow={rrd_relative_file}:sendAvg:AVERAGE '
                             'LINE1:sendAvgFlow#32cd32:"send(MB/s)" '
                             'GPRINT:sendAvgFlow:AVERAGE:"AVERAGE\:%3.1lf" '
                             'GPRINT:sendAvgFlow:MIN:"MIN\:%3.1lf" '
                             'GPRINT:sendAvgFlow:MAX:"MAX\:%3.1lf\\n" '
                             )

命令说明:
Graph命令相当复杂,但表现里很强,上面参数指定图标显示的时间跨度,纵横坐标标题,图表是否自动缩放,线条颜色,每个线条对应从哪里取数据,且显示MIN\MAX\AVERAGE图例说明等等。

注意:
命令中的变量需要根据自己的实际情况替换,自己开发的程序里需要执行周期性的数据采集操作获得数据,然后使用update操作将数据写入rrdtool。按上述命令格式配置,最后的效果如下:

神奇的环形数据库工具-rrdtool

坑

坑1:
Rrdtool主要被设计应用在linux平台的,命令参数的分割符就是“:”,但在windows平台,冒号是盘符标志,所以,实际应用中需要做转义或者传入相对路径;

坑2:
Windows使用Cygwin打包版本的rrdtool,可能会报字体文件缺失,注意下载默认的指定文件并指定。


相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...