问题描述
我目前正在评估 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 |
我需要提取数据来回答这样的问题:
那么,应用洞察能输出这种分析吗?如果没有,我应该使用哪种架构/平台?我是否使用了正确的关键字来描述我想要的内容?
谢谢
解决方法
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(),你会想要在那里做一些事情,否则你会有空白单元格。