Resource Manager テンプレートを使用して Resource Health アラートを構成するConfigure resource health alerts using Resource Manager templates

この記事では、Azure Resource Manager テンプレートと Azure PowerShell を使用して、Resource Health アクティビティ ログ アラートをプログラムで作成する方法を示します。This article will show you how to create Resource Health Activity Log Alerts programmatically using Azure Resource Manager templates and Azure PowerShell.

Azure Resource Health では、Azure リソースの現在および過去の正常性状態に関する情報が持続的に通知されます。Azure Resource Health keeps you informed about the current and historical health status of your Azure resources. Azure Resource Health アラートでは、これらのリソースの正常性状態が変化すると、ほぼリアルタイムで通知できます。Azure Resource Health alerts can notify you in near real-time when these resources have a change in their health status. Resource Health アラートをプログラムで作成すると、ユーザーは通知を一括で作成およびカスタマイズできます。Creating Resource Health alerts programmatically allow for users to create and customize alerts in bulk.

注意

Resource Health アラートは、現在プレビューの段階です。Resource Health alerts are currently in preview.

注意

この記事は、新しい Azure PowerShell Az モジュールを使用するために更新されました。This article has been updated to use the new Azure PowerShell Az module. AzureRM モジュールはまだ使用でき、少なくとも 2020 年 12 月までは引き続きバグ修正が行われます。You can still use the AzureRM module, which will continue to receive bug fixes until at least December 2020. Az モジュールと AzureRM の互換性の詳細については、「Introducing the new Azure PowerShell Az module (新しい Azure PowerShell Az モジュールの概要)」を参照してください。To learn more about the new Az module and AzureRM compatibility, see Introducing the new Azure PowerShell Az module. Az モジュールのインストール手順については、Azure PowerShell のインストールを参照してください。For Az module installation instructions, see Install Azure PowerShell.

前提条件Prerequisites

このページの指示に従うには、事前にいくつかの項目を設定する必要があります。To follow the instructions on this page, you'll need to set up a few things in advance:

  1. Azure PowerShell モジュールをインストールする必要がありますYou need to install the Azure PowerShell module
  2. 通知を行うよう構成されたアクション グループを作成または再利用する必要があります。You need to create or reuse an Action Group configured to notify you

InstructionsInstructions

  1. PowerShell を使用し、アカウントを使用して Azure にログインし、操作するサブスクリプションを選択します。Using PowerShell, log in to Azure using your account, and select the subscription you want to interact with

     Login-AzAccount
     Select-AzSubscription -Subscription <subscriptionId>
    

    Get-AzSubscription を使用すると、アクセスできるサブスクリプションを一覧表示できます。You can use Get-AzSubscription to list the subscriptions you have access to.

  2. アクション グループの完全な Azure Resource Manager ID を検索して保存します。Find and save the full Azure Resource Manager ID for your Action Group

     (Get-AzActionGroup -ResourceGroupName <resourceGroup> -Name <actionGroup>).Id
    
  3. Resource Health アラートの Resource Manager テンプレートを resourcehealthalert.json として作成して保存します (次の詳細を参照)。Create and save a Resource Manager template for Resource Health alerts as resourcehealthalert.json (see details below)

  4. このテンプレートを使用して、新しい Azure Resource Manager デプロイを作成します。Create a new Azure Resource Manager deployment using this template

     New-AzResourceGroupDeployment -Name ExampleDeployment -ResourceGroupName <resourceGroup> -TemplateFile <path\to\resourcehealthalert.json>
    
  5. アラート名と、先ほどコピーしたアクション グループのリソース ID の入力を求めるメッセージが表示されます。You'll be prompted to type in the Alert Name and Action Group Resource ID you copied earlier:

     Supply values for the following parameters:
     (Type !? for Help.)
     activityLogAlertName: <Alert Name>
     actionGroupResourceId: /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/microsoft.insights/actionGroups/<actionGroup>
    
  6. すべてが正常に動作すると、PowerShell に確認メッセージが表示されます。If everything worked successfully, you'll get a confirmation in PowerShell

     DeploymentName          : ExampleDeployment
     ResourceGroupName       : <resourceGroup>
     ProvisioningState       : Succeeded
     Timestamp               : 11/8/2017 2:32:00 AM
     Mode                    : Incremental
     TemplateLink            :
     Parameters              :
                             Name                     Type       Value
                             ===============          =========  ==========
                             activityLogAlertName     String     <Alert Name>
                             activityLogAlertEnabled  Bool       True
                             actionGroupResourceId    String     /...
    
     Outputs                 :
     DeploymentDebugLogLevel :
    

このプロセスを完全に自動化する場合は、手順 5 で値を求めるメッセージが表示されないよう、Resource Manager テンプレートを編集します。Note that if you are planning on fully automating this process, you simply need to edit the Resource Manager template to not prompt for the values in Step 5.

Resource Health アラートの Resource Manager テンプレート オプションResource Manager template options for Resource Health alerts

Resource Health アラートを作成するための開始点として、この基本テンプレートを使用できます。You can use this base template as a starting point for creating Resource Health alerts. このテンプレートは記述どおりに動作し、ユーザーはサインアップして、サブスクリプション内のすべてのリソースにわたり、新しくアクティブになったすべてのリソース正常性イベントに関するアラートを受信できます。This template will work as written, and will sign you up to receive alerts for all newly activated resource health events across all resources in a subscription.

また、この記事の最後に、このテンプレートと比較して Resource Health アラートの信号雑音比率が大きくなる、より複雑な警告テンプレートも示されています。At the bottom of this article we have also included a more complex alert template which should increase the signal to noise ratio for Resource Health alerts as compared to this template.

{
  "$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')]"
            }
          ]
        }
      }
    }
  ]
}

ただし、このような広範なアラートは一般的に推奨されません。However, a broad alert like this one is generally not recommended. 以下に、重要なイベントに焦点を合わせるためにこのアラートの範囲を設定する方法について説明します。Learn how we can scope down this alert to focus on the events we care about below.

アラート スコープの調整Adjusting the alert scope

Resource Health アラートは、次の 3 つの異なるスコープでイベントを監視するよう構成できます。Resource Health alerts can be configured to monitor events at three different scopes:

  • サブスクリプション レベルSubscription Level
  • リソース グループ レベルResource Group Level
  • リソース レベルResource Level

アラート テンプレートはサブスクリプション レベルで構成されますが、特定のリソース、または特定のリソース グループ内のリソースに関してのみ通知を行うようアラートを構成する場合は、上記のテンプレートの scopes セクションを変更するだけです。The alert template is configured at the subscription level, but if you would like to configure your alert to only notify you about certain resources, or resources within a certain resource group, you simply need to modify the scopes section in the above template.

リソース グループ レベルのスコープの場合、scopes セクションは次のようになります。For a resource group level scope, the scopes section should look like:

"scopes": [
    "/subscriptions/<subscription id>/resourcegroups/<resource group>"
],

一方、リソース レベルのスコープの場合、scopes セクションは次のようになります。And for a resource level scope, the scope section should look like:

"scopes": [
    "/subscriptions/<subscription id>/resourcegroups/<resource group>/providers/<resource>"
],

次に例を示します。"/subscriptions/d37urb3e-ed41-4670-9c19-02a1d2808ff9/resourcegroups/myRG/providers/microsoft.compute/virtualmachines/myVm"For example: "/subscriptions/d37urb3e-ed41-4670-9c19-02a1d2808ff9/resourcegroups/myRG/providers/microsoft.compute/virtualmachines/myVm"

Azure portal に移動し、Azure リソースを表示しているときに URL を確認して、この文字列を取得できます。You can go to the Azure Portal and look at the URL when viewing your Azure resource to get this string.

アラートを生成するリソースの種類の調整Adjusting the resource types which alert you

サブスクリプションまたはリソース グループ レベルのアラートには、異なる種類のリソースが含まれる場合があります。Alerts at the subscription or resource group level may have different kinds of resources. リソースの種類の特定のサブセットからのみ生成されるようアラートを制限する場合は、次のように、テンプレートの condition セクションで定義できます。If you want to limit alerts to only come from a certain subset of resource types, you can define that in the condition section of the template like so:

"condition": {
    "allOf": [
        ...,
        {
            "anyOf": [
                {
                    "field": "resourceType",
                    "equals": "MICROSOFT.COMPUTE/VIRTUALMACHINES",
                    "containsAny": null
                },
                {
                    "field": "resourceType",
                    "equals": "MICROSOFT.STORAGE/STORAGEACCOUNTS",
                    "containsAny": null
                },
                ...
            ]
        }
    ]
},

ここでは、anyOf ラッパーを使用して、指定したいずれかの条件と一致する Resource Health アラートを定義し、アラートが特定のリソースの種類をターゲットにできるようにします。Here we use the anyOf wrapper to allow the resource health alert to match any of the conditions we specify, allowing for alerts that target specific resource types.

アラートを生成する Resource Health イベントの調整Adjusting the Resource Health events that alert you

リソースで正常性イベントが発生すると、正常性イベントの状態を表す一連の段階: ActiveIn ProgressUpdated、および Resolved を経由する可能性があります。When resources undergo a health event, they can go through a series of stages that represents the state of the health event: Active, In Progress, Updated, and Resolved.

リソースが異常になった場合にのみ通知を受け取るには、statusActive の際にのみ通知するようアラートを構成する必要があります。You may only want to be notified when a resource becomes unhealthy, in which case you want to configure your alert to only notify when the status is Active. 一方、その他の段階でも通知を受け取るには、次のような詳細情報を追加します。However if you want to also be notified on the other stages, you can add those details like so:

"condition": {
    "allOf": [
        ...,
        {
            "anyOf": [
                {
                    "field": "status",
                    "equals": "Active"
                },
                {
                    "field": "status",
                    "equals": "In Progress"
                },
                {
                    "field": "status",
                    "equals": "Resolved"
                },
                {
                    "field": "status",
                    "equals": "Updated"
                }
            ]
        }
    ]
}

正常性イベントの 4 つすべての段階で通知を受け取るには、この条件をすべて削除して、status プロパティとは関係なくアラートが生成されるようにします。If you want to be notified for all four stages of health events, you can remove this condition all together, and the alert will notify you irrespective of the status property.

"Unknown" イベントを回避するための Resource Health アラートの調整Adjusting the Resource Health alerts to avoid "Unknown" events

Azure Resource Health では、テスト ランナーを使用してリソースを持続的に監視することで、リソースの最新の正常性をレポートできます。Azure Resource Health can report to you the latest health of your resources by constantly monitoring them using test runners. レポートされる関連する正常性状態は"Available"、"Unavailable"、および "Degraded" です。The relevant reported health statuses are: "Available", "Unavailable", and "Degraded". ただし、ランナーと Azure リソースが通信できない場合、リソースに関して "Unknown" 状態がレポートされ、"Active" 正常性イベントと見なされます。However, in situations where the runner and the Azure resource are unable to communicate, an "Unknown" health status is reported for the resource, and that is considered an "Active" health event.

しかし、リソースで "Unknown" がレポートされた場合、その正常性状態は前回の正確なレポートから変化していない可能性があります。However, when a resource reports "Unknown", it's likely that its health status has not changed since the last accurate report. "Unknown" イベントに関するアラートを生成しない場合は、テンプレートで次のロジックを指定します。If you would like to eliminate alerts on "Unknown" events, you can specify that logic in the template:

"condition": {
    "allOf": [
        ...,
        {
            "anyOf": [
                {
                    "field": "properties.currentHealthStatus",
                    "equals": "Available",
                    "containsAny": null
                },
                {
                    "field": "properties.currentHealthStatus",
                    "equals": "Unavailable",
                    "containsAny": null
                },
                {
                    "field": "properties.currentHealthStatus",
                    "equals": "Degraded",
                    "containsAny": null
                }
            ]
        },
        {
            "anyOf": [
                {
                    "field": "properties.previousHealthStatus",
                    "equals": "Available",
                    "containsAny": null
                },
                {
                    "field": "properties.previousHealthStatus",
                    "equals": "Unavailable",
                    "containsAny": null
                },
                {
                    "field": "properties.previousHealthStatus",
                    "equals": "Degraded",
                    "containsAny": null
                }
            ]
        },
    ]
},

この例では、現在および以前の正常性状態が "Unknown" でないイベントのみを通知します。In this example, we are only notifying on events where the current and previous health status does not have "Unknown". この変更は、アラートが携帯電話または電子メールに直接送信される場合に役立つ可能性があります。This change may be a useful addition if your alerts are sent directly to your mobile phone or email.

イベントによっては、currentHealthStatus および previousHealthStatus プロパティが null 値になっていることがあることにご注意ください。Note that it is possible for the currentHealthStatus and previousHealthStatus properties to be null in some events. たとえば Updated イベントが発生する場合、リソースの正常性の状態は最後のレポートから変化しておらず、追加のイベント情報が利用できるようになった (cause など) だけの可能性があります。For example, when an Updated event occurs it's likely that the health status of the resource has not changed since the last report, only that additional event information is available (e.g. cause). そのため、上記の句を使用すると、properties.currentHealthStatus および properties.previousHealthStatus の値は null に設定されるため、アラートによってはトリガーされないことがあります。Therefore, using the clause above may result in some alerts not being triggered, because the properties.currentHealthStatus and properties.previousHealthStatus values will be set to null.

ユーザーが開始したイベントを回避するためのアラートの調整Adjusting the alert to avoid User Initiated events

Resource Health イベントは、プラットフォームまたはユーザーによって開始されたイベントによってトリガーできます。Resource Health events can be triggered by platform initiated and user initiated events. 正常性イベントが Azure プラットフォームに由来する場合にのみ通知を送信することは、理に適っています。It may make sense to only send a notification when the health event is caused by the Azure platform.

このような種類のイベントのみをフィルター処理するようアラートを構成することは簡単です。It's easy to configure your alert to filter for only these kinds of events:

"condition": {
    "allOf": [
        ...,
        {
            "field": "properties.cause",
            "equals": "PlatformInitiated",
            "containsAny": null
        }
    ]
}

イベントによっては、cause フィールドが null 値になっていることがあることにご注意ください。Note that it is possible for the cause field to be null in some events. つまり、正常性の遷移 (available から unavailable など) が起こり、通知の遅延を避けるためにイベントがすぐにログに記録されます。That is, a health transition takes place (e.g. available to unavailable) and the event is logged immediately to prevent notification delays. そのため、上記の句を使用すると、properties.clause プロパティ値が null に設定されるため、アラートはトリガーされないことがあります。Therefore, using the clause above may result in an alert not being triggered, because the properties.clause property value will be set to null.

完全な Resource Health アラート テンプレートComplete Resource Health alert template

前のセクションで説明したさまざまな調整を使用した、信号雑音比率が最大になるよう構成されたサンプル テンプレートを次に示します。Using the different adjustments described in the previous section, here is a sample template that is configured to maximize the signal to noise ratio. イベントによっては、currentHealthStatus、previousHealthStatus、cause プロパティ値が null の場合があるという前述の注意を念頭に置いてください。Bear in mind the caveats noted above where the currentHealthStatus, previousHealthStatus, and cause property values may be null in some events.

{
    "$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",
                            "containsAny": null
                        },
                        {
                            "anyOf": [
                                {
                                    "field": "properties.currentHealthStatus",
                                    "equals": "Available",
                                    "containsAny": null
                                },
                                {
                                    "field": "properties.currentHealthStatus",
                                    "equals": "Unavailable",
                                    "containsAny": null
                                },
                                {
                                    "field": "properties.currentHealthStatus",
                                    "equals": "Degraded",
                                    "containsAny": null
                                }
                            ]
                        },
                        {
                            "anyOf": [
                                {
                                    "field": "properties.previousHealthStatus",
                                    "equals": "Available",
                                    "containsAny": null
                                },
                                {
                                    "field": "properties.previousHealthStatus",
                                    "equals": "Unavailable",
                                    "containsAny": null
                                },
                                {
                                    "field": "properties.previousHealthStatus",
                                    "equals": "Degraded",
                                    "containsAny": null
                                }
                            ]
                        },
                        {
                            "anyOf": [
                                {
                                    "field": "properties.cause",
                                    "equals": "PlatformInitiated",
                                    "containsAny": null
                                }
                            ]
                        },
                        {
                            "anyOf": [
                                {
                                    "field": "status",
                                    "equals": "Active",
                                    "containsAny": null
                                },
                                {
                                    "field": "status",
                                    "equals": "Resolved",
                                    "containsAny": null
                                },
                                {
                                    "field": "status",
                                    "equals": "In Progress",
                                    "containsAny": null
                                },
                                {
                                    "field": "status",
                                    "equals": "Updated",
                                    "containsAny": null
                                }
                            ]
                        }
                    ]
                },
                "actions": {
                    "actionGroups": [
                        {
                            "actionGroupId": "[parameters('actionGroupResourceId')]"
                        }
                    ]
                }
            }
        }
    ]
}

しかし、自分にとって最も効果的な構成を把握するためには、ドキュメントで学習したツールを使用して独自のカスタマイズを行ってください。However, you'll know best what configurations are effective for you, so use the tools taught to you in this documentation to make your own customization.

次の手順Next steps

Resource Health に関する詳細情報を参照してください。Learn more about Resource Health:

Service Health アラートを作成します。Create Service Health Alerts: