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

问题描述

我正在使用.NET中的TelemetryClient.TrackMetric方法在“应用程序见解”中记录一些自定义指标,并且我注意到当在Azure门户中查看某些事件时,有时会重复某些事件。

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

This GitHub issue表示这种行为是预期的,因为AI使用的是至少一次交付。

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

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

更新

一个更具体的例子:

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

在Azure门户中,我将通过转到Application Insights -> Metrics并自定义图表来创建一个简单的图表。我在custom-reward下拉列表中选择我的Metric指标,然后选择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"])

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

解决方法

如果您要进行自己的查询,通常会使用类似summarizemakeseries之类的方法来对图表进行重复数据删除。您不会通常绘制单个项目,除非您查看的时间范围很小?

所以而不是类似的

summarize count() ...

可以

summarize dcount(itemId) ... 

或您可以在不需要查询的查询中添加“伪”摘要,可以使用 by itemId将多行合并为一个,并使用any(x)来获取每一行的任何单独值每个itemId的列。

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...