如何用Azure CLI/Bash列出资源组/订阅的所有诊断设置?
列出订阅或资源组下所有Diagnostic Settings的Bash脚本
遍历当前订阅下所有资源的诊断设置
这个脚本会遍历当前登录订阅内的所有资源,检查并输出带有诊断设置的资源及其配置信息:
#!/bin/bash # 遍历当前订阅下所有资源ID az resource list --query "[].id" -o tsv | while read resource_id; do # 获取该资源的诊断设置 settings=$(az monitor diagnostic-settings list --resource "$resource_id" -o json) # 仅当存在诊断设置时输出 if [[ $(echo "$settings" | jq 'length') -gt 0 ]]; then echo "=== 资源ID: $resource_id ===" # 过滤并输出关键配置项 echo "$settings" | jq '.value[] | {名称: .name, 存储账户ID: .storageAccountId, 事件中心名称: .eventHubName, Log Analytics工作区ID: .workspaceId}' echo "" fi done
遍历指定资源组下所有资源的诊断设置
如果只需要检查某个资源组内的资源,修改脚本如下,替换your-resource-group-name为目标资源组名称:
#!/bin/bash # 指定目标资源组 RESOURCE_GROUP="your-resource-group-name" # 遍历资源组内所有资源ID az resource list --resource-group "$RESOURCE_GROUP" --query "[].id" -o tsv | while read resource_id; do settings=$(az monitor diagnostic-settings list --resource "$resource_id" -o json) if [[ $(echo "$settings" | jq 'length') -gt 0 ]]; then echo "=== 资源ID: $resource_id ===" echo "$settings" | jq '.value[] | {名称: .name, 存储账户ID: .storageAccountId, 事件中心名称: .eventHubName, Log Analytics工作区ID: .workspaceId}' echo "" fi done
使用说明
- 确保已通过
az login登录Azure CLI,并切换到目标订阅(可通过az account set --subscription <订阅ID/名称>切换) - 需要安装
jq工具来处理JSON输出,Debian/Ubuntu系统可通过sudo apt install jq安装,macOS用brew install jq - 若订阅/资源组内资源数量较多,脚本运行时间会较长,可在
az resource list命令后添加--resource-type <资源类型>参数缩小遍历范围(例如--resource-type "Microsoft.Compute/virtualMachines"仅遍历虚拟机)
内容的提问来源于stack exchange,提问作者user3606183
相关产品推荐
相关产品推荐

