通过Azure自动化PowerShell禁用/启用Azure监视器警报规则

3xiyfsfu  于 2023-06-24  发布在  Shell
关注(0)|答案(5)|浏览(184)

我有一个Azure监控警报规则,它会每5分钟检查我的虚拟机的心跳。但是,虚拟机本身将在每天晚上11点离线,并将在第二天上午9点再次启动。
所以我尝试使用Azure自动化同时禁用/启用我的警报规则。这是我尝试使用的代码:

Write-Output "start job"
$vmResourceGroupName = <<resource_group>>
$vmName = <<vm_name>>

try
{
    # Connection
    Write-Output "connect to the VM"
    $Conn = Get-AutomationConnection -Name AzureRunAsConnection
    $rcConn = Connect-AzAccount -ServicePrincipal -TenantId $Conn.TenantID -ApplicationId $Conn.ApplicationID -CertificateThumbprint $Conn.CertificateThumbprint

    # Stop the VM
    Write-Output "Stop the VM"
    stop-AzVM -ResourceGroupName $vmResourceGroupName -Name $vmName -Force
    #first method that I use to disable my alert rules
    Get-AzAlertRule -ResourceGroupName $vmResourceGroupName -TargetResourceId <<my_resource_id>> -DisableRule
    #second method that I use to disable my alert rules
    Disable-AzureRmActivityLogAlert -Name <<my_alert_name>> -ResourceGroupName <<my_resource_group>>
}
catch
{
    if($_.Exception.Message)
   {
        Write-Error -Message "$($_.Exception.Message)" -ErrorAction Continue
    }
    else
    {
        Write-Error -Message "$($_.Exception)" -ErrorAction Continue
    }
    throw "$($_.Exception)"
}
finally
{
    Write-Output "end job"
}

我使用的两个方法都返回一个错误,说我的警报规则未找到。

tmb3ates

tmb3ates1#

我同意Joy对新指标警报的回答,但是如果您的警报是“日志搜索”信号类型,而不是“指标”信号类型,那么您必须禁用警报,如下所示。

Update-AzScheduledQueryRule -ResourceGroupName "<resource group name>"  -Name "<alert name>" -Enabled 0

插图:

相关参考文献:

  1. Update-AzScheduledQueryRule
  2. Add-AzMetricAlertRuleV2
  3. Get-AzMetricAlertRuleV2
  4. Get-AzScheduledQueryRule
    希望这有帮助!!
zy1mlcev

zy1mlcev2#

我假设您将三种类型的警报混合在一起,ActivityLogAlertmetric alert(classic)metric alert(new)。它们有不同的资源类型,您创建的应该是metric alert(new),您可以在Azure Portal -> Monitor-> Alerts-> Manage alert rules中找到。
如果是,请尝试以下命令禁用警报。

Get-AzMetricAlertRuleV2 -ResourceGroupName "<resource group name>"  -Name "<alert name>" | Add-AzMetricAlertRuleV2 -DisableRule

更新

您的SIGNAL TYPELog Search,其资源类型是microsoft.insights/scheduledqueryrules。我测试它与你一样的警报,下面的命令应该工作,确保你使用正确的资源组名和规则名。

Get-AzScheduledQueryRule -ResourceGroupName <group name>  -Name "<rule name>" 

Update-AzScheduledQueryRule -ResourceGroupName <group name> -Name "<rule name>" -Enabled $false

9o685dep

9o685dep3#

只是想知道,而不是开发自定义的powershell代码。如果您创建了此抑制规则,则可以跳过在Runbook中为VM禁用警报的部分。
是否尝试使用“警报抑制”(操作规则)选项。下面是这个https://learn.microsoft.com/en-us/azure/azure-monitor/platform/alerts-action-rules的文档。您可以尝试使用UI将此计划为每日重复,这将抑制指定时间之间的所有警报。
1)Azure Monitor -> Alerts -> Manage Actions -> Action Rules(预览版)。您可以设置如下规则,它将自动抑制警报。

目前还没有powershell命令(你仍然可以使用arm API调用)来配置操作规则,我听说他们很快就会在几个月内推出一个。

rseugnpd

rseugnpd4#

Joy和Khrisna的回答帮助我解决了这个问题。我这边有一件事,因为我的日志分析工作区是去年做的,它不支持Get-AzScheduledQuery API。要解决此问题,您可以:1.将您的工作区迁移到新的工作区2.更新工作区设置,使其支持Get-AzScheduledQuery。您可以按照本教程更新设置:
Tutorial
希望有帮助!

o4tp2gmn

o4tp2gmn5#

任何人寻找解决方案,下面的命令作品设置禁用或启用标志,以这种方式=>启用:$false
Update-AzScheduledQueryRule -Name 'xxxname' -ResourceGroupName 'xxxxrg' -Enabled:$false

相关问题