Disable/Enable azure automation powershell 的 Azure 监视器警报规则

Disable/Enable Azure monitor alert rules by azure automation powershell

我有一个 azure 监控警报规则,它将每 5 分钟检查一次我的虚拟机的心跳。 但是,虚拟机本身会在每天晚上 11 点下线,并在第二天早上 9 点再次启动。

所以我正在尝试同时使用 azure 自动化 disable/enable 我的警报规则。 这是我尝试使用的代码:

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"
}

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

我假设您将三种类型的警报混合在一起,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

我同意 Joy 对较新的指标警报的回答,但是如果您的警报是 'Log Search' 信号类型而不是 'Metrics' 信号类型,那么您必须禁用警报,如下所示。

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

插图:

相关参考资料:

  1. Update-AzScheduledQueryRule
  2. Add-AzMetricAlertRuleV2
  3. Get-AzMetricAlertRuleV2
  4. Get-AzScheduledQueryRule

希望对您有所帮助!!

只是想知道而不是为此开发自定义 powershell 代码。如果您创建此抑制规则,则可以跳过在 Runbook 中为 VM 禁用警报的部分。

您是否尝试使用警报抑制(操作规则)选项。这是此 https://docs.microsoft.com/en-us/azure/azure-monitor/platform/alerts-action-rules 的文档。您可以尝试使用 UI 将其安排为每日重复,如下所示,这将抑制指定时间之间的所有警报。

1) Azure Monitor -> 警报 -> 管理操作 -> 操作规则(预览版)。您可以设置如下规则,它会自动抑制警报。

目前没有powershell命令(你仍然可以使用arm api调用)来配置动作规则,我听说他们将在几个月后推出一个。

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

Tutorial

希望对您有所帮助!