跟踪应用程序洞察中的计数器值

Tracking a counter value in application insights

我正在尝试使用应用程序洞察来跟踪我的应用程序中活动流的数量计数器。我有 2 个目标要实现:

这些流可能存在很长时间,有时也很短暂。所以这个数字有时可以每秒变化 100 次,有时可以保持几个小时不变。

我一直在尝试将此活动流计数作为应用程序洞察指标进行跟踪。 当一个新的流打开时,我在我的应用程序中递增一个计数器,当一个流关闭时递减。在每次更改时,我都会使用类似这样的遥测客户端

var myMetric = myTelemetryClient.GetMetric("Metricname");
myMetric.TrackValue(myCount);

当我使用 Kusto 查询我的指标值时,我发现由于这些 activity 在 10 秒内的集群,我的指标值得到聚合。就我的警报而言,我可以接受它,因为我可以查看聚合的最大值。但我无法提供活动流数量的仪表板,因为我无法知道我的测量点之间的活动流数量。我知道最小值、最大值和平均值,但我不知道聚合周期的最后一个值,因为它可能介于 0 和 1000 之间,所以没有帮助。

所以我的解决方案不能满足我的需求,我想到了一些改变:

最后,我认为我的需求并没有那么奇特,所以我想知道我是否错误地使用了应用洞察力。

有什么方法可以更改指标的行为以满足我的目的?我很欣赏它在发送数据之前进行预聚合以降低摄取成本,但这阻止了我解决一个简单的问题。 度量甚至是执行此操作的正确方法吗?应用洞察中是否有替代方法?

您可以使用 TrackMetric 而不是 GetMetric 仪式来跟踪单个值而不聚合。来自 the docs:

Microsoft.ApplicationInsights.TelemetryClient.TrackMetric is not the preferred method for sending metrics. Metrics should always be pre-aggregated across a time period before being sent. Use one of the GetMetric(..) overloads to get a metric object for accessing SDK pre-aggregation capabilities. If you are implementing your own pre-aggregation logic, you can use the TrackMetric() method to send the resulting aggregates.

但您也可以使用事件,如下所述:

If your application requires sending a separate telemetry item at every occasion without aggregation across time, you likely have a use case for event telemetry; see TelemetryClient.TrackEvent (Microsoft.ApplicationInsights.DataContracts.EventTelemetry).