我们正在向桌面应用推出Application Insights。由于用户在使用应用程序时可能处于脱机状态,因此我们使用PersistenceChannel来确保事件可以在以后的会话中发送,并且我们在应用程序关闭时调用flush(我们的跟踪器的Dispose()) :
public ApplicationInsightsTracker()
{
this.client = new TelemetryClient();
this.client.InstrumentationKey = InstrumentationKey;
TelemetryConfiguration.Active.TelemetryChannel = new PersistenceChannel();
TelemetryConfiguration.Active.TelemetryChannel.DeveloperMode = true;
}
~ApplicationInsightsTracker()
{
this.Dispose();
}
public override void Dispose()
{
this.client.Flush();
GC.SuppressFinalize(this);
}
public override void TrackEvent(ITrackerEvent trackerEvent)
{
try
{
this.client.TrackEvent(trackerEvent.Name, trackerEvent.Properties);
}
catch (Exception e)
{
Debug.WriteLine(string.Format("Failed to track event {0}. Exception message {1}", trackerEvent.Name, e.Message));
}
}
我们还使用持续导出将事件数据从Application Insights发送到Azure Blob数据库。我们将Power BI连接到Blob数据库,有一天刷新功能停止工作。我们进行了调查,结果发现我们正在加载具有相同唯一ID的2个事件。在查看blob时,我们发现了同一事件的2个连续blob:
blob1.blob - Holds 1 event
{"event":...,"internal":{"data":{"id":"8709bb70-e6b1-11e5-9080-f77f0d66d988"..."data":{..."eventTime":"2016-03-10T11:15:53.9378827Z"}..."user":{..."anonId": "346033da-012d-4cc4-9841-836e5d8f8e32"..."session":{"id":"cb668d2f-9755-4afd-97c2-66cc3504349a"...
blob2.blob - Holds 3 events
{"event":...,"internal":{"data":{"id":"8709bb70-e6b1-11e5-9080-f77f0d66d988"..."data":{..."eventTime":"2016-03-10T11:15:53.9378827Z"}..."user":{..."anonId": "346033da-012d-4cc4-9841-836e5d8f8e32"..."session":{"id":"cb668d2f-9755-4afd-97c2-66cc3504349a"...
{"event":...
{"event":...
正如您所看到的,两个blob上的第一个事件是相同的。我们在PersistenceChannel上运行测试,机器与网络连接/断开,AI沿线的某处做了这个。
我们不完全确定这是否是我们如何使用它或图书馆存在缺陷的问题。您可以想象通过重复事件可能会非常痛苦(特别是如果您在外部构建模型)。
我们是否对AI做了一些奇怪的事情,或者这是一个已知的问题?
答案 0 :(得分:1)
我与出口的团队核对过,他们说
当前的出口管道有重复出口的机会
这是他们正在研究的问题。
所以看起来你做错了什么,这只是你需要注意的一个案例,现在就可以解决了。
答案 1 :(得分:1)
AppInsights导出的数据可能包含欺骗行为。
如果要将所有数据导出到Power BI,则可以使用Power Query's built-in duplicate removal feature。