我有这个代码来创建图形文件
#!/bin/sh
rrdtool graph /var/www/temp_graph.png
-w 1024 -h 400 -a PNG --slope-mode
--start -1d --end now
--vertical-label "temperature (C)"
DEF:out=/opt/templog/data/templog.rrd:internal:AVERAGE
DEF:in=/opt/templog/data/templog.rrd:external:AVERAGE
LINE2:in#00ff00:"inside"
LINE2:out#000ff:"outside"
和这个文件创建rrd文件:
#!/bin/sh
rrdtool create /opt/templog/data/templog.rrd --step 300
DS:internal:GAUGE:600:-55:125
DS:external:GAUGE:600:-55:125
RRA:AVERAGE:0.5:1:576
RRA:AVERAGE:0.5:3:1344
RRA:AVERAGE:0.5:12:1488
RRA:AVERAGE:0.5:72:1984
RRA:MIN:0.5:72:1984
RRA:MAX:0.5:72:1984
但当我创建图表时,温度曲线只显示正温度,而不是负温度。
当温度低于0摄氏度时,曲线为空白,当温度为正时,曲线变为可见。
我该如何解决这个问题?
这里有两种可能性:
- 数据<0不存在于RRD文件中,或者
- 数据存在,但未显示在图形中
在第一种情况下,这很可能是因为DS的下限被错误地设置为0。尽管您在上面指定的rrdtool create
命令确实给出了一个负的下限,但您应该查看与rrdtool info
一起使用的实际RRD文件,以验证它在DS上是否确实具有预期的下限。可能是因为没有按照您的预期进行配置。如果下限为零,则负值将在存储到数据库中之前被丢弃。您也可以使用rrdtool dump
来检查RRA中存在的值,以验证它们是否实际被存储。
第二种情况更为复杂,因为它取决于绘图参数。假设您没有使用CDEF来修改或限制源数据的范围,问题将归结为图形Y轴。通常,Y轴应展开以适合要绘制图形的数据,除非使用--rigid
选项使其变为刚性。可以设置-u
和-l
的上限和下限来控制这一点——可以尝试-l -10
,根据数据的不同,它应该使图形的下限为-10或更小。同样,如果您使用上面给出的命令绘制了图形,则不应该出现此问题。
总之,我猜您的RRD文件被设置为DS的下限为0,尽管您认为是用上面的命令创建的。使用rrdtool info
验证实际文件。