KQL查询优化:获取各服务器上每个应用池的最新状态
问题分析与修正方案
你的核心问题是分组维度错误:原查询按itemType聚合,只会返回每个itemType下的单条最新记录,而非每台服务器(VmName)上每个应用池(AppName)的最新状态。
修正后的KQL查询
traces | where message contains "AppNAme:" | parse message with * "OUTPUT: ResourceGroupName:" ResourceGroupName "VmName:" VmName "AppNAme: " AppName "Status: " Status | where AppName !contains "SharePoint Web Services Root" and VmName !contains "PHA02" // 按服务器+应用池分组,取每组最新时间的记录 | summarize arg_max(timestamp, *) by VmName, AppName | project timestamp, ResourceGroupName, VmName, AppName, Status
关键修正点
- 调整分组维度:将
summarize的by子句从itemType改为VmName, AppName,这样会为每台服务器的每个应用池单独计算最新状态,匹配你的需求。 - 简化判断逻辑:去掉不必要的
flag拼接,直接用timestamp作为判断最新记录的依据——日志时间最晚的那条,就是该应用池的当前最新状态,无需额外标记状态值。
如果你的环境中存在同一VmName+AppName对应不同ResourceGroupName的特殊情况,可以把ResourceGroupName也加入分组键:
| summarize arg_max(timestamp, *) by ResourceGroupName, VmName, AppName
内容的提问来源于stack exchange,提问作者ben
相关产品推荐
相关产品推荐

