rrdtool 图忽略 --step?

rrdtool graph ignoring --step?

我有包含多个月 PDP 数据(5 分钟间隔)的 RRD 文件。

当 rrdtool 自动决定使用哪个 RRA 来显示图形时,对于通用图形来说它很好。

但是我的一些图表在图例中包含 95 个百分点的数据,我需要根据“精确”的 5 分钟间隔数据计算这些数据,因为根据聚合数据点计算百分比可能(本质上)导致严重错误的值。'

图形:

...
--step 300
...
"VDEF:perca=a,95,PERCENT",
...

创建于:

        '-s', '300',
       ...
        "RRA:AVERAGE:0.5:1:53568",      # 6 months pdp
        "RRA:AVERAGE:0.5:12:8904",      # 1 hour, 1 year.
        "RRA:AVERAGE:0.5:288:730",      # 1 day, 2 years.
        "RRA:AVERAGE:0.5:2016:520",     # 1 week, 10 years.
        "RRA:MAX:0.5:1:600",            # 5 min: 2 days
        "RRA:MAX:0.5:12:8904",          # 1 hour, 1 year.
        "RRA:MAX:0.5:288:730",          # 1 day, 2 years.
        "RRA:MAX:0.5:2016:520",         # 1 week, 10 years

这是因为在 VDEF 计算之前执行了数据整合。

虽然您的 rrdtool graph 参数指定了 300 秒的步长,但这比图形的像素宽度小,因此在您到达 VDEF 之前,数据系列会被进一步平均。所有 CDEFVDEF 函数将始终使用每像素一个 cdp 的时间序列。来自 RRDTool 手册:

Note: a step smaller than one pixel will silently be ignored.

这意味着,虽然您可以降低数据的分辨率,但不能提高它。遗憾的是,要获得准确的第 95 个百分位数,您需要更高分辨率的数据。

因此,如果您在窄图中省略 --step 300,将会发生的情况是:

  • 你要求1个月的时间window
  • RRDTool 计算出 1 个像素大约为 1 小时
  • DS 从 1 小时 RRA 中检索一个平均时间序列,每个像素一个 cdp(IE 小时)
  • VDEF 然后将其合并到第 95 个百分位数
  • 第 95 个百分位数计算不准确

--step 300过程略有不同,但结果相同:

  • 您要求 1 个月的时间 window,步骤 300
  • RRDTool 计算出 1 个像素大约为 1 小时
  • RRDTool DS 从 300s RRA 中检索一个月的数据
  • RRDTool 使用 Average
  • 进一步将此数据合并为每像素 1cdp(IE 每小时)
  • VDEF 然后将其合并到第 95 个百分位数
  • 第 95 个百分位数计算不准确

因此,您可以看到最终结果是相同的 - 就在 300s -> 1h 整合发生的地方,无论是在 RRA 还是在图表时间。

使用宽图时,每个像素的时间变小,RRDTool 不再需要执行额外的数据合并,从而使计算更准确:

  • 你要求1个月的时间window
  • RRDTool计算1个像素大约5分钟
  • RRDTool DS 从 300s RRA 中检索一个月的数据
  • 不需要进一步整合
  • VDEF 然后将其合并到第 95 个百分位数
  • 第 95 个百分位数计算准确!

当您使用 rrdtool fetch1 检索原始数据时,不会发生这种额外的合并,因此您得到:

  • 您要求 1 个月的时间 window,步骤 300
  • RRDTool DS 从 300s RRA 中检索一个月的数据
  • 输出这些数据
  • 然后您的电子表格会计算第 95 个百分位数
  • 第 95 个百分位数的计算是正确的(好吧,间隔 5 分钟,尽可能接近)

您的下一个问题可能是,我该如何阻止这种情况发生?不幸的是,你不能。 RRDTool 没有 Percentile 类型的 CF,因此无法在 RRA 中执行正确的计算(这将是唯一真正的解决方案)。

MRTG 的 Routers2 前端计算了图形的第 95 个百分位数,它的方法是执行高分辨率 fetch 以获取原始数据并在将其传递到HRULE 做图的时候。换句话说,由于您遇到的这个问题,它根本不使用 VDEF