Set-AzDiagnosticSetting能否通过PowerShell修改诊断设置Category Groups?
问题
在Azure资源体系中,部分特定资源提供Diagnostic settings(诊断设置)配置页面,可通过Set-AzDiagnosticSetting PowerShell模块对该页面的配置项进行交互操作。
实际使用中发现,该模块几乎支持修改诊断设置页面的所有指标配置项,唯独无法操作Category Groups(类别组)相关配置。当前该模块支持启用*Logs(日志)分类下的Categories(类别)项,但不支持Category groups(类别组)*的配置调整,需要找到通过PowerShell完成Category groups配置修改的可行方案。
原有操作单个类别的示例代码如下:
Set-AzDiagnosticSetting -ResourceID $ResourceID -Enabled $true -MetricCategory AllMetrics -Category AuditEvent -Name $EventHubLoggingName -EventHubName $EventHubName -EventHubAuthorizationRuleId $EventHubPath | Out-Null
可行方案
旧版本(如8.0.0 Az版本对应Az.Monitor 3.x及以下)的Set-AzDiagnosticSetting确实没有内置类别组操作参数,两种方案可以实现需求:
方案1:升级Az.Monitor模块直接调用原生参数
Az.Monitor模块从4.1.0版本开始新增了-CategoryGroup参数,升级后可以直接在原命令基础上指定要启用的类别组即可,无需额外改造逻辑。
# 升级模块到指定最低版本 Update-Module Az.Monitor -MinimumVersion 4.1.0 -Force # 示例:同时启用AllMetrics指标、AuditEvent日志类别、allLogs日志类别组 Set-AzDiagnosticSetting -ResourceID $ResourceID -Enabled $true -MetricCategory AllMetrics -Category AuditEvent -CategoryGroup allLogs -Name $EventHubLoggingName -EventHubName $EventHubName -EventHubAuthorizationRuleId $EventHubPath | Out-Null
常用的类别组标识为allLogs、audit,具体支持的类别组以对应资源类型的诊断设置定义为准。
方案2:调用Azure Monitor REST API实现配置(无需升级模块)
如果环境不允许升级Az模块,可以直接通过PowerShell调用Azure管理接口完成配置,复用当前已登录的Az上下文获取认证令牌即可,无需额外鉴权操作。
# 获取当前登录上下文的访问令牌 $azContext = Get-AzContext $accessToken = Get-AzAccessToken -ResourceUrl "https://management.azure.com" -DefaultProfile $azContext $requestHeader = @{ Authorization = "Bearer $($accessToken.Token)" "Content-Type" = "application/json" } # 构造诊断配置请求体,logs节点下可同时配置category和categoryGroup $requestBody = @{ properties = @{ eventHubName = $EventHubName eventHubAuthorizationRuleId = $EventHubPath metrics = @( @{ category = "AllMetrics" enabled = $true } ) logs = @( # 配置类别组,示例为启用allLogs组 @{ categoryGroup = "allLogs" enabled = $true } # 保留原有单独日志类别的配置 @{ category = "AuditEvent" enabled = $true } ) } } | ConvertTo-Json -Depth 10 # 发起更新请求 $requestUrl = "https://management.azure.com/$($ResourceID)/providers/Microsoft.Insights/diagnosticSettings/$($EventHubLoggingName)?api-version=2021-05-01-preview" Invoke-RestMethod -Method Put -Uri $requestUrl -Headers $requestHeader -Body $requestBody
注意:同一诊断设置中,不要对同一类日志同时配置独立category和其归属的categoryGroup,否则会出现配置冲突报错。
内容的提问来源于stack exchange,提问作者Masterchiefxx17
相关产品推荐
相关产品推荐

