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 のリソース正常性のチェックとエラーとなるタイミングを作り出して検証を実施していました。