【问题标题】:How to aggregate data by period in a rrdtool graph如何在 rrdtool 图中按时间段聚合数据
【发布时间】:2021-05-21 15:30:37
【问题描述】:

我有一个 rrd 文件,其中每分钟对服务器的平均 ping 时间 (GAUGE),当服务器离线时(由于现在无关紧要的原因,这种情况非常频繁)它存储一个 NaN/未知数。

我想创建一个图表,其中包含服务器每小时离线的百分比,我认为可以通过计算 60 个样本中的每个 NaN 然后除以 60 来实现。

现在我要定义一个变量,当服务器离线时为 1,否则为 0,但我已经阅读了文档并且不知道如何汇总:

DEF:avg=server.rrd:rtt:AVERAGE CDEF:offline=avg,UN,1,0,IF

创建图表时可以这样做吗?还是我必须将该信息存储在另一个 rrd 中?

【问题讨论】:

    标签: linux rrdtool


    【解决方案1】:

    我认为您无法完全按照自己的意愿行事,但您有几个选择。

    您可以定义一个滑动窗口平均值,它显示前一小时未知的百分比,并使用TRENDNAN 绘制图表。

    DEF:avg=server.rrd:rtt:AVERAGE:step=60
    CDEF:offline=avg,UN,100,0,IF
    CDEF:pcavail=offline,3600,TREND
    LINE:pcavail#ff0000:Availability
    

    这将avg 定义为 ping 数据的 1 分钟时间序列。请注意,我们使用step=60 来确保即使在较小的图表中也能获得最佳的数据分辨率。然后我们将offline 定义为 100 表示服务器存在,0 表示不存在。然后,pcavail 是 1 小时滑动窗口平均值,这实际上是前一小时服务器可用的时间百分比。

    然而,如果图表中有很多数据点指向一个像素,RRDTool 会在你拿到源数据之前默默地汇总数据(这不会发生)如果做fetch 当然)。为了解决这个问题,您需要在存储时完成offline CDEF -- 即,根据avg DS 是否已知,有一个COMPUTE 类型的 DS 为 100 或 0。然后,任何平均都会保留数据(正常平均会忽略未知数,或者xff 设置会使整个cdp 未知)。

    rrdtool create ...
    DS:rtt:GAUGE:120:0:9999
    DS:offline:COMPUTE:rtt,UN,100,0,IF
    
    rrdtool graph ...
    DEF:offline=server.rrd:offline:AVERAGE:step=3600
    LINE:offline#ff0000:Availability
    

    如果您能够修改您的 RRD,并且不需要历史数据,那么以这种方式使用 COMPUTE 将允许您根据需要在 1 小时的阶梯图中显示您的数据。

    【讨论】:

    • 计算 DS 是缺失的环节;)滑动窗口平均值也足以满足我的需求。谢谢!
    猜你喜欢
    • 2021-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-26
    • 2021-03-17
    • 2014-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多