我需要使用以下消息模式应用见解跟踪:
- “D1 已连接”
- “D2 已连接”
- “D3 已连接”
- “D1 已断开连接”
- “D3 已断开连接”
- “D1 已连接”
- “D2 已断开连接”
- 等等
我基本上是在监视一些设备和连接时间。如何编写一个查询来“配对”事件(D1 连接/断开连接、D2 连接/断开连接等)并评估“ session ”的持续时间?
我需要获取以下信息:
- 一天的总连接时间
- 一天内特定设备的连接分布
- 等等。
最佳答案
仅根据跟踪文本执行此操作会很困难。我建议使用自定义属性来协助实现这一点。
到目前为止,最简单的选择是发送一些附加属性以及包含所需所有信息的断开连接事件。喜欢:
// Start of session
var tt = new TraceTelemetry("D1 connected");
tt.Properties.Add("Event", "SessionStart");
telemetryClient.TrackTrace(tt);
var startTime = DateTime.Now;
// Do your thing
....
tt = new TraceTelemetry("D1 disconnected");
tt.Properties.Add("Event", "SessionEnd");
tt.Properties.Add("SessionLength", (startTime - DateTime.Now).TotalMilliseconds.ToString());
telemetryClient.TrackTrace(tt);
自定义属性存储在事件的 customDimensions
字段中。
现在,在 AI 分析中,您可以像这样查询这些值:
计数:
traces
| where customDimensions.Event == "SessionEnd"
| summarize count()
session 时长:
traces
| where customDimensions.Event == "SessionEnd"
| project message, customDimensions.Length
所有 session 的总持续时间:
traces
| where customDimensions.Event == "SessionEnd"
| extend duration = tolong(customDimensions.SessionLength)
| summarize sum(duration)
我还建议添加设备 ID 作为所有发出事件的自定义属性。这将使查询更容易。然后,您可以计算每个设备的最小、最大和平均 session 长度,例如:
traces
| where customDimensions.Event == "SessionEnd"
| extend duration = tolong(customDimensions.SessionLength)
| extend device = tostring(customDimensions.DeviceName)
| summarize sum(duration) by device
如果您也想加入开始事件,或者不能或不会执行上述操作,则必须将开始事件与结束事件结合起来才能进行这些查询。您仍然需要使用一些自定义属性,因为单独查询文本会很困难,因为您需要分析文本以确定涉及什么事件和什么设备。
看这里azure AI QUERY combine start and response to calculate average了解连接在 AI Analytics 中的工作原理。
关于azure - Application Insights Analytics 中的配对事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41621585/