SQL Database の基本的な診断情報の取得について -2020/3/20 版 で触れた、リソース正常性の検出方法である、リソースヘルスアラート (Resource Health Alert) を実際に設定してみました。
設定方法については、Resource Manager テンプレートを使用して Resource Health アラートを構成する の内容そのままですね。
どのような正常性チェックが使用できるかについては、Azure Resource Health で利用できるリソースの種類と正常性チェック に記載されています。
リソースヘルスアラートについては、ポータルからは設定することができず、ARM テンプレートベースのデプロイで設定を行う必要があります。
設定については、次の 2 ステップで作業を実施します。
- アクショングループの設定
- リソース ヘルス アラートの ARM テンプレートを作成
Contents
アクショングループの設定
リソースヘルスの「アラートルール」については、ARM テンプレートベースでデプロイをする必要があるのですが、アラートの送信先の設定である「アクショングループ」については、任意の方法で作成することができます。
ポータルで作成する場合は次のドキュメントの方法で作成できます。
今回は、次のようなアクショングループを設定し、メールでの送信と Logic Apps 経由で Slack に通知を行うようにしています。
アクショングループの名称については、リソースヘルスアラートを設定する際に使用しますので、控えておきます。
リソースヘルスアラートの設定
リソースヘルスアラートについては、ARM テンプレートのデプロイで設定を行う必要があります。
ARM テンプレートによりデプロイを行うスクリプトの例は次のようになります。
(テンプレートの内容は、冒頭に記載したドキュメントの基本テンプレートを使用しています)
$subscriptionId = "サブスクリプション ID" $resourceGroup = "リソースグループ名" $actionGroupName = "アクショングループ名" $activityLogAlertName = "アラート名" Connect-AzAccount Select-AzSubscription -Subscription $subscriptionId $jsonTemplate = @" { "`$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "activityLogAlertName": { "type": "string", "metadata": { "description": "Unique name (within the Resource Group) for the Activity log alert." } }, "actionGroupResourceId": { "type": "string", "metadata": { "description": "Resource Id for the Action group." } } }, "resources": [ { "type": "Microsoft.Insights/activityLogAlerts", "apiVersion": "2017-04-01", "name": "[parameters('activityLogAlertName')]", "location": "Global", "properties": { "enabled": true, "scopes": [ "[subscription().id]" ], "condition": { "allOf": [ { "field": "category", "equals": "ResourceHealth" }, { "field": "status", "equals": "Active" } ] }, "actions": { "actionGroups": [ { "actionGroupId": "[parameters('actionGroupResourceId')]" } ] } } } ] } "@ $actionGroup = Get-AzActionGroup -ResourceGroupName $resourceGroup -Name $actionGroupName $tempFile = New-TemporaryFile $jsonTemplate | Out-File $tempFile -Force $templateParameter = @{ activityLogAlertName = $activityLogAlertName actionGroupResourceId = $actionGroup.Id } New-AzResourceGroupDeployment -Name "ResourceHealth" -ResourceGroupName $resourceGroup -TemplateFile $tempFile.FullName -TemplateParameterObject $templateParameter Remove-Item -Path $tempFile.FullName
このような PowerShell のスクリプトを実行すると、Azure モニターのアラートルールとして次のようなアラートが新規に作成されます。
設定としては以上で完了です。
リソースヘルスについては、自分が作成している Azure のリソースの正常性で問題があった場合に、通知が行われます。
実際の通知としては次のようなメールが送信されます。
通知されている内容は、対象となったリソースの「リソース正常性」の出力と同じですね。
Logic Apps 経由で Slack にも通知が行われていますね。
基本テンプレートではサブスクリプション全体のリソースヘルスアラートを送信するようになっています。
リソースヘルスアラートについてはどのレベルで検知を行うかを設定することができ、アラート スコープの調整 でそのための方法が記載されています。
大量にリソースヘルスアラートを受信してしまう場合などは、ドキュメント内の調整方法を参考にしてノイズとなるアラートを除去するとよいかと。
今回、テスト用に任意のタイミングでリソースアラートを発火させていたのですが、私の場合はアクセスが随時行われている SQL Database に対して、サービスレベルの変更を行うことで、一時的にアクセスが停止されるタイミングを作ることで、SQL Database のリソース正常性のチェックとエラーとなるタイミングを作り出して検証を実施していました。