gpt4 book ai didi

python - RRD 值错误

转载 作者:太空宇宙 更新时间:2023-11-04 04:11:21 25 4
gpt4 key购买 nike

我正在使用 RRDTool,但它显示错误的值。我有一点Python脚本:

import sys
import rrdtool
import time

i = 0

rrdtool.create(
'tempo.rrd',
'--step', '10',
'DS:temp:GAUGE:20:-40:100',
'RRA:LAST:0.5:1:1500'
)

while 1:
ret = rrdtool.update('tempo.rrd','N:' + `i`);
print "i %i" % i

rrdtool.graph(
'test.png',
'--imgformat', 'PNG',
'--width', '540',
'--height', '200',
'--start', "-%i" % 60,
'--end', "-1",
'--vertical-label', 'Temperatura',
'--title', 'Temperatura lauke',
'--lower-limit', '-1',
'DEF:actualtemp=tempo.rrd:temp:LAST',
'LINE1:actualtemp#ff0000:Actual',
'GPRINT:actualtemp:LAST:Actual %0.1lf C'
)

i += 1

time.sleep(10)

插入 [0, 1, 2] 后,我得到的图表具有错误的值 - /image/J4fM1.png (抱歉,我无法发布图片)。如您所见,插入 0 后,图形显示 0,插入 1 后,图形显示 0.8,插入 2 后,图形显示 1.8。有时插入1后,图形显示0.6等等。我做错了什么吗?

最佳答案

这就是 RRDtool 的工作原理。 RRDtool 仅适用于费率。您可以输入仪表数据(时间上的离散值),但 RRDtool 始终将它们内部视为速率。

当您创建 RRD 文件 (tempo.rrd) 时,RRDtool 在内部创建了存储桶,其起始时间戳为创建时的时间戳,并且每个后续存储桶均距该时间戳 +10 秒。例如

bucket 1    - 1379713706
bucket 2 - 1379713716
bucket 3 - 1379713726
...
bucket 100 - 1379714706
bucket 101 - 1379714716
bucket 102 - 1379714726

如果您要在与存储桶匹配的时间戳处插入整数值,那就没问题,但事实并非如此。您的脚本正在使用当前时间戳插入值,该时间戳几乎肯定不会等于存储桶值。假设当前时间戳是 1379714708,并且您想要插入值 2。当您插入值时,RRDtool 需要选择将其放入哪个存储桶。在本例中,1379714706 是最接近的,因此它将选择那个存储桶(这里有更多逻辑,但这就是要点)。您可能认为它会将“2”插入到存储桶中,但对于 RRDtool 来说,这将是一个谎言。现在可能是 2,但几秒钟前可能不是 2。请记住,它将所有这些值视为速率,它会尝试通过查看先前值的变化率来计算应该从该值中减去多少,以使其正确。这就是为什么您会看到 1.8 和 2.8 等值,而不是您期望的整数值。如果您在存储桶之间插入多个值或跳过存储桶,事情会变得更加复杂。

http://oss.oetiker.ch/rrdtool/tut/rrdtutorial.en.html 有一个很棒的教程更详细的内容。

关于python - RRD 值错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18924450/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com