如何在Azure AppInsights中对自定义指标进行百分位?

j5fpnvbx  于 2022-11-30  发布在  其他
关注(0)|答案(2)|浏览(128)

我已经使用Prometheus来存储性能指标,并以百分位数(例如,第95百分位响应时间)的形式查询结果。
Azure AppInsights中的对等项是什么?
我看到AppInsights/Kusto中有percentile functions,但是当我使用GetMetric(“blah”).TrackValue(42)时,它存储了Count、Min、Max、Sum和StdDev,这不是我在Prometheus中使用的直方图分组方法。
第一个
这里是我用随机值记录的一些数据。值列是总和,这是不正确的,所以我不知道如何正确地对这些数据进行百分位。x1c 0d1x

kwvwclae

kwvwclae1#

GetMetric().TrackValue() API与默认聚合一起使用时,不会存储每个单独的值,1分钟后会生成一个值,并将该值发送到AI,并具有sum/count/min/max/...分布。因此,以后无法在Analytics中绘制原始数据点的百分位数。
GetMetric().TrackValue() API目前只有少数聚合可用,histogram / tdigest不在其中。您可以在AI SDK GitHub repository上提交功能请求(或贡献)。
目前的解决方法是使用默认情况下提交时间点指标而不进行聚合的旧API:TrackMetric()TrackEvent()中的一系列测量值。这将增加发送的遥测项的数量(每个度量将单独发送,而不需要1分钟的值聚合),但这将为您提供每个值,以便在必要时在Analytics中执行百分位数聚合。

rjee0c15

rjee0c152#

AFAIK,这是一个常见的统计学问题。人们可以得到百分位值给定的平均值,标准差,***只有当***它是一个 * 正态分布 *。
此外,计算百分位值与总和、计数、最小值、最大值、标准偏差值相比有点昂贵,后者可以以 * 运行 * 的方式完成。
这是公式

Percentile Value = μ + zσ

其中

μ: Mean
z: z-score from z table that corresponds to percentile value
σ: Standard deviation

参考:https://www.statology.org/calculate-percentile-from-mean-standard-deviation/
P95的z得分值为1.645,P99的z得分值为2.326
参考:https://www.mymathtables.com/statistic/z-score-percentile-normal-distribution.html
注意,我在summarize中做了一个percentile()聚合,但是您可以根据需要选择min()max()avg()(对于大于1m的bin间隔)。

customMetrics
| where name == "<METRIC_NAME>"
| extend mean = value / valueCount
| extend p95_zscore = 1.645
| extend p95calc = mean + (p95_zscore * valueStdDev)
| extend p99_zscore = 2.326
| extend p99calc = mean + (p99_zscore * valueStdDev)
| summarize
    avg = sum(value) / sum(valueCount),
    p95 = percentile(p95calc, 95),
    p99 = percentile(p99calc, 99)
    by ts = bin(timestamp, 1m)
| render timechart

PS:我不是统计人员

相关问题