我有多个月的PDP数据(5分钟间隔)的RRD文件。
对于一般用途的图形,当rrdtool自动决定使用哪个RRA来显示图形时,它很好。
但是我的一些图表在图例中包含95百分位数据,我需要从"精确"中计算。5分钟间隔数据,因为从聚合数据点计算百分位数(按其性质)可能导致严重错误的值。
- 我可以从RRD文件中获取
fetch
数据,步长为300,我将获得正确的数据来计算我自己的 百分位数 - :当图当步长为300时,即使时间范围相同,显示的百分位值也会因图形的
width
而变化,并且整个时间范围 都有300s数据可用。 - 如果1个月图的宽度为800px,则显示的百分位数(以及最大值)是错误的
- 如果1个月图的宽度为8000px,则值是正确的(与获取数据的自计算值相匹配)
图:
...
--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
之前,将进一步平均数据序列。所有CDEF
和VDEF
函数将始终与每像素一个cdp的时间序列一起工作。来自RRDTool手册:
注意:小于一个像素的步长将被静默忽略。
这意味着,虽然您可以降低数据的分辨率,但您不能增加它。遗憾的是,要获得准确的第95百分位,你需要更高分辨率的数据。
因此,如果在窄图中省略--step 300
,将会发生如下情况:
- 您要求1个月的时间窗口
- RRDTool计算1个像素大约是1小时
- DS从1小时RRA中检索平均时间序列,每像素1 cdp (IE小时)
- VDEF然后将其合并到第95个百分位数
- 第95百分位计算不准确
对于--step 300
,过程略有不同,但结果相同:
- 您要求1个月的时间窗口,步骤300
- RRDTool计算1个像素大约是1小时
- RRDTool DS从300s RRA中检索一个月的数据
- RRDTool使用Average进一步将这些数据整合到每像素1cdp(每小时IE)
- VDEF然后将其合并到第95个百分位数
- 第95百分位计算不准确
所以,你可以看到最终的结果是一样的-只是300 ->1小时合并发生,要么在RRA,要么在图时间。
当使用宽图形时,每个像素的时间变得更小,并且RRDTool不再需要执行额外的数据合并,从而导致更准确的计算:
- 您要求1个月的时间窗口
- RRDTool计算1个像素大约5分钟
- RRDTool DS从300s RRA中检索一个月的数据
- 无需进一步合并
- VDEF然后将其合并到第95个百分位数
- 第95百分位的计算是准确的!
当您使用rrdtool fetch
1检索原始数据时,则不会发生这种额外的合并,因此您得到:
- 你要求一个1个月的时间窗口,步骤300
- RRDTool DS从300s RRA中检索一个月的数据
- 这些数据是输出
- 你的电子表格然后计算第95个百分位数
- 第95个百分位数的计算是正确的(好吧,你可以尽可能接近5分钟的间隔)
您的下一个问题可能是,我如何阻止这种情况发生?不幸的是,答案是你不能。RRDTool没有百分位类型CF,因此正确的计算不能在RRA中执行(这将是唯一真正的解决方案)。
MRTG的Routers2前端计算了图形的第95个百分位数,它的方法是执行高分辨率fetch
来获取原始数据,并在制作图形时将其传递给HRULE
之前在内部计算值。换句话说,由于您遇到的这个问题,它根本不使用VDEF
。