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

时间:2019-09-26 20:25:23

标签: azure azure-application-insights prometheus azure-log-analytics azure-monitoring

我已使用Prometheus存储performance metrics并以百分位数(例如95%的响应时间)查询结果。我用prometheus-net发射了它们。

Azure AppInsights中的等效项是什么?

我看到AppInsights / Kusto中​​有percentile functions,但是当我使用GetMetric(“ blah”)。TrackValue(42)时,它存储了Count,Min,Max,Sum和StdDev,这不是直方图我在普罗米修斯(Prometheus)中惯用的存储方式。

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

这是我用随机值记录的一些数据。值列是总和,这是不正确的,因此我看不到如何正确地对这些数据进行百分位数处理。 enter image description here

1 个答案:

答案 0 :(得分:1)

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

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

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