如何通过Azure REST API获取Azure门户诊断设置关联的资源列表
获取Azure门户诊断设置中资源列表的API方案
我之前也碰到过一样的需求——Azure门户里直接看不到诊断设置对应的完整资源列表,用单个诊断设置接口拿不到想要的结果。这里给你两个实用的方法,能精准拿到门户里展示的那份资源列表:
方法1:用Azure Resource Graph批量查询(推荐)
这是最高效的方式,和门户后台的逻辑一致,能跨订阅快速筛选出所有配置了诊断设置的资源。
你可以用Kusto查询语句来定义筛选规则:
Resources | where type contains "Microsoft.Insights/diagnosticSettings" | project ResourceName = name, ResourceGroup = resourceGroup, SubscriptionId = subscriptionId, ResourceType = type
然后调用Azure Resource Graph的REST API:POST https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2021-03-01
请求体里带上上面的查询语句,格式如下:
{ "query": "Resources | where type contains \"Microsoft.Insights/diagnosticSettings\" | project ResourceName = name, ResourceGroup = resourceGroup, SubscriptionId = subscriptionId, ResourceType = type" }
如果用Azure CLI的话更简单,直接跑这条命令:
az graph query -q "Resources | where type contains 'Microsoft.Insights/diagnosticSettings' | project ResourceName = name, ResourceGroup = resourceGroup, SubscriptionId = subscriptionId, ResourceType = type"
方法2:遍历资源+诊断设置接口联动
如果需要每个资源的具体诊断配置细节,可以用这个分步方法:
- 第一步:先获取订阅下所有支持诊断设置的资源(比如虚拟机、App Service、存储账户这些),调用资源列表API:
GET https://management.azure.com/subscriptions/{subscriptionId}/resources?api-version=2021-04-01
你可以通过$filter参数过滤特定资源类型,比如$filter=type eq 'Microsoft.Compute/virtualMachines'。 - 第二步:对每个拿到的资源ID,调用诊断设置列表接口:
GET https://management.azure.com/{resourceId}/providers/Microsoft.Insights/diagnosticSettings?api-version=2021-05-01-preview - 第三步:收集所有返回了诊断设置的资源,整理成列表,这就是门户里展示的内容。
关键注意点
- 确保你的账号有Monitoring Reader或者Contributor权限,不然会被API拒绝访问。
- 如果涉及多个订阅,记得遍历每个订阅执行查询或API调用。
内容的提问来源于stack exchange,提问作者prashant k
相关产品推荐
相关产品推荐

