如何在Azure Monitor Workbook中结合Azure Resource Graph与ARM数据源批量查询函数应用的执行错误检测器数据?
实现Azure Workbooks中批量调用ARM API处理Resource Graph结果的方案
你的需求完全可以实现!之前尝试用单个参数的方式只适用于单资源场景,而通过Workbooks的计算列+ARM数据源就能轻松实现对Resource Graph返回的每个函数应用自动调用API并展示结果,具体步骤如下:
步骤1:创建Resource Graph查询获取函数应用列表
首先创建一个Azure Resource Graph查询步骤,获取订阅/资源组范围内的所有函数应用,至少要包含resourceId字段(用来后续调用ARM API),示例查询:
resources | where type == "microsoft.web/sites" and kind contains "functionapp" | project resourceId, 应用名称=name, 资源组=resourceGroup, 订阅=subscriptionId
执行后会得到一个包含所有目标函数应用的表格。
步骤2:添加计算列批量调用ARM API
接下来给这个表格添加计算列,让每行自动调用detectors/functionExecutionErrors API并提取结果:
- 点击表格右上角的「编辑」按钮,进入编辑模式
- 在表格工具栏选择「添加列」→「计算列」
- 在计算列配置面板中:
- 数据源类型选择「Azure Resource Manager」
- API版本填写
2022-03-01(或函数应用对应的最新稳定API版本,可在Azure REST API文档中确认) - 资源路径填写
{resourceId}/detectors/functionExecutionErrors,这里的{resourceId}会自动绑定当前行的resourceId字段,实现每行单独调用API - 响应处理选择「JSON Path」,填写你需要提取的路径:
$.properties.dataset[0].table.rows[0][1] - 给列起个直观的名字,比如「执行健康状态摘要」
- 保存配置后,表格会自动为每一行函数应用调用ARM API,并展示提取后的结果
关键注意事项
- 权限配置:确保Workbooks使用的身份(比如你的用户身份或托管标识)拥有对目标函数应用的
Microsoft.Web/sites/detectors/read权限,否则会出现API调用失败的情况 - 速率限制:如果目标函数应用数量较多,可能会触发ARM API的速率限制,建议适当缩小查询范围(比如按资源组筛选),或者调整Workbooks的查询刷新频率
- API版本兼容性:不同的ARM API版本返回的JSON结构可能略有差异,要确保使用的API版本和你测试时的版本一致,避免JSON Path提取失败
为什么之前的参数方案不适用?
你之前尝试将Resource Graph结果标记为单值参数,这种方式只能传递单个资源ID,适合单资源的交互式场景;而计算列的方式会自动遍历表格的每一行,为每个资源单独发起ARM API请求,完全满足你批量处理所有资源的需求。
内容的提问来源于stack exchange,提问作者AlexPawlak
相关产品推荐
相关产品推荐

