在 Azure 门户中绘制之前从应用程序见解中删除重复的自定义指标事件

Remove duplicate custom metric events from application insights before plotting in Azure portal

我在 Application insights 中使用 .NET 中的 TelemetryClient.TrackMetric 方法记录一些自定义指标,我注意到当我在 Azure 门户中查看某些事件时,它们偶尔会重复。

我已经深入研究了数据,重复事件具有相同的 itemIdtimestamp,但是如果我通过向查询中添加 | extend ingestionTime = ingestion_time() 来显示摄取时间,那么我可以看到摄取时间不同。

This GitHub issue 表示此行为是预期的,因为 AI 使用至少一次传递。

我使用总和聚合在 Azure 门户中的图表中绘制这些指标,但是这些重复项正在对图表造成信任问题,因为重复项被简单地视为两个单独的事件。

在 Azure 门户中绘制数据之前,是否可以根据 itemId 对事件进行重复数据删除?

更新

更具体的例子:

我是 运行 一种算法,由事件触发并产生奖励。该算法一天可能会被触发几十次,奖励是一个正负浮点值。它每次将奖励作为自定义指标(称为 custom-reward)以及一些用于数据拆分的附加属性记录到 Application Insights。

在 Azure 门户中,我通过转到 Application Insights -> Metrics 并自定义图表来创建一个简单的图表。我 select 我的 custom-reward 指标在 Metric 下拉列表中,select Sum 作为聚合。我可能会也可能不会应用拆分。我将图表保存到我的仪表板。

这个简单的图表为我提供了一种监控系统的好方法,以确保没有意外发生,图表左下角的 Sum 值让我可以快速查看奖励总和是正数还是正数。图表范围内的负数,以及负数。

然而,有时我对结果感到惊讶(比如说在过去的 12 小时内,奖励的总和出人意料地为负),并且在仔细检查后我发现一些大的负结果被重复了。进一步的调查表明,其他事件也发生过这种情况,但我往往没有注意到结果较小。

我不太熟悉 Application Insights 的高级查询位,实际上我今天才第一次使用它来深入了解事件。但听起来我确实可以做一些事情来创建一个查询,然后我可以绘制该查询,然后对结果进行去重处理?

更新 2

感谢@JohnGardner 的提示,我已经在这方面取得了进展,所以我将其标记为答案。我通过在查询中添加以下行来删除和绘制结果:

| summarize timestamp=any(timestamp), value=any(value), name=any(name), customDimensions=any(customDimensions) by itemId

更新 3

将以下行添加到查询允许我拆分自定义数据(在本例中按算法 ID 拆分):

| extend algorithmId = tostring(customDimensions.["algorithm-id"])

添加该行后,当您在查询结果中 select“图表”时,algorithmId 现在显示为拆分下拉列表中的一个选项。之后,您可以单击“固定到仪表板”。您丢失了通过简单的“指标”图表获得的图表左下角方便的“时间段总和”指示器,但我相信我可以通过其他方式重新创建它。

如果您正在执行自己的查询,您通常会使用 summarizemakeseries 之类的东西来对图表进行重复数据删除。你不会通常绘制单个项目,除非你正在查看一个非常小的时间范围?

所以而不是像

summarize count() ...

可以

summarize dcount(itemId) ... 

或者您可以向以前不需要它的查询添加一个“假”摘要,使用 by itemId 将多行合并为一个,使用 any(x) 获取任何单个行的值对于每个 itemId 的每一列。

但这实际上取决于您在特定查询中所做的事情。如果您使用 sum(itemCount) 之类的东西来处理抽样,您现在还有其他奇怪的情况,其中 at-least-once 交付可能有重复的抽样项目? (更新您的问题以添加特定查询和假设结果可能会导致更具体的答案)。