You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Log Analytics中运行嵌套查询同时生成两个时间图表

解答

首先明确两个问题的结论:

  • Log Analytics使用的KQL查询语言完全支持嵌套查询,可根据业务需求编写任意层级的子查询逻辑
  • 你需要同时获取磁盘吞吐量、IOPS时间图表的需求完全可实现,且不需要依赖嵌套查询。

你原有写法存在两个问题:

  • 直接拼接两段独立查询且未做语句分隔,查询窗口默认只会返回最后一段语句的渲染结果
  • 第二段IOPS查询的计算逻辑错误:Disk Transfers/sec计数器单位为每秒IO操作次数,不需要除以1024/1024做存储单位换算,原写法会导致IOPS数值完全失真。

实现方案

方案1:两个指标合并到同一张时间图展示(推荐)

通过maxif聚合函数在同一次聚合中计算两个指标,最终在单张时间图中生成两条对应序列,查询语句如下:

Perf
| where ObjectName == "LogicalDisk"
| where CounterName in ("Disk Bytes/sec", "Disk Transfers/sec")
| where Computer contains "servername"
| summarize 
    // 磁盘吞吐量,单位MB/s
    DiskThroughputMBps = maxif(CounterValue, CounterName == "Disk Bytes/sec") / 1024 / 1024,
    // 磁盘IOPS,单位次/秒
    DiskIOPS = maxif(CounterValue, CounterName == "Disk Transfers/sec")
    by Computer, bin(TimeGenerated, 5m)
| render timechart

该写法会自动按Computer维度拆分,分别展示每台服务器的吞吐量、IOPS随时间变化的趋势。

方案2:两个指标分别渲染为独立时间图

修正计算逻辑后,在两段查询末尾添加英文分号;做语句分隔,即可在一次查询运行后返回两个独立的图表结果,查询语句如下:

// 磁盘吞吐量查询
Perf
| where ObjectName == "LogicalDisk"
| where CounterName == "Disk Bytes/sec"
| where Computer contains "servername"
| summarize ThroughputInMBs = max(CounterValue) / 1024 / 1024 by Computer, bin(TimeGenerated, 5m)
| render timechart;

// 磁盘IOPS查询
Perf
| where ObjectName == "LogicalDisk"
| where CounterName == "Disk Transfers/sec"
| where Computer contains "servername"
| summarize IOPS = max(CounterValue) by Computer, bin(TimeGenerated, 5m)
| render timechart

内容的提问来源于stack exchange,提问作者Yackzel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 06:42:30