gpt4 book ai didi

rrdtool:计算滑动窗口内数据的第 95 个百分位数

转载 作者:行者123 更新时间:2023-12-04 18:04:58 25 4
gpt4 key购买 nike

我正在使用 rrdtool 绘制由 Munin 生成和存储的有关 CPU 使用率的数据图表. Munin(至少对我们而言)将每个数据系列存储在一个包含 12 个 RRA 的 .rrd 文件中:“MIN”、“MAX”和“AVERAGE”四个周期中的每一个“以 5m 为间隔的最后 2d”、“最后 9d”以 30 米为间隔”、“最后 270 天以 12 小时为间隔”和“最后 177 年以 144 天为间隔”。

我已经知道如何使用 rrdtool graph 生成一条趋势线,指示我的平均 CPU 使用率。 (为简单起见,我们可以假装我在单 CPU 系统上;在现实生活中我有更多代码来处理它。)

rrdtool graph /tmp/foo.png \
--start -12w --end +24w \
--lower-limit 0 --upper-limit 100 --rigid \
--title 'cpu usage' --width 620 --height 200 --border 0 \
--vertical-label 'cpu usage' \
DEF:idle=/var/lib/munin/mybox/mybox-cpu-idle-d.rrd:42:AVERAGE \
DEF:iowait=/var/lib/munin/mybox/mybox-cpu-iowait-d.rrd:42:AVERAGE \
CDEF:percent_used=100,idle,-,iowait,- \
AREA:percent_used#00880077:'cpu usage' \
VDEF:fit_m=percent_used,LSLSLOPE \
VDEF:fit_b=percent_used,LSLINT \
CDEF:trendline=percent_used,POP,fit_m,COUNT,*,fit_b,+ \
LINE1:trendline#FFBB00:'Trend since 12w ago'

此图的问题在于它仅显示平均 CPU 使用率趋势。但我的工作负载是尖峰的:90% 的时间使用率非常低,然后出现短暂的尖峰。我真正关心的是 CPU 使用率峰值的趋势。

所以我可以运行相同的命令,将 AVERAGE 替换为 MAX...但是实际的最大值是随机分布的(通常接近 100%),因此它们不会'生成任何有用的趋势线。

所以我认为我实际上想要的图表将是第 95 个百分位数的图表(或者可能只是第 75 个百分位数......理想情况下我能够调整参数) ,其中“百分位数”接管每个连续 24 小时周期内的数据。

从概念上讲,我想将过去 9 天的数据(每天 48 个数据点)归结为 9 个数据点(每天 1 个数据点——代表那天 48 个原始点的第 N 个百分位数)。

然后我会使用 LSLSLOPELSLINT 为该数据拟合一条线,并将其显示在与其他内容相同的图表上。

但我无法弄清楚如何使用 rrdtool 的 RPN 设施以这种方式归结数据。

我知道我可以使用 PERCENTNAN获取作为我整个数据系列的第 95 个百分位数的标量数字,但我想要一个由 9 个数字组成的数据系列,而不仅仅是一个标量。

我知道我可以使用 TRENDNAN得到一个数据系列,它是我的数据系列的滑动窗口的平均值,只要它给我中位数(第 50 个百分位)而不是 平均值就足够了,然后允许我将该参数从“50”调整到“95”……但它没有。


或者,我知道如何使用 Python 来计算我想要的系列,使用 rrdtool firstrrdtool fetch ,但是没有简单的方法将该系列反馈回 rrdtool 以创建图形。


我在想也许我可以提取usage_todayusage_yesterdayusage_2dusage_3d,...分为九个独立的系列,分别对它们使用 PERCENTNAN,然后以某种方式将其拟合成一条线。但这主要是绝望的挥手;如果有人发布的答案确实使该方法奏效,我会接受。

最佳答案

RRDTool 具有内置的第 95 个百分位功能。请注意,百分位计算的准确性将取决于所请求时间段内可用数据的粒度,但是...因此 1-pdp RRA 越大越好.

因此,例如,要在第 95 个百分位数处获得一条水平线,我们可以使用这些指令:

  DEF:idlehr=/var/lib/munin/mybox/mybox-cpu-idle-d.rrd:42:AVERAGE:step=1 
VDEF:pctidle=idlehr,95,PERCENTNAN
HRULE:pctidle#ff0000:95th_Percentile

DEF 末尾的 step=1 确保选择可用的最高分辨率数据。这可能是计算密集型的,如果你绘制一整年的图表并且高分辨率数据在这个时间窗口可用!

但问题是,您想要一个显示每一天不同值的图表——实际上,一个百分比计算的滑动窗口,与 TRED 和 PREDICT 的工作方式相同,但步长为一天. RRDTool 无法执行此操作。

因此,答案是,您可以显示某一天的图表,其中包含当天的单个值百分位数。您不能创建每天包含一个数据点的图表,其中该数据点计算为当天的百分位数。

我能想到的实现这一点的唯一方法是迭代地重复调用 rrdtool xport 来计算连续几天的百分位数值,然后使用该数据在另一个中生成条形图图形包。

关于rrdtool:计算滑动窗口内数据的第 95 个百分位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28596840/

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