У нас есть более 1000 правил оповещений рабочей области аналитики журналов Azure, созданных с помощью шаблонов AzureRM и azurepiplines для наших различных проектов. ниже приведен шаблон ARM, используемый для создания всех этих правил оповещений, и у нас есть параметр «включено» для включения и отключения оповещений по мере необходимости.
Но для дальнейшего улучшения этой автоматизации мы пытаемся автоматизировать способ для наших разработчиков, чтобы они могли подавлять любые конкретные правила оповещений, срабатывающие в течение определенного времени с момента решения проблемы до момента ее решения, улучшая те же самые правила. шаблоны рук и сам подход к конвейеру. Кроме того, по истечении времени подавления оповещения должны перейти во включенное состояние и срабатывать при возникновении событий.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"actionGroupName": {
"type": "string"
},
"query": {
"type": "string"
},
"logAnalyticsWorkspaceId": {
"type": "string"
},
"AlertRuleName": {
"type": "string"
},
"tags": {
"type": "object"
},
"schedule": {
"type": "object"
},
"severity": {
"type": "int"
},
"operator": {
"type": "string"
},
"threshold": {
"type": "int"
},
"autoMitigate": {
"type": "string",
"defaultValue": false
},
"enabled": {
"type": "string"
},
"customWebhookPayload": {
"type": "object"
},
"location": {
"defaultValue": "[resourceGroup().location]",
"type": "string"
}
},
"resources":[
{
"type":"Microsoft.Insights/scheduledQueryRules",
"name": "[parameters('AlertRuleName')]",
"apiVersion": "2018-04-16",
"location": "[parameters('location')]",
"tags": "[parameters('tags')]",
"properties":{
"displayName": "[parameters('AlertRuleName')]",
"description": "[parameters('AlertRuleName')]",
"enabled": "[parameters('enabled')]",
"source": {
"query": "[parameters('query')]",
"dataSourceId": "[parameters('logAnalyticsWorkspaceId')]",
"queryType":"ResultCount"
},
"schedule":"[parameters('schedule')]",
"action":{
"odata.type": "Microsoft.WindowsAzure.Management.Monitoring.Alerts.Models.Microsoft.AppInsights.Nexus.DataContracts.Resources.ScheduledQueryRules.AlertingAction",
"severity": "[parameters('severity')]",
"aznsAction":{
"customWebhookPayload": "{ \"AlertRuleName\":\"#alertrulename\", \"AlertType\":\"#alerttype\", \"Severity\":\"#severity\", \"Application\":\"#{appname}#\", \"Text\":\"#alertrulename fired with #searchresultcount records. #{alertDescription}#\", \"SearchQuery\":\"#searchquery\" }",
"actionGroup": "[array(parameters('actionGroupName'))]"
},
"trigger":{
"thresholdOperator": "[parameters('operator')]",
"threshold": "[parameters('threshold')]"
}
}
}
}
]
}
Вы можете использовать сценарий PowerShell здесь, чтобы включать и отключать несколько оповещений в начале окна обслуживания и повторно включать их после завершения обслуживания.
@venkat, мы уже используем команду az cli для включения и отключения правил оповещений. Но это снова ручная задача, которая выходит за рамки нашей централизованной автоматизации создания правил оповещения. Кроме того, поскольку у нас есть более 1000 правил оповещений, созданных таким образом, использование другого способа отключения оповещений может привести к пропуску некоторых сценариев или элементов, что может потребовать дополнительных усилий для отслеживания статуса каждого правила оповещений.
Чтобы автоматизировать этот процесс, вы также можете использовать Runbook автоматизации для запуска сценария в запланированное время, если вы уже знаете период обслуживания.
Надеюсь, это поможет решить вашу проблему?
Да... Это кажется очень полезным. Мы планируем использовать тот же конвейер Azure вместе с этим скриптом. Можете ли вы поделиться полным URL-адресом сценария? Кроме того, поскольку мы используем агенты на базе Linux, доступен ли такой же сценарий оболочки?
Да, могу ли я опубликовать то же, что и ответ, со сценарием?
Конечно... Пожалуйста, опубликуйте в качестве ответа
Пробовали ли вы подход с передачей времени начала и окончания подавления в качестве параметров конвейера окна подавления. @Vowneee
@jhanvi. еще предстоит протестировать, так как мне нужно попробовать использовать сценарий Shell, а не сценарий PowerShell
Вот сценарий PowerShell, позволяющий отключить оповещение до тех пор, пока период обслуживания не закончится, и автоматически включить его после завершения обслуживания.
$resourceGroupName = "Automation_RG"
$alertRuleNames = @("Sample-Alert")
function Disable-AlertRules {
param (
[string[]]$AlertRules
)
foreach ($alertRuleName in $AlertRules) {
Write-Host "Disabling alert rule: $alertRuleName"
Update-AzActivityLogAlert -ResourceGroupName $resourceGroupName -Name $alertRuleName -Enabled $false
}
}
function Enable-AlertRules {
param (
[string[]]$AlertRules
)
foreach ($alertRuleName in $AlertRules) {
Write-Host "Enabling alert rule: $alertRuleName"
Update-AzActivityLogAlert -ResourceGroupName $resourceGroupName -Name $alertRuleName -Enabled $true
}
}
Disable-AlertRules -AlertRules $alertRuleNames
Start-Sleep -Seconds 60
Enable-AlertRules -AlertRules $alertRuleNames
Write-Host "Maintenance completed. All specified alert rules have been re-enabled."
Скрипт автоматически отключит оповещение и снова включит его после завершения maintenance period
. Вам необходимо указать время обслуживания с помощью команды Sleep
.
Start-Sleep -Seconds 60
Bash-скрипт
#!/bin/bash
resourceGroupName = "Automation_RG"
alertRuleNames=("Sample-Alert")
# Function to disable alert
disable_alert_rules() {
for alertRuleName in "${alertRuleNames[@]}"; do
echo "Disabling alert rule: $alertRuleName"
az monitor activity-log alert update -g "$resourceGroupName" -n "$alertRuleName" --enable false
done
}
# Function to enable alert
enable_alert_rules() {
for alertRuleName in "${alertRuleNames[@]}"; do
echo "Enabling alert rule: $alertRuleName"
az monitor activity-log alert update -g "$resourceGroupName" -n "$alertRuleName" --enabled true
done
}
disable_alert_rules
# Wait for the maintanance period (in seconds)
sleep 60
enable_alert_rules
echo "Maintenance completed. All specified alert rules have been re-enabled."
Выход:
Значит, эта команда сна должна продолжать работать в серверной части? В наших случаях некоторые оповещения необходимо подавлять в течение нескольких недель, пока проблема не будет полностью решена, и таким образом мы можем получить несколько оповещений. Так возможно ли использовать этот вариант сна, поскольку его необходимо запускать на бэкэнде?
Да, укажите период времени в состоянии сна, чтобы он срабатывал автоматически.
кажется немного сложным, поскольку нам приходится автоматизировать это через конвейеры Azure, и это не кажется решением, позволяющим поддерживать выполнение команды сна в течение длительного времени.
Вы также можете использовать функции Azure или Azure Logic Apps, чтобы автоматизировать включение и отключение оповещений, чтобы сделать их более масштабируемыми и управляемыми. Этот подход позволяет эффективно справляться с длительными периодами подавления и хорошо интегрируется с Azure Pipelines для бесперебойной работы CI/CD.
Привет @Vowneee! Согласно MS Doc, вы не можете добавить конфигурацию подавления непосредственно внутри шаблона оповещения ARM. Вместо этого вы можете подавить уведомления о предупреждениях, отключив правила оповещений в начале окна обслуживания и повторно включив их после завершения обслуживания с помощью командлета:
Update-AzActivityLogAlert -ResourceGroupName "Automation_RG" -Name "Sample-Alert" -Enabled:$false
(используйте$true
для включения и$false
для отключения).