如何在Kusto中​​的同一会话中计算两个连续请求之间的持续时间

问题描述

我正在尝试计算Application Insights中两个请求/页面视图之间的时间跨度。目的是计算在页面上花费的时间。我知道AI具有autoTrackPageVisitTime设置,但是很遗憾,此设置未启用。

我最初的尝试是将请求表与自身连接起来

requests | join kind=inner requests on session_id,$left.timestamp < $right.timestamp ,但据我了解,不支持使用少于。

还有其他人对如何计算每个会话的两个连续请求之间的时间有一个想法吗?

编辑: 用伪术语:

  1. 查找第一个请求,其中page / name ='page1'
  2. 找到下一个请求,其中sessionId等于第一个请求
  3. 计算两次请求之间的持续时间
  4. 计算所有sessionId的平均持续时间。

解决方法

我不确定您是否始终要从特定页面进行跟踪,但是如果您正在寻找平均值,则不必担心单个页面的计时。

如果您要查找整个站点的平均页面时间,则只需要会话活动的最早时间,上次时间以及该时间段内访问的页面数即可。将时间差除以页数即可得出平均值。然后,您可以再次致电summarize以获取总体平均值。

注意-我要从页面数中减去1,因为我没有打开最后一页到离开页面之间的时间。

代码:

let userTiming = requests | summarize PageViews=count()-1,StartTime=min(timestamp),EndTime=max(timestamp) by session_Id;
userTiming
| extend AverageTime=datetime_diff('millisecond',EndTime,StartTime)/PageViews
//| summarize avg(AverageTime)

如果您要根据用户的下一次网页浏览量来寻找在特定页面上花费的时间,那么您最初将表联接到自身的想法还不错,但是我们可以采取一些不同的方式来避免

  1. 获取仅包含给定页面视图的表。
  2. 仅根据会话ID将其加入到请求表中。
  3. 将其过滤掉,因此我们只有在这些请求之后的请求到达我们的特定页面。
  4. 使用Summary(摘要)仅获得在第一次页面浏览后的最小时间戳。
  5. 按会话ID获取平均差异
  6. 像以前一样,将avg函数与。summarize配对可以得出整体平均值。

代码:

let startTime = requests | where name == "Function2" | project session_Id,startingTimestamp=timestamp;
let userTiming = requests 
| join kind=inner (startTime) on $left.session_Id == $right.session_Id
| where timestamp > startingTimestamp
| summarize nextTimestamp=min(timestamp) by startingTimestamp,session_Id;
userTiming
| summarize AverageTime=avg(datetime_diff('millisecond',nextTimestamp,startingTimestamp)) by session_Id
//| summarize avg(AverageTime)