在 Azure Application Insights 中计算跟踪或事件的平均时间跨度

问题描述

我目前正在评估 Azure Application Insights 中的一个用例,但我愿意使用任何其他最适合的基础架构框架。

所以基本上我有一个桌面应用程序,它记录一些事件或跟踪(我不知道应该是哪个)。事件(或跟踪?)示例

 |    timestamp     |     state    | user |
 ------------------------------------------
 | yyyy-mm-dd 12:00 |  is_at_home  | John |
 | yyyy-mm-dd 15:00 |  is_at_work  | John |
 | yyyy-mm-dd 18:00 |  is_outside  | John | 

在新事件到来之前,用户被认为处于接收到的最后一个状态。

我需要提取数据来回答这样的问题:

  • 我想看看约翰在家的总时间是增加还是减少。
  • 我想了解用户经过的时间最多的状态。
  • 我想要状态“is_at_work”的平均持续时间。如果它随着时间的推移而下降或上升。

那么,应用洞察能输出这种分析吗?如果没有,我应该使用哪种架构/平台?我是否使用了正确的关键字来描述我想要的内容

谢谢

解决方法

ai/log 分析查询语言 (kql) 支持各种类似的东西。您将拥有的技巧是让您的查询完全正确,在这里您必须确切地弄清楚您需要做什么,以便您计算“状态”变化时行之间的时间。

这是我的第一次尝试:

let fakeevents = datatable (timestamp: datetime,state: string,user: string ) [
 datetime(2021-08-02 12:00),"is_at_home","John",datetime(2021-08-02 15:00),"is_at_work",datetime(2021-08-02 18:00),"is_outside",datetime(2021-08-02 11:00),"Jim",datetime(2021-08-02 12:00),datetime(2021-08-02 13:00),];
 fakeevents | partition by user (
    order by user,timestamp desc | 
    extend duration = prev(timestamp,1,now()) - timestamp
 )

让我:

时间戳 状态 用户 持续时间
2021-08-02T18:00:00Z is_outside 约翰 06:20:23.1748874
2021-08-02T15:00:00Z is_at_work 约翰 03:00:00
2021-08-02T12:00:00Z is_at_home 约翰 03:00:00
2021-08-02T13:00:00Z is_outside 吉姆 11:25:14.6912472
2021-08-02T12:00:00Z is_at_work 吉姆 01:00:00
2021-08-02T11:00:00Z is_at_home 吉姆 01:00:00

在发送任何数据真实数据之前,您可以通过使用 datatable operator 创建一个充满数据的假表来创建“假”数据。

然后您可以应用诸如 summarize 之类的东西来计算诸如最大值之类的东西。注意用户使用分区以确保每个用户都被单独对待。在我的假设中,如果没有结束事件持续时间的价值,我会使用 now(),你会想要在那里做一些事情,否则你会有空白单元格。