如何记录并查询Azure配额的历史使用数据?
Azure Databricks 计算配额历史自动记录与分析方案
不需要手动刷新Portal录Excel,用Azure原生服务就能全链路自动完成采集、存储、关联匹配,落地成本很低。
无代码快速落地方案(推荐优先用)
- 第一步打通日志链路:在Databricks工作区配置诊断设置,将集群事件、作业运行事件全量推送到Log Analytics工作区,这部分日志会自动记录所有作业集群的VM规格、核数配置、启动/终止时间、关联的作业/脚本ID。
- 配额数据不需要手动采集:Azure Monitor默认按1分钟粒度采集订阅下各区域、各计算系列的配额已用量、剩余量指标,数据直接存在Log Analytics的
AzureMetrics表中,不需要自己写拉取逻辑。 - 自动持久化留存:如果需要超过90天的历史数据,配置Log Analytics的导出规则,把配额指标、作业运行日志自动同步到ADLS Gen2或者Azure Table Storage做长期存储即可。
- 作业与配额峰值的关联直接用Kusto查询实现,不需要手动对齐时间,参考查询语句:
// 匹配单作业运行周期内的配额使用峰值 let job_runtime = DatabricksClusters | where EventType in ("started", "terminated") | summarize run_start=min(TimeGenerated), run_end=max(TimeGenerated) by ClusterId, JobId, VmSize=ClusterVmSize, TotalCores=ClusterCoreCount; let quota_trend = AzureMetrics | where MetricName == "QuotaUsed" | where ResourceProvider == "Microsoft.Compute" | summarize used_core=max(Maximum) by bin(TimeGenerated, 1m), VmFamily; job_runtime | extend scan_time = range(run_start, run_end, 1m) | mv-expand scan_time = todatetime(scan_time) | join kind=inner quota_trend on $left.scan_time == $right.TimeGenerated | summarize peak_used_core=max(used_core) by JobId, ClusterId, VmSize, TotalCores, run_start, run_end
查询结果直接能看到每个作业运行期间对应VM系列的配额峰值,不用手动做时间映射。
轻量定制化采集方案
如果需要更灵活的采集规则,用脚本+定时任务就能实现:
- 写极简的Python或者Azure CLI脚本,核心调用配额查询接口拉取当前各计算系列的使用值,同时调用Databricks Jobs API拉取当前正在运行的作业列表,把时间戳、作业信息、配额值一起写入存储。
- 把脚本挂到Azure Automation Runbook或者服务器的crontab里,按1分钟频率执行就行,采集的数据可以存在时序数据库、Parquet文件甚至普通的表存储里,后续要查的时候直接按作业时间窗口过滤就行。
- 采集用的服务主体只需要配配额读取权限、Databricks作业读取权限,不需要开多余权限。
额外优化建议
- 直接在Azure Monitor配配额阈值告警,当某系列配额使用率到80%的时候自动发通知,甚至可以配置规则自动停掉低优先级作业,避免关键任务因为配额不足启动失败。
- 长期数据可以直接连BI工具做配额趋势看板,不用每次手动导数据算峰值,提前预判配额缺口走扩容流程。
注意:Log Analytics里的监控数据默认只留存90天,有长期留存需求一定要提前配置自动导出规则,避免历史数据被清理。
内容的提问来源于stack exchange,提问作者Anirban Saha
相关产品推荐
相关产品推荐

