在 Azure 门户中绘制之前从应用程序见解中删除重复的自定义指标事件
Remove duplicate custom metric events from application insights before plotting in Azure portal
我在 Application insights 中使用 .NET 中的 TelemetryClient.TrackMetric
方法记录一些自定义指标,我注意到当我在 Azure 门户中查看某些事件时,它们偶尔会重复。
我已经深入研究了数据,重复事件具有相同的 itemId
和 timestamp
,但是如果我通过向查询中添加 | 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
现在显示为拆分下拉列表中的一个选项。之后,您可以单击“固定到仪表板”。您丢失了通过简单的“指标”图表获得的图表左下角方便的“时间段总和”指示器,但我相信我可以通过其他方式重新创建它。
如果您正在执行自己的查询,您通常会使用 summarize
或 makeseries
之类的东西来对图表进行重复数据删除。你不会通常绘制单个项目,除非你正在查看一个非常小的时间范围?
所以而不是像
summarize count() ...
你可以做
summarize dcount(itemId) ...
或者您可以向以前不需要它的查询添加一个“假”摘要,使用 by itemId
将多行合并为一个,使用 any(x)
获取任何单个行的值对于每个 itemId 的每一列。
但这实际上取决于您在特定查询中所做的事情。如果您使用 sum(itemCount)
之类的东西来处理抽样,您现在还有其他奇怪的情况,其中 at-least-once 交付可能有重复的抽样项目? (更新您的问题以添加特定查询和假设结果可能会导致更具体的答案)。
我在 Application insights 中使用 .NET 中的 TelemetryClient.TrackMetric
方法记录一些自定义指标,我注意到当我在 Azure 门户中查看某些事件时,它们偶尔会重复。
我已经深入研究了数据,重复事件具有相同的 itemId
和 timestamp
,但是如果我通过向查询中添加 | 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
现在显示为拆分下拉列表中的一个选项。之后,您可以单击“固定到仪表板”。您丢失了通过简单的“指标”图表获得的图表左下角方便的“时间段总和”指示器,但我相信我可以通过其他方式重新创建它。
如果您正在执行自己的查询,您通常会使用 summarize
或 makeseries
之类的东西来对图表进行重复数据删除。你不会通常绘制单个项目,除非你正在查看一个非常小的时间范围?
所以而不是像
summarize count() ...
你可以做
summarize dcount(itemId) ...
或者您可以向以前不需要它的查询添加一个“假”摘要,使用 by itemId
将多行合并为一个,使用 any(x)
获取任何单个行的值对于每个 itemId 的每一列。
但这实际上取决于您在特定查询中所做的事情。如果您使用 sum(itemCount)
之类的东西来处理抽样,您现在还有其他奇怪的情况,其中 at-least-once 交付可能有重复的抽样项目? (更新您的问题以添加特定查询和假设结果可能会导致更具体的答案)。