SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

リソースヘルスアラートを使用したリソースレベルの正常性検知

without comments

SQL Database の基本的な診断情報の取得について -2020/3/20 版 で触れた、リソース正常性の検出方法である、リソースヘルスアラート (Resource Health Alert) を実際に設定してみました。

設定方法については、Resource Manager テンプレートを使用して Resource Health アラートを構成する の内容そのままですね。

どのような正常性チェックが使用できるかについては、Azure Resource Health で利用できるリソースの種類と正常性チェック に記載されています。

リソースヘルスアラートについては、ポータルからは設定することができず、ARM テンプレートベースのデプロイで設定を行う必要があります。

設定については、次の 2 ステップで作業を実施します。

  1. アクショングループの設定
  2. リソース ヘルス アラートの ARM テンプレートを作成

アクショングループの設定

リソースヘルスの「アラートルール」については、ARM テンプレートベースでデプロイをする必要があるのですが、アラートの送信先の設定である「アクショングループ」については、任意の方法で作成することができます。

ポータルで作成する場合は次のドキュメントの方法で作成できます。

今回は、次のようなアクショングループを設定し、メールでの送信と Logic Apps 経由で Slack に通知を行うようにしています。

image

アクショングループの名称については、リソースヘルスアラートを設定する際に使用しますので、控えておきます。

 

リソースヘルスアラートの設定

リソースヘルスアラートについては、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 モニターのアラートルールとして次のようなアラートが新規に作成されます。

image

設定としては以上で完了です。

リソースヘルスについては、自分が作成している Azure のリソースの正常性で問題があった場合に、通知が行われます。

実際の通知としては次のようなメールが送信されます。

image

通知されている内容は、対象となったリソースの「リソース正常性」の出力と同じですね。

image

Logic Apps 経由で Slack にも通知が行われていますね。

image

基本テンプレートではサブスクリプション全体のリソースヘルスアラートを送信するようになっています。

リソースヘルスアラートについてはどのレベルで検知を行うかを設定することができ、アラート スコープの調整 でそのための方法が記載されています。

大量にリソースヘルスアラートを受信してしまう場合などは、ドキュメント内の調整方法を参考にしてノイズとなるアラートを除去するとよいかと。

今回、テスト用に任意のタイミングでリソースアラートを発火させていたのですが、私の場合はアクセスが随時行われている SQL Database に対して、サービスレベルの変更を行うことで、一時的にアクセスが停止されるタイミングを作ることで、SQL Database のリソース正常性のチェックとエラーとなるタイミングを作り出して検証を実施していました。

Written by Masayuki.Ozawa

3月 22nd, 2020 at 5:45 pm

Posted in Azure

Tagged with

Leave a Reply