用于简单步骤图的 rrdtool 帮助

rrdtool help for simple step graph

我正在尝试跟踪一条线路的状态,我有两个值,信号强度 0-5 和连接状态(已连接 = 3,已断开 = 1),这些值每分钟读取一次,我想记录一年。

目前,当两个值之一发生变化时,图表中的变化并不明显,我看到几乎总是添加半步,相反,我希望图表能够准确反映值,如果幂从 4 变为 5,我希望在图表中以垂直步长看到它,而不添加半步长。

我按照文档和教程做了几次测试,但显然我遗漏了一些东西。

数据库创建

rrdtool create db.rrd \
--step 60 \
DS:rssi:GAUGE:120:0:5 \
DS:wan_state:GAUGE:120:0:10 \
RRA:MIN:0.5:1:525960

更新

# $TS is the timestamp, 4 the signal power, 3 the wan connected
rrdtool update db.rrd -t rssi:wan_state $TS:4:3

图表

rrdtool_graph() {
    secs=
    span=
    rrdtool graph graph-${span}.png \
            --start=now-${secs}s --end=now \
            "DEF:rssi=db.rrd:rssi:AVERAGE" \
            "DEF:wan_state=db.rrd:wan_state:AVERAGE" \
            "AREA:wan_state#0000FF:Internet" \
            "LINE1:rssi#00FF00:Signal" \
            >/dev/null
}

rrdtool_graph 3600 hour
rrdtool_graph 86400 day
rrdtool_graph 604800 week
rrdtool_graph 2629800 month
rrdtool_graph 31557600 year

您正受到数据规范化的影响。您正在存储的示例数据正在由 RRDTool 进行调整,以使其适合 RRD 的精确时间带。此外,当您查看较长时间段的图表时,样本将被平均并 rolled-up 以匹配图表上的像素。

如果您想避免这种情况,您有几个选择。

  • 在时间边界上精确保存数据。由于你的step是60s,那么你需要精确的存储在每分钟的最上面。
  • 在绘图时以及在 RRA 定义中使用 MIN(或 MAX)而不是 AVERAGE
  • 减小步长并按比例降低 xff(这可能会使用更多存储空间)
  • 绘图时将数据四舍五入
  • 改用关系数据库 - 如果您想要精确的历史数据,那么 RRDTool 可能不是正确的选择

您还有一个问题,即您的 RRD 是使用 'min' 类型的单个 RRA 定义的,但您在图形调用中使用了 Average。您可能应该将其更改为平均 RRA,并为 lower-granularity 图表添加更多 RRA(否则动态构建年度图表将花费很长时间!)

最后,您可能想在 wan_state DS 上做一些巧妙的计算,并将其显示为彩色背景,也许绿色代表向上,红色代表向下,而不是数字。