首页 > 应用开发 > IT综合 > RRDtool绘图使用详细
RRDtool 的特殊之处
A) 首先 RRDtool 存储数据,扮演了一个后台工具的角色。但同时 RRDtool 又允许创建图表,这使得RRDtool看起来又像是前端工具。其他的数据库只能存储数据,不能创建图表。
B) RDtool 的每个 rrd 文件的大小是固定的,而普通的数据库文件的大小是随着时间而增加的。
C) 其他数据库只是被动的接受数据, RRDtool 可以对收到的数据进行计算,例如前后两个数据的变化程度(rate of change),并存储该结果。
D) RRDtool 要求定时获取数据,其他数据库则没有该要求。如果在一个时间间隔内(heartbeat)没有收到值,则会用 UNKN 代替,其他数据库则不会这样。
建立 RRD 数据库
建库实际上就是建立后缀名为 .rrd 的 RRD 文件。
一)语法格式
其中 filename 、DS 部分和 RRA 部分是必须的。其他两个参数可免。
二)参数解释
A)
B) --step :就是 RRDtool “期望” 每隔多长时间就收到一个值。和 MRTG 的 interval 同样含义。默认是5分钟。我们的脚本也应该是
每5分钟运行一次。
C) --start :给出 RRDtool 的第一个记录的起始时间。RRDtool 不会接受任何采样时间小于或者等于指定时间的数据。也就是说 –-start指定了数据库最早的那个记录是从什么时候开始的。如果 update 操作中给出的时间在 –-start 之前,则 RRDtool拒绝接受。--satrt 选项也是可选的。按照 我们在前一篇中的设定,则默认是当前时间减去 600*300秒,也就是50个小时前。 如果你想指定--start 为1天前,可以用
注意,--start 选项的值必须是 timestamp 的格式。
D) DS :DS 用于定义 Data Soure 。也就是用于存放脚本的结果的变量名(DSN)。
就是我们前面提到的 eth0_in ,eth0_out, lo_in , lo_out 。DSN 从 1-19 个字符,必须是 0-9,a-z,A-Z 。
E) DST :DST 就是 Data Source Type 的意思。有 COUNTER、GUAGE、DERIVE、ABSOLUTE、COMPUTE 5种。由于网卡流量属于计数器型,所以这里应该为 COUNTER 。
F) RRA :RRA 用于指定数据如何存放。我们可以把一个RRA 看成一个表,各保存不同 interval 的统计结果
G)PDP :Primary Data Point 。正常情况下每个 interval RRDtool 都会收到一个值;RRDtool 在收到脚本给来的值后会计算出另外一个值(例如平均值),这个 值就是 PDP ;这个值代表的一般是“xxx/秒”的含义。注意,该值不一定等于RRDtool 收到的那个值。除非是GAUGE ,可以看下面的例子就知道了
H) CF :CF 就是 Consolidation Function 的缩写。也就是合并(统计)功能。有 AVERAGE、MAX、MIN、LAST 四种分别表示对多个PDP 进行取平均、取最大值、取最小值、取当前值四种类型。具体作用等到 update 操作时 再说。
I) CDP :Consolidation Data Point 。RRDtool 使用多个 PDP 合并为(计算出)一个 CDP。也就是执行上面 的CF 操作后的结果。这个值就是存入 RRA的数据,绘图时使用的也是这些数据。
三)再说 DST
DST 的选择是十分重要的,如果选错了 DST ,即使你的脚本取的数据是对的,放入 RRDtool 后也是错误的,更不用提画出来的图是否有意义了。
如何选择 DST 看下面的描述 :
A)COUNTER :必须是递增的,除非是计数器溢出(overflows)。在这种情况下,RRDtool 会自动修改收到的值。例如网络接口流量、收到的packets 数量都属于这一类型。
B)DERIVE:和 COUNTER 类似。但可以是递增,也可以递减,或者一会增加一会儿减少。
C)ABSOLUTE :ABSOLUTE 比较特殊,它每次都假定前一个interval的值是0,再计算平均值。
D)GAUGE :GAGUE 和上面三种不同,它没有“平均”的概念,RRDtool 收到值之后字节存入 RRA 中
E)COMPUTE :COMPUTE 比较特殊,它并不接受输入,它的定义是一个表达式,能够引用其他DS并自动计算出某个值。例如
则 eth0_bytes 每得到一个值,eth0_bits 会自动计算出它的值:将 eth0_bytes 的值乘以 8 。不过 COMPUTE 型的 DS 有个限制,只能应用它所在的 RRD 的 DS ,不能引用其他 RRD 的 DS。 COMPUTE 型 DS 是新版本的 RRDtool 才有的,你也可以用 CDEF 来实现该功能。
F)AVERAGE 类型适合于看“平均”情况,例如一天的平均流量,。所以 AVERAGE 适用于需要知道 ‘xxx/秒’ 这样的需求。但采用 AVERAGE 型时,并不知道 在每个 CDP 中(假设30分钟平均,6个PDP组成)之中,流量具体是如何变化的,什么时候高,什么时候低。这于需要用到别的统计类型了
G)MAXIMUM 、MINIMUM不适用想知道“xxx/秒”这样的需求,而是适用于想知道某个对象在各个不同时刻的表现的需求,也就是着重点在于各个时间点。
例如要看某个接口在一天内有没有超过50Mb 流量的时候就要用 MAXIMUM
例如要看磁盘空间的空闲率在一天内有没有低于 20% 的时候就要用 MINIMUM
H) LAST 类型适用于 “累计”的概念,例如从xxx时候到目前共累计xxxx 这样的需求。例如邮件数量,可以用 LAST 来表示 30 分钟内总共收到多少个邮件,同样 LAST 也没有平均的概念,也就是说不适用于 ‘xxx/秒’ 这样的需求,例如你不能说平均每秒钟多少封邮件这样的说法;同样也不适用于看每个周期内的变化,例如30分钟内共收到100封邮件,分别是:第一个5分钟20封,第二个5分钟30封,第三个5分钟没有,第4个5分钟10封,第5个5分钟也没有,第6个5分钟40封。如果用 MAXIMUM 或者 MINIMUM 就不知道在30分钟内共收到100封邮件,而是得出30和0。所以 LAST 适用于每隔一段时间被观察对象就会复位的情况。例如每30分钟就收一次邮件,邮件数量就是 LAST 值,同时现有的新邮件数量就被清零;到下一个30分钟再收一次邮件,又得到一个 30 分钟的 LAST 值。
这样就可以得得出“距离上一次操作后到目前为止共xxx”的需求。(例如距离上一次收取邮件后又共收到100封新邮件)
四)DST 实例说明
这样说可能还是比较模糊,可以看下面的例子,体会一下什么是 DST 和 PDP :
所以第一行的 values 并不是 PDP ,后面4行才是 PDP
五)开始建库
有的人可能会问,上面有两个 DS,那 RRA 中究竟存的是那个 DS 的数据呢?实际上,这些 RRA 是共用的,你只需建立一个 RRA,它就可以用于全部的 DS 。
所以在定义 RRA 时不需要指定是给那个 DS 用的。
六)什么是 CF
以第2个RRA 和 4,2,1,3 这4个 PDP 为例
AVERAGE :则结果为 (4+2+1+3)/4=2.5
MAX :结果为4个数中的最大值 4
MIN :结果为4个数中的最小值1
LAST :结果为4个数中的最后一个 3
同理,第三个RRA和第4个RRA则是每24个 PDP、每288个 PDP 合成为1个 CDP
七)解释度(Resolution)
这里要提到一个 Resolution 的概念,在官方文档中多处提到 resolution 一词。Resolution 究竟是什么?Resolutino 有什么用?
举个例子,如果我们要绘制1小时的数据,也就是60分钟,那么我们可以从第一个RRA 中取出12个 CDP 来绘图;也可以从第2个 RRA中取出2个 CDP 来绘图。到底 RRDtool 会使用那个呢?
让我们看一下 RRA 的定义 :RRA:AVERAGE:0.5:4:600 。
Resolution 就等于 4 * step = 4 * 300 = 1200 ,也就是说 ,resolution 是每个CDP 所代表的时间范围,或者说 RRA 中每个 CDP(记录)之间的时间间隔。所以第一个 RRA 的 resolution 是 1* step=300,第2是 1200,第三个是 24*300=7200,第4个 RRA 是 86400 。
默认情况下,RRDtool 会自动挑选合适的 resolution 的那个 RRA 的数据来绘图。我们大可不必关心它。但如果自己想取特定 RRA 的数据,就需要用到它了。
关于 Resolution 我们还会在 fetch 和 graph 中提到它。
八)xff 字段
细心的朋友可能会发现,在 RRA 的定义中有一个数值,固定是 0.5 ,这个到底是什么东东呢?
这个称为 xff 字段,是 xfile factor 的缩写。让我们来看它的定义 :
这个看起来有点头晕,我们举个简单的例子 :例如
这个 RRA 中,每24个 PDP (共两小时)就合成为一个 CDP,如果这 24 个 PDP 中有部分值是 UNKNOWN (原因可以很多),例如1个,那么这个 CDP
合成的结果是否就为 UNKNOWN 呢?
不是的,这要看 xff 字段而定。Xff 字段实际就是一个比例值。0.5 表示一个 CDP 中的所有 PDP 如果超过一半的值为 UNKNOWN ,则该 CDP 的值就被标为
UNKNOWN。也就是说,如果24个 PDP中有12个或者超过12个 PDP 的值是 UNKNOWN ,则该 CPD 就无法合成,或者合成的结果为 UNKNOWN;
如果是11个 PDP 的值为 UNKNOWN ,则该 CDP 的值等于剩下 13 个 PDP 的平均值。
如果一个 CDP 是有2个 PDP 组成,xff 为 0.5 ,那么只要有一个 PDP 为 UNKNOWN ,则该 PDP 所对应的 CDP 的值就是 UNKNOWN 了
使用RRDtool 进行绘图
一)前言
使用RRDtool 我们最关心什么?当然是把数据画出来了。虽然前面谈了很多,但这些都是基础来的。掌握好了,可以让你在绘图时更加得心应手。
本来还有 RPN (反向波兰表达式)一节的,但考虑一下,觉得还是放到后面,先从基本的绘图讲起。
这一节的内容虽然很多,但基本都是实验性的内容,只要多试几次就可以了。
二、graph 语法
其中的 data definiton、variable definition 、data calculation、分别是下面的格式
其中 filename 就是你想要生成的图片文件的名称,默认是 png 。你可以通过选项修改图片的类型,可以有 PNG、SVG、EPS、PDF四种。
A)DEF 是 Definition (定义)的意思。定义什么呢?你要绘图,总要有数据源吧?DEF 就是告诉 RRDtool 从那个 RRD 中取出指定
DS(eth0_in、eth0_out)的某个类型的统计值(还可以指定 resolution、start、end),并把这一切放入到一个变量
为什么还有一个 CF 字段?因为 RRA 有多种 CF 类型,有些 RRA 可能用来保存平均值、有些 RRA 可能用于统计最大值、
最小值等等。所以你必须同时指定使用什么 CF 类型的 RRA的数据。至于 :start 和 :end 、:reduce 则用得比较少,最常用的就是 :step 了,
它可以让你控制 RRDtool 从那个 RRA 中取数据。
B)VDEF 是 Variable Definition (变量定义)的意思。定义什么呢?记得 MRTG 在图表的下面有一个称之为 Legend 的部分吗?
那里显示了1个或者2个 DS (MRTG 没有 DS 一说,这里是借用 RRDtool 的)的 “最大值”、“平均值”、“当前值”。
RRDtool 中用 VDEF 来定义。这个变量专门存放某个 DS 某种类型的值,例如 eth0_in 的最大值、eht0_out 的当前值等。当你需要象
MRTG 一样输出数字报表(Legend) 时,就可以在 GPRINT 子句(sub clause)中调用它。
同样它也需要用一个变量来存放数值。要注意的是,旧版 的 RRDtool 中是用另外一种格式来达到相同的目的。新版的 RRDtool 则推荐使用
VDEF 语句。但在使用过程中,却发现 VDEF 的使用反而造成了困扰。 例如你有5个 DS 要画,每个 DS 你都想输出最大值、最小值、平均值
、当前值。 如果使用 VDEF ,则需要 4 * 5 = 20 个 VDEF 语句,这会造成极大的困扰。具体例子可以看第十一节“数字报表”部分。
C)CDEF 是 Calculation Define 的意思。使用过MRTG 的都会体会到一点,MRTG 的计算能力实在太差了。例如你有两个 Target ,
一个是 eth0_in , 一个是 eth0_out,如果要把它们相加起来,再除以8,得出 bytes 为单位的值,如何计算呢?或者说你只想看
eth0_in 中超过 10Mb/s 的那部分, 其余的不关心,又如何实现呢?因为 MRTG 不能对它从 log 取出来的数据进行修改,只能原
原本本的表现,所以很难满足我们的要求。而使用 CDEF , 这一切都可以很容易的实现。CDEF 支持很多数学运算,甚至还支持简
单的逻辑运算 if-then-else ,可以解决前面提到的第2个问题:如何只绘制你所关 心的数据。不过这一切都需要熟悉 RPN 的语法,
所以我们放到下一节介绍,这一节就介绍把 RRDtool 中的数据以图表的方式显示出来。
三)选项分类
本部分我们按照官方文档的方式,把选项分成几大类,分为 :
A)Time range : 用于控制图表的X轴显示的起始/结束时间,也包括从RRA中提取指定时间的数据。
B)Labels :用于控制 X/Y 轴的说明文字。
C)Size :用于控制图片的大小。
D)Limits :用于控制 Y 轴的上下限。
E)Grid :用于控制 X/Y 轴的刻度如何显示。
F)Miscellaneous :其他选项。例如显示中文、水印效果等等。
G)Report :数字报表
需要说明的是,本篇当中并不是列出了所有选项的用法,只是列出较为常用的选项,如果想查看所有选项的的用法,可以到官方站点下载文档。
四)时间范围控制(Time Range)
既然要绘图,就应该有一个起始/结束的时间。Graph 操作中有 –s ,-e 选项。这两个选项即可以用于控制图表的 X 轴显示的时间范围,也可以用
于控制 RRDtool 从 RRA 中提取对应时间的数据。如果没有指定 –-end ,默认为 now;如果没有指定 –-start,则默认为1天前。如果两者都没有
指定,则图表默认显示从当前算起1天内的。数
回头看一下 DEF 中,也有 :start ,:end , :step ,这些和 –-start、--end、--step 之间有什么关系呢?
让我们先看 :step 和 –step之间的关系是如何的。
下面以 eth0.rrrd 为例,假设要绘制的时间范围 range 等于 end -start[
A)如果 0 < ragne < 180000 (第一个 RRA 的时间覆盖范围) ,则默认从第1个RRA中取数据 :
如果 DEF 中给出的 :step > 300 ,例如 1000 ,则从 resolution= 1000 的或者第一个高于 1000 的RRA 中挑选数据,由于 eth0.rrd 中没有
resolution = 1000 的 RRA,则 RRDtool 会从 resolution = 1200 的第2 RRA 中取数据。
如果 DEF 中给出的 :step <= 300 ,例如 200 ,则 RRDtool 会忽略该设定,还是从第一个 RRA 中取数据。
B)如果 180000 < range < 720000 ,由于第一个RRA只能保存2天的数据,所以默认从第2个RRA中取数据 :
如果 DEF 中给出的 :step > 1200 ,例如 1800,则 RRDtool 会从 resolution = 7200 的第3 RRA 中取数据
如果 DEF 中给出 :step<= 1200,例如 300 ,则 RRDtool 会忽略,还是从第2个 RRA 中取数据
C)如果 720000 < range < 4320000 ,则默认从第三个 RRA 中取数据 :
如果 DEF 中给出的 :step > 7200 ,例如 10000 ,则从第4个 RRA中取数据
如果 DEF 中给出的 :step <= 7200 , 例如 1200 ,则忽略该值,并还是从第3 个 RRA 中取数据
D)如果 4320000 < range < 63072000 ,则默认从第4个 RRA 中取数据 :
如果 DEF 中给出的 :step > 86400 ,则行为未知
如果 DEF 中给出的 :step <=86400 ,则从第4个 RRA 中取数据
E)-S 选项可以直接控制 RRDtool 挑选 RRA 。
例如 -S 1200 ,即使DEF 中不加 :setp ,则 RRDtool 会从第2个 RRA 中取数据,即使 rang < 180000
如果 -S 和 :step 同时出现,则 :step 优先。
F)DEF 中的 :start 和 :end 可以覆盖 –-start 和 –-end 的值。
默认情况下,如果 DEF 中不加 :start 和 :end ,则等于 –-start 和 –end
如果 DEF 中定义了 :start 和 :end ,则以 :start 和 :end 为准。
实例1 :使用 –-start 指定 X 轴的起始时间
可以看到 X 轴的文字有些是乱码,不过不要紧,你可以临时已用 env LANG=C rrdtool xxxx 来解决该问题,或者在后面用
–n 来设定 RRDtool 使用中文字体,就不会出现这样的情况了
实例2 :使用 :step 从第2个RRA中取数据
这里是 :step=1000,但 RRDtool 会取 :step=1200 的 第2个 RRA 的数据来绘图,可以和上面的 1.png 比较,发现比较平滑。
实例3 :使用 –S 从第2个RRA中取数据
可以看到和上面的图一样,说明 RRDtool 的确按照 -S 的设置从第2个RRA 中取数据了
使用 –S 可以对 DEF 中所有的 DS 都使用相同的 resolution,等于在每个 DEF后都加上 :step=
实例4 :同时使用 –S 和 :step

可以看到 5.png 和 1.png 是一样的,也就是说 –S 1200 并没有起作用,而是 :step=300 起作用了
实例5 :使用 :start 和 :end 只显示指定时间内的数据

如果我们不加 :start 和 :end ,则效果如下 :

我们甚至可以让两个对象显示不同的时间,例如
实例6 :让两个对象显示不同时间段的数据

实例7 :把一段时间分为几段分别显示 :

我们把3个小时内的数据用三种不同粗细、不同颜色的曲线画了出来。out部分(红色)显示了2个小时内的流量,而in部分(绿色)则只显示了1个小时内的部分。在这里要提一点,虽然我们指定了 –-start 或者 –-end ,或者 :start , :end,但并不意味着曲线就一定会从指定的时间点开始和结束。
例如我们上面指定了 :start=now-600:end=now-300 ,也就是只显示5分钟的数据。但图表出来的效果却是10(10:05-10:15)分钟的数据,这是因为我们挑选的时间当中“不慎”横垮了两个周期 (10:05-10:10,10:10-10:15),所以 RRDtool 会把它们全部画出来,而不是只画其中的5分钟。
五)说明文字(Label)
-t 是用于图表上方的标题,-v 是用于 Y 轴的说明文字
实例1 :给图表增加标题

现在我们用的是 LINE 的方式来绘图。LINE 可以有3种,分别是 LINE1|2|3,也就是线条的粗细。还有一种是 STACK 方式下面再介绍。
可以看到流入的流量比流出的流量稍大,这样看的话,out 流量比较难看,是否可以有别的方式呢?RRDtool 还提供了另外一种格式,就是 STACK 。意思就是在前一个对象的基础(把前一个对象的值当成 X 轴)上绘图,而不是从 X 轴开始。
实例2 :使用 STACK 方式绘图

这是没有采用 STACK 方式绘图的效果 :

可以看得出上面采用 STACK 方式的比较清晰,但要注意,采用 STACK 方式后,在读取 out 流量时,Y 轴的刻度不再是 out 的值,应该用刻度值减去 in 的值,才是 out 真正的值。这点比较麻烦。需要配合 GPRINT 语句才能达到一定的效果。
六)图表大小(Size)
这里说图表大小而不是图片大小,是因为 –w ,-h 控制的是 X/Y 轴共同围起来的那部分大小,而不是整个图片的大小,这点在前面就可以看出了。
默认的图表大小是 400 (长)x 100 (高),但一般会返回497x179 这样的数字,这个才是图片的大小。
RRDtool 比 MRTG 好的一个地方就是 MRTG 一放大图片,就会变得模糊。RRDtool 则不会。
在官方文档中,-w 似乎是一个比较敏感的参数,我们看下面的描述 :
实例1 :使用 –w 设定图表大小为 300 像素

可以看到图表是不是变小了呢?而且整个图片的大小也变小了。如果用前面的话来推理,由于 120000/300(-w的值)= 400 > 300 (step),由于没有 resolution=400 的 RRA,所以应该采用 resolution=7200 的第2个 RRA 的数据来绘图,但实际上不是。

上面这个才是 300 pixel 宽,resolution=7200 的效果所以–w 和 –h 并不能影响 RRDtool 选择 RRA ,只能起到缩小放大的作用。BTW:当你绘制的时间范围较大时,可以使用 –w 增大图表大小

七) Y 轴上下限(Limits)
默认情况下,RRDtool 会和 MRTG 一样自动调整 Y 轴的数字,来配合当前的数值大小。如果想禁止该特性,可以通过 –upper-limit
-–lower-limit 来做限制,表示Y轴显示的值从多少到多少。如果没有指定 –rigid ,则在图表的上下边界处还是会有一些延伸,但如果指定了
-–rigid ,则严格按照 –-upper-limit 和 –-lower-limit 绘制。
在使用 –lower-limit 时要注意,如果数据中有负数,如果 -–lower-limit 为 0,则负数部分是显示不出来的。
实例1 :使用 –-upper-limit 和 –-lower-limit 限制 Y 轴的上下限

八) X/Y 轴刻度(Grid)
RRDtool 中设置 X 轴的刻度比较复杂,如果没有必要,可以交给 RRDtool 自动去处理。
例如上面的图,33 小时的情况下,X 轴只有2个值,显得很不足。这时候有两种方法 :
A)一是使用 –w 增大图表的宽度,这样 RRDtool 会自动加多一些刻度上去。

B)二是通过上面的选项自己设置 X/Y 轴的刻度如何显示。首先看上图,在垂直的线中,红色的线称为 Major Grid(主要网格线),灰色的线称为 Base Grid (次要网格线)(这里是借用 EXCEL 中的概念)。 X 轴下面的时间文字成为 Label 。
C)有两种方法可以快速去掉 X/Y 轴的刻度,就是 –-x-grid none 和 –-y-grid none
D)GTM:GST :控制次要格网线的位置。GTM 是一个时间单位,可以是 SECOND、MINUTE、HOUR、DAY 、WEEK、MONTH、YEAR 。
GST 则是一个数字,控制每隔多长时间放置一根次要格线。例如我们要画一个1天的图表,决定每15分钟一根次要网格线,则格式为 MINUTE:15
E)MTM:MST :控制主要网格线的位置。MTM 同样是时间单位,MST 是一个数字。接上面的例子,决定一个小时1根主要网格线。则格式为 HOUR:1
LTM:LST :控制每隔多长时间输出一个label 。决定为1小时1个 label 。则格式为 HOUR:1
G)LPR:LFM :LTM:LST 只是决定了 label 的显示位置了,没有指定要显示什么内容。LPR 指的是如何放置 label 。如果LPR 为0,则数字对齐格线
(适用于显示时间)。如果不为0,则会做一些偏移(适用于显示星期几、月份等)。至于LFM 则需要熟悉一下 date 命令的参数,常用的有 %a(星期几)、
%b(月份)、%d(天)、%H(小时)、%M(分)、%Y(年)。我们决定显示小时和分,所以用 %H%M
H)综合起来,X 轴的刻度定义就是 –-x-grid MINUTE:15:HOUR:1:HOUR:1:0:’%H:%M’。最好把 %H:%M 括起来
建议 MST是 GST 的2-6倍,MST 和 LST 相同。这样画出来的图比较美观一些

这明显就是图片太小了,不够显示。把上面的 :%M 去掉就可以了,只显示小时,不显示分钟

如果把图片放大一点就更好了 (-w 800)

所以在设置 X 轴的刻度时,要记得不要显示太多东西,否则需要增大图片的大小

I)Y 轴刻度的设置又不一样了
grid step :用于控制Y轴每隔多少显示一根水平线
label factor :默认为1,也就是在每根水平线的高度那里显示一个值。
例如下面就是一个例子 (每隔800显示一根水平线)

J)Y 轴还有一个很方便的选项就是 –Y ,它可以最大限度的优化 Y 轴的刻度,建议每次绘图都加上去。
K)Y 轴另外一个有用的选项就是 –X (虽然选项名是 -X ,但确实是用来设置 Y 轴刻度值的)。在上面的图我们看到 RRDtool 自动对 Y 轴的值进行调整,
以 k 为单位显示。但如果你不想以 k 显示,而是想固定以某个单位来显示(M,b)该怎么办呢?这就要用到 –X 选项了。-X 后面跟一个参数,参数值
范围是 -18、-15、-12、-9、-6 、-3、0、3、6、9、12、15、18 。0 表示以原值显示,3 表示数值除以1000,也就是以 k 为单位显示,6 就是以
M 显示,9 就是以 G 显示。如果你给出1或者2,则 RRDtool 也可以接受,但会被“静悄悄”的改为0。下面就是一个以原值(-X 0)显示的例子
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29500582/viewspace-1277799/ ,如需转载,请注明出处,否则将追究法律责任。