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

And*_*dyV 6 azure azure-monitoring azure-application-insights prometheus azure-log-analytics

我使用 Prometheus 存储性能指标并以百分位数形式查询结果(例如第 95 个百分位数响应时间)。我使用prometheus-net来发出它们。

Azure AppInsights 中的等效项是什么?

我看到 AppInsights/Kusto 中有百分位数函数,但是当我使用 GetMetric("blah").TrackValue(42) 时,它存储 Count、Min、Max、Sum 和 StdDev,这不是我使用的直方图分桶方法到《普罗米修斯》中。

for(int i=0; i < 500; i++) {
  //Write some metrics
  telemetryClient.GetMetric("blah").TrackValue(42); //real data isn't constant
}
Run Code Online (Sandbox Code Playgroud)
customMetrics
| where name == "blah" 
//| summarize avg(value), percentiles(value, 50, 95)  by bin(timestamp, 2m)
Run Code Online (Sandbox Code Playgroud)

这是我用随机值记录的一些数据。值列是总和,这是不正确的,所以我不知道如何正确地对此数据进行百分位数。 在此输入图像描述

Dmi*_*eev 1

当 API 与默认聚合一起使用时,不会存储每个单独的值GetMetric().TrackValue(),1 分钟后会生成一个值,并且该值会以 sum/count/min/max/... 分布发送到 AI。因此,稍后无法在 Analytics 中绘制原始数据点的百分位数。

目前 API 可用的聚合很少GetMetric().TrackValue(),直方图 / tdigest 不是其中之一。您可以在AI SDK GitHub 存储库上提交功能请求(或贡献)。

目前的解决方法是使用较旧的 API,默认情况下提交时间点指标,而不进行聚合:TrackMetric()TrackEvent(). 这将增加发送的遥测项目的数量(每个指标将单独发送,而不进行 1 分钟的值聚合),但这将为您提供每个值,以便在必要时在 Analytics 中执行百分位数聚合。