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

Calculate average Time span in Azure Application Insights for Trace or Events

我目前正在评估 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 | 

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

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

那么,application insights可以输出这种分析吗?如果不是,我应该使用哪个 architecture/platform?我在使用正确的关键字来描述我想要的东西吗?

谢谢

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" , "John", 
 datetime(2021-08-02 18:00), "is_outside" , "John", 
 datetime(2021-08-02 11:00), "is_at_home" , "Jim" ,
 datetime(2021-08-02 12:00), "is_at_work" , "Jim", 
 datetime(2021-08-02 13:00), "is_outside" , "Jim", 
 ];
 fakeevents | partition by user (
    order by user, timestamp desc | 
    extend duration = prev(timestamp, 1, now()) - timestamp
 )

得到我:

timestamp state user duration
2021-08-02T18:00:00Z is_outside John 06:20:23.1748874
2021-08-02T15:00:00Z is_at_work John 03:00:00
2021-08-02T12:00:00Z is_at_home John 03:00:00
2021-08-02T13:00:00Z is_outside Jim 11:25:14.6912472
2021-08-02T12:00:00Z is_at_work Jim 01:00:00
2021-08-02T11:00:00Z is_at_home Jim 01:00:00

在发送任何数据真实数据之前,您可以使用 datatable operator 创建“假”数据,使假 table 充满数据。

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