如何通过Azure Log Analytics查询Databricks集群Worker超10的运行时段
可行性结论
完全可以。只要你已经完成Azure Databricks到对应Log Analytics工作区的诊断日志配置,就能通过Kusto查询准确提取Worker实例数超过10个的所有连续时间区间。
前置校验项
在执行查询前先确认两个配置项,避免查不到数据:
- 已在Databricks工作区的诊断设置中,勾选集群事件类别日志发送到目标Log Analytics工作区,Worker数量变动、集群状态上报都属于该类别的采集范围
- 诊断配置的生效时间早于你要查询的集群运行时间段,避免数据断档
具体查询操作
- 进入你创建的Log Analytics工作区,在左侧菜单找到「日志」选项,打开Kusto查询编辑器
- 粘贴以下查询语句,替换语句里的时间范围参数为你要排查的时间段,直接执行即可:
DatabricksClusterEvents // 替换下方括号内的时间为实际查询范围 | where TimeGenerated between (datetime(2024-01-01) .. datetime(2024-06-30)) // 仅保留集群运行、集群扩缩容两类带准确Worker数的事件,过滤启动、终止等无效事件 | where EventType in ("cluster_running", "cluster_resized") // 提取当前Worker实例数值 | extend CurrentWorkerCount = toint(ClusterProperties.num_workers) // 筛选Worker数超过10的记录 | where CurrentWorkerCount > 10 | project TimeGenerated, ClusterId, ClusterName, CurrentWorkerCount // 合并连续的超阈值时间段 | sort by ClusterId, TimeGenerated asc // 同集群下相邻两条记录间隔超过5分钟则判定为新的时间区间,可根据实际日志上报频率调整阈值 | extend IsNewPeriod = iif(ClusterId != prev(ClusterId) or datetime_diff("minute", TimeGenerated, prev(TimeGenerated)) > 5, 1, 0) | extend PeriodGroupId = row_cumsum(IsNewPeriod) | summarize StartTime = min(TimeGenerated), EndTime = max(TimeGenerated), 区间内峰值Worker数 = max(CurrentWorkerCount) by PeriodGroupId, ClusterId, ClusterName | project StartTime, EndTime, ClusterId, ClusterName, 区间内峰值Worker数, 持续时长 = format_timespan(EndTime - StartTime, "dd天hh小时mm分钟") | sort by StartTime desc
使用提示
- 查询结果会按集群维度拆分所有连续超阈值的时间段,直接展示每个区间的开始/结束时间、持续时长、区间内Worker峰值
- 如果执行后返回空结果,先运行
DatabricksClusterEvents | take 10确认日志是否正常入库,再回头检查诊断设置的类别勾选是否正确 - 针对自动伸缩集群,如果你需要更细粒度的节点数校验,可以结合采集的Spark指标表交叉核对,避免事件上报延迟带来的统计偏差
- 5分钟间隔阈值可根据实际场景调整:如果你的集群扩缩容很频繁,可以把间隔调至2-3分钟,避免把短时间缩容到10以下又扩容的场景误合并为同一个区间
内容的提问来源于stack exchange,提问作者Mahdi
相关产品推荐
相关产品推荐

