在 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 |
在新事件到来之前,用户被视为处于接收到的最后状态。
我需要提取数据来回答这样的问题:
- 我想看看约翰在家的总时间是在增加还是在减少。
- 我想了解用户在哪些状态下停留的时间最多。
- 我想要状态“is_at_work”的平均持续时间。如果它随着时间的推移下降或上升。
那么,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() ,你会想在那里做一些事情,否则你会有空白单元格。
我目前正在评估 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”的平均持续时间。如果它随着时间的推移下降或上升。
那么,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() ,你会想在那里做一些事情,否则你会有空白单元格。