クラシック アラート ルールの移行のためにロジック アプリと Runbook を準備する

Note

以前発表したように、Azure Monitor のクラシック アラートがパブリック クラウド ユーザーで廃止されましたが、2021 年 5 月 31 日までは、引き続き制限付きで使用できます。 Azure Government クラウドおよび 21Vianet によって運営される Microsoft Azure での従来型のアラートは、2024 年 2 月 29 日に廃止されます。

お使いのクラシック アラート ルールを新しいアラート ルールに自主的に移行する場合は、2 つのシステムの間に違いがいくつか存在します。 この記事では、その相違点と、変更に備える方法について説明します。

API の変更

クラシック アラート ルールを作成および管理するための API (microsoft.insights/alertrules) は、新しいメトリック アラートを作成および管理するための API (microsoft.insights/metricalerts) とは異なります。 現在、クラシック アラート ルールをプログラムで作成および管理している場合は、新しい API で機能するようにデプロイ スクリプトを更新してください。

次の表に、クラシック アラートと新しいアラートの両方のプログラム インターフェイスへの参照を示します。

デプロイ スクリプトの種類 クラシック アラート 新しいメトリック アラート
REST API microsoft.insights/alertrules microsoft.insights/metricalerts
Azure CLI az monitor alert az monitor metrics alert
PowerShell リファレンス リファレンス
Azure Resource Manager テンプレート クラシック アラート用 新しいメトリック アラート用

通知ペイロードの変更

通知ペイロードの形式は、クラシック アラート ルール新しいメトリック アラートの間でわずかに異なります。 Webhook、ロジック アプリ、または Runbook アクションを含むクラシック アラート ルールがある場合は、新しいペイロード形式を受け入れるようにターゲットを更新する必要があります。

次の表は、クラシック形式の Webhook ペイロード フィールドを新しい形式にマッピングするときに使用します。

通知エンドポイントの種類 クラシック アラート 新しいメトリック アラート
アラートがアクティブ化または解決されたか status data.status
アラートに関するコンテキスト情報 context data.context
アラートがアクティブ化または解決された時点のタイム スタンプ context.timestamp data.context.timestamp
アラート ルール ID context.id data.context.id
アラート ルール名 context.name data.context.name
アラート ルールの説明 context.description data.context.description
アラート ルールの条件 context.condition data.context.condition
メトリックの名前 context.condition.metricName data.context.condition.allOf[0].metricName
時間の集計 (評価期間にメトリックが集計される方法) context.condition.timeAggregation context.condition.timeAggregation
評価期間 context.condition.windowSize data.context.condition.windowSize
演算子 (集計されたメトリック値がしきい値と比較される方法) context.condition.operator data.context.condition.operator
Threshold context.condition.threshold data.context.condition.allOf[0].threshold
メトリック値 context.condition.metricValue data.context.condition.allOf[0].metricValue
サブスクリプション ID context.subscriptionId data.context.subscriptionId
影響を受けるリソースのリソース グループ context.resourceGroup data.context.resourceGroup
影響を受けるリソースの名前 context.resourceName data.context.resourceName
影響を受けるリソースの種類 context.resourceType data.context.resourceType
影響を受けるリソースのリソース ID context.resourceId data.context.resourceId
ポータルのリソースの概要ページへのリンク context.portalLink data.context.portalLink
Webhook またはロジック アプリに渡されるカスタムのペイロード フィールド properties data.properties

ご覧のように、ペイロードは似ています。 以降のセクションでは、次を提供します。

  • 新しい形式を使用するためのロジック アプリ変更に関する詳細。
  • 新しいアラートの通知ペイロードを解析する Runbook の例。

ロジック アプリを変更してメトリック アラート通知を受信する

クラシック アラートを持つロジック アプリを使用している場合は、新しいメトリック アラート ペイロードが解析されるようにロジック アプリ コードを変更する必要があります。 次の手順に従います。

  1. 新しいロジック アプリを作成します。

  2. テンプレート "Azure Monitor - Metrics Alert Handler" を使用します。 このテンプレートには、定義された適切なスキーマでトリガーされる HTTP 要求があります。

    [空のロジック アプリ] と [Azure Monitor – Metrics Alert Handler] の 2 つのボタンを示すスクリーンショット。

  3. 処理ロジックをホストするためのアクションを追加します。

メトリック アラート通知を受信する Automation Runbook を使用する

次の例では、Runbook で使用する PowerShell コードを提供します。 このコードでは、クラシック メトリック アラート ルールと新しいメトリック アラート ルールの両方のペイロードが解析されます。

## Example PowerShell code to use in a runbook to handle parsing of both classic and new metric alerts.

[OutputType("PSAzureOperationResponse")]

param
(
    [Parameter (Mandatory=$false)]
    [object] $WebhookData
)

$ErrorActionPreference = "stop"

if ($WebhookData)
{
    # Get the data object from WebhookData.
    $WebhookBody = (ConvertFrom-Json -InputObject $WebhookData.RequestBody)

    # Determine whether the alert triggering the runbook is a classic metric alert or a new metric alert (depends on the payload schema).
    $schemaId = $WebhookBody.schemaId
    Write-Verbose "schemaId: $schemaId" -Verbose
    if ($schemaId -eq "AzureMonitorMetricAlert") {

        # This is the new metric alert schema.
        $AlertContext = [object] ($WebhookBody.data).context
        $status = ($WebhookBody.data).status

        # Parse fields related to alert rule condition.
        $metricName = $AlertContext.condition.allOf[0].metricName
        $metricValue = $AlertContext.condition.allOf[0].metricValue
        $threshold = $AlertContext.condition.allOf[0].threshold
        $timeAggregation = $AlertContext.condition.allOf[0].timeAggregation
    }
    elseif ($schemaId -eq $null) {
        # This is the classic metric alert schema.
        $AlertContext = [object] $WebhookBody.context
        $status = $WebhookBody.status

        # Parse fields related to alert rule condition.
        $metricName = $AlertContext.condition.metricName
        $metricValue = $AlertContext.condition.metricValue
        $threshold = $AlertContext.condition.threshold
        $timeAggregation = $AlertContext.condition.timeAggregation
    }
    else {
        # The schema is neither a classic metric alert nor a new metric alert.
        Write-Error "The alert data schema - $schemaId - is not supported."
    }

    # Parse fields related to resource affected.
    $ResourceName = $AlertContext.resourceName
    $ResourceType = $AlertContext.resourceType
    $ResourceGroupName = $AlertContext.resourceGroupName
    $ResourceId = $AlertContext.resourceId
    $SubId = $AlertContext.subscriptionId

    ## Your logic to handle the alert here.
}
else {
    # Error
    Write-Error "This runbook is meant to be started from an Azure alert webhook only."
}

アラートがトリガーされたときに仮想マシンを停止する Runbook の完全な例については、Azure Automationドキュメントを参照してください。

Webhook を介したパートナー統合

クラシック アラートと統合しているパートナーの大半は、統合によって、新しいメトリック アラートを既にサポートしています。 新しいメトリック アラートで既に機能する既知の統合には、次のようなものがあります。

上記に含まれていないパートナー統合を使用している場合は、それらが新しいメトリック アラートで動作することをプロバイダーにご確認ください。

次のステップ