Azure日志KQL查询需求:计算函数执行时长平均值
Azure日志分析:计算两类平均时长的KQL查询
1. 计算whole_time的全局平均值
whole_time指同一operation_Id下首条日志到末条日志的时长,以下是实现查询:
// 替换YourLogTable为实际的Azure日志表名 YourLogTable | summarize first_log_time = min(timestamp), last_log_time = max(timestamp) by operation_Id | extend whole_time = last_log_time - first_log_time | summarize avg_whole_time = avg(whole_time)
逻辑说明:
- 按
operation_Id分组,提取每个分组内的最早、最晚日志时间戳 - 计算每个分组的首尾日志时长差
whole_time(结果为timespan类型,示例:00:02:15代表2分15秒) - 对所有分组的
whole_time求平均值,得到全局平均首尾时长
2. 计算special_time的全局平均值
special_time指同一operation_Id下,包含Request Part_One与Request Part_Two日志的时间差,以下是实现查询:
// 替换YourLogTable为实际的Azure日志表名 YourLogTable | where message in ("Request Part_One", "Request Part_Two") | summarize part_one_time = maxif(timestamp, message == "Request Part_One"), part_two_time = maxif(timestamp, message == "Request Part_Two") by operation_Id // 过滤掉缺少任意一条目标日志的分组,避免无效计算 | where isnotempty(part_one_time) and isnotempty(part_two_time) | extend special_time = part_two_time - part_one_time | summarize avg_special_time = avg(special_time)
逻辑说明:
- 先筛选出仅包含目标message的日志记录
- 按
operation_Id分组,提取每个分组内两类目标日志的时间戳(maxif用于处理同一operation_Id下有多条相同message的情况,取最晚的记录;若确保每个operation_Id仅各有一条,可替换为any) - 过滤掉缺少任意一条目标日志的分组
- 计算两类日志的时间差
special_time,再求全局平均值
额外说明:
- 若需将时长转为秒/毫秒数值,可将时间差计算替换为
datetime_diff('second', last_log_time, first_log_time)(秒)或datetime_diff('millisecond', ...)(毫秒) - 若需保留每个
operation_Id的明细数据,去掉最后一步的summarize avg_xxx即可
内容的提问来源于stack exchange,提问作者Whey
相关产品推荐
相关产品推荐

