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"
}
我使用的两种方法都返回一个错误,提示未找到我的警报规则。
我假设您将三种类型的警报混合在一起,ActivityLogAlert
、metric 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 TYPE
是 Log 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
插图:
相关参考资料:
- Update-AzScheduledQueryRule
- Add-AzMetricAlertRuleV2
- Get-AzMetricAlertRuleV2
- 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。
您可以按照本教程更新设置:
希望对您有所帮助!
我有一个 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"
}
我使用的两种方法都返回一个错误,提示未找到我的警报规则。
我假设您将三种类型的警报混合在一起,ActivityLogAlert
、metric 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 TYPE
是 Log 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
插图:
相关参考资料:
- Update-AzScheduledQueryRule
- Add-AzMetricAlertRuleV2
- Get-AzMetricAlertRuleV2
- 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。 您可以按照本教程更新设置:
希望对您有所帮助!