Azure Monitor を使用してログ アラートを作成、表示、管理する

概要

ログ アラートによって、ユーザーは Log Analytics クエリを使用して、設定された頻度でリソース ログを評価し、その結果に基づいてアラートを発行することができます。 アクション グループを使用することで、ルールによって 1 つ以上のアクションをトリガーできます。 ログ アラートの機能と用語の詳細について参照してください

この記事では、Azure Monitor を使用してログ アラートを作成および管理する方法について説明します。 アラート ルールは、次の 3 つのコンポーネントによって定義されます。

  • ターゲット:監視する特定の Azure リソース。
  • 条件:評価するロジック。 一致すると、アラートが発生します。
  • アクション:通知または自動化 - 電子メール、SMS、Webhook など。

Azure Resource Manager テンプレートを使用してログ アラート ルールを作成することもできます。これについては、別の記事で説明されています。

注意

Log Analytics ワークスペースからのログ データを、Azure Monitor メトリック ストアに送信することもできます。 各メトリック アラートの動作は異なります。これは、操作するデータによっては、より望ましい場合があります。 メトリックにルーティングできるログとその方法については、ログのメトリック アラートに関するページを参照してください。

Microsoft Azure portal でログ アラート ルールを作成する

アラートのクエリの記述を開始するための手順は次のとおりです。

  1. アラートを作成するリソースにアクセスします。 可能な場合は、サブスクリプションまたはリソース グループの範囲を選択して、複数のリソースにアラート ルールを設定することを検討してください。 複数のリソースに対してアラートを生成すると、コストが削減され、複数のアラート ルールを管理する必要がなくなります。

  2. [モニター] で、 [ログ] を選択します。

  3. 問題を示している可能性のあるログ データのクエリを実行します。 検出できることや、独自のクエリを記述する方法の概要を理解するには、アラートのクエリ例に関するトピックを使用してください。 また、最適化されたアラート クエリを作成する方法について確認してください

  4. [+ 新しいアラート ルール] ボタンを押して、アラート作成フローを開始します。

    Log Analytics - アラートの設定

注意

リソース グループまたはサブスクリプション スコープを使用して複数のリソース上で実行されるログのリソース アクセス モードを使用する場合は、大規模なアラートを作成することをお勧めします。 大規模にアラートを行うと、ルール管理のオーバーヘッドを軽減できます。 リソースをターゲットにできるようにするには、リソース ID 列を結果に含めてください。 ディメンション別にアラートを分割する方法の詳細について参照してください

Log Analytics と Application Insights のログ アラート

  1. クエリ構文が正しい場合は、直近の 6 時間から最後の週までさまざまなグラフの期間を微調整するオプションと共に、クエリの履歴データがグラフとして表示されます。

    クエリ結果に要約されたデータ、または時間列のないプロジェクト固有の列が含まれている場合、グラフには単一の値が表示されます。

    アラート ルールの構成

  2. [期間] オプションを使用して、指定された条件を評価する時間の範囲を選びます。

  3. ログ アラートは、次の 2 種類の 測定を基に作成できます。

    1. 結果の数 - クエリによって返されるレコードの数。
    2. メトリック測定 - 選択された式と、bin() の選択でグループ化された summarize を使用して計算された "集計値"。 次に例を示します。
    // Reported errors
    union Event, Syslog // Event table stores Windows event records, Syslog stores Linux records
    | where EventLevelName == "Error" // EventLevelName is used in the Event (Windows) records
    or SeverityLevel== "err" // SeverityLevel is used in Syslog (Linux) records
    | summarize AggregatedValue = count() by Computer, bin(TimeGenerated, 15m)
    
  4. メトリック測定のアラート ロジックでは、必要に応じて、 [集計] オプションを使用して、アラートを ディメンション別に分割する方法を指定できます。 行グループ式は一意かつ並べ替えられている必要があります。

    注意

    bin() では不均一な期間が返される可能性があるため、実行時、アラート サービスでは適切な時間を使用して bin() 関数が bin_at() に変換され、固定小数点を持つ結果が得られるようにします。

    注意

    アラート ディメンションによる分割は、現在の scheduledQueryRules API でのみ使用できます。 従来の Log Analytics Alert API を使用する場合は、切り替える必要があります。 切り替えの詳細について参照してください。 大規模なリソース中心のアラートは、2020-05-01-preview 以上の API バージョンでのみサポートされています。

    [集計] オプション

  5. 次に、プレビュー データに基づいて、 [演算子][しきい値] [頻度] を設定します。

  6. 必要に応じて、 [合計] または [連続する違反] を使用して、アラートをトリガーする違反の数を設定することもできます。

  7. [Done] を選択します。

  8. [アラート ルール名][説明] を定義し、アラートの [重大度] を選択します。 これらの詳細は、すべてのアラート アクションで使用されます。 さらに、 [ルールの作成時に有効にする] を選択して、作成に関するアラート ルールをアクティブにしないようにできます。

  9. アラートが発生した後に、ルールのアクションを非表示にする場合は、 [アラートを表示しない] オプションを使用します。 ルールは引き続き実行され、アラートも作成されますが、ノイズを防ぐためにアクションはトリガーされません。 有効にするには、ミュート アクションの値がアラートの頻度よりも大きい必要があります。

    ログ アラートのアラートを表示しない

  10. アラートの条件が満たされた場合に、アラート ルールで 1 つまたは複数の アクション グループをトリガーするかどうかを指定します。

    注意

    実行できるアクションの制限については、Azure サブスクリプション サービスの制限に関するページを参照してください。

  11. ログ アラート ルールのアクションは、必要に応じてカスタマイズすることができます。

    • 電子メールの件名のカスタマイズ:電子メール アクションの "電子メールの件名" をオーバーライドします。 メールの本文は変更できず、このフィールドは 電子メール アドレス用ではありません
    • カスタム JSON ペイロードを含める: アクション グループに Webhook アクションが含まれていることを前提として、アクション グループによって使用される Webhook JSON をオーバーライドします。 詳細については、ログ アラートの Webhook アクションに関するページを参照してください。

    ログ アラートのアクションのオーバーライド

  12. すべてのフィールドが正しく設定されている場合、 [アラート ルールの作成] ボタンをクリックすると、アラートが作成されます。

    数分後にアラートがアクティブになり、前述のようにトリガーされます。

    ルールの作成

アラートの管理から Log Analytics および Application Insights のログ アラートを作成する

注意

現在、アラートの管理からの作成は、リソース中心のログではサポートされていません

  1. ポータルで、 [モニター] を選択してから [アラート] を選択します。

    監視

  2. [新しいアラート ルール] を選択します。

    [アラートの追加]

  3. [アラートの作成] ペインが表示されます。 これには、次の 4 つの部分があります。

    • アラートが適用されるリソース。
    • 確認する条件。
    • 条件が true の場合に実行するアクション。
    • アラートの名前とその説明の詳細。

    ルールを作成する

  4. [リソースの選択] ボタンを選択します。 "サブスクリプション"、"リソースの種類" を選択し、リソースを選択してフィルターを適用します。 リソースに使用可能なログがあることを確認します。

    リソースの選択

  5. 次に、 [条件] の追加ボタンを使用して、そのリソースで利用できるシグナル オプションの一覧を表示します。 [カスタム ログ検索] オプションを選択します。

    リソースの選択 - カスタム ログ検索

    注意

    アラート ポータルには Log Analytics と Application Insights から保存されたクエリが一覧表示されており、これらはテンプレート アラート クエリとして使用できます。

  6. 選択したら、 [検索クエリ] フィールドでアラート クエリを書き込む、貼り付ける、または編集します。

  7. 前のセクションに記載されている次のステップに進みます。

その他の種類のリソースのログ アラート

注意

現時点では、API バージョン 2020-05-01-preview とリソース中心のログ アラートに対して追加料金は発生しません。 プレビュー段階にある機能の価格は、後で発表され、課金が始まる前に通知されます。 通知期間後も新しい API バージョンとリソース中心のログ アラートを引き続き使用することを選択した場合は、該当する料金が適用されます。

  1. [条件] タブから開始します。

    1. [測定] [集計の種類]、および [集計の粒度] が正しいことを確認します。

      1. 既定のルールでは、過去 5 分間の結果の数がカウントされます。
      2. 集計されたクエリ結果が検出されると、それを取得するため、ルールは数秒以内に自動的に更新されます。
    2. 必要に応じて、ディメンション別にアラートを分割することを選択します。

      • リソース ID 列 が検出されると、自動的に選択され、発生したアラートのコンテキストがレコードのリソースに変更されます。
      • リソース ID 列 を選択解除して、サブスクリプションまたはリソース グループでアラートを発生させることができます。 クエリ結果が複数のリソースに基づいている場合は、選択解除すると役立ちます。 たとえば、リソース グループの仮想マシンの 80% で CPU 使用率が高くなっているかどうかを確認するクエリなどが該当します。
      • ディメンション テーブルを使用することで、任意の数値またはテキストの列の型に対して、追加で最大 6 つの分割を選択することもできます。
      • アラートは、一意の組み合わせに基づく分割によって個別に発生し、アラート ペイロードにはこの情報が含まれます。

      集計パラメーターと分割の選択

    3. プレビュー のグラフには、時間の経過に伴うクエリ評価の結果が表示されています。 グラフの期間を変更したり、ディメンションごとに一意のアラートを分割した結果として生成された別の時系列を選択したりできます。

      プレビューのグラフ

    4. 次に、プレビュー データに基づいて、 [アラート ロジック] [演算子][しきい値] [頻度] を設定します。

      しきい値とアラート ロジックが含まれるプレビューのグラフ

    5. 必要に応じて、 [詳細オプション] セクションにある [アラートをトリガーする違反の数] を設定することもできます。

      [詳細オプション]

  2. [アクション] タブで、必要な [アクション グループ] を選択または作成します。

    [アクション] タブ

  3. [詳細] タブで、 [アラート ルールの詳細][プロジェクトの詳細] を定義します。 必要に応じて、 [今すぐ実行を開始] しないか、アラート ルールが発生した後の期間に [アクションのミュート] を行うかどうかを設定できます。

    注意

    ログ アラート ルールは現在ステートレスであり、ミュートが定義されていない限り、アラートが作成されるたびにアクションが発生します。

    [詳細] タブ

  4. [タグ] タブで、アラート ルール リソースに必要なタグを設定します。

    [タグ] タブ

  5. [確認と作成] タブで検証が実行され、問題がある場合は通知されます。 ルールの定義を確認して承認します。

  6. すべてのフィールドが正しい場合は、 [作成] ボタンを選択し、アラート ルールの作成を完了します。 すべてのアラートは、アラートの管理で表示できます。

    [確認と作成] タブ

Microsoft Azure portal でログ アラートを表示および管理する

  1. ポータルで、関連するリソースまたは [モニター] サービスを選択します。 次に、[モニター] セクションで [アラート] を選択します。

  2. アラートの管理には、発生したすべてのアラートが表示されます。 アラートの管理の詳細について参照してください。

    注意

    現在、ログ アラート ルールはステートレスで、解決しません。

  3. ルールを編集するには、上部のバーにある [アラート ルールの管理] ボタンを選択します。

     manage alert rules

PowerShell を使用したログ アラートの管理

注意

この記事は、Azure Az PowerShell モジュールを使用するように更新されています。 Az PowerShell モジュールは、Azure と対話するために推奨される PowerShell モジュールです。 Az PowerShell モジュールの使用を開始するには、「Azure PowerShell をインストールする」を参照してください。 Az PowerShell モジュールに移行する方法については、「AzureRM から Az への Azure PowerShell の移行」を参照してください。

注意

現在、PowerShell は API バージョン 2020-05-01-preview ではサポートされていません

下に一覧表示されている PowerShell コマンドレットは、Scheduled Query Rules API を利用してルールを管理するために用意されています。

注意

ScheduledQueryRules PowerShell コマンドレットで管理できるのは、現在の Scheduled Query Rules API を使用して作成されたルールのみです。 従来の Log Analytics Alert API を使用して作成されたログ アラート ルールは、Scheduled Query Rules API に切り替えた後にのみ、PowerShell を使用してのみ管理できます。

PowerShell を使用してログ アラート ルールを作成する手順の例を次に示します。

$source = New-AzScheduledQueryRuleSource -Query 'Heartbeat | summarize AggregatedValue = count() by bin(TimeGenerated, 5m), _ResourceId' -DataSourceId "/subscriptions/a123d7efg-123c-1234-5678-a12bc3defgh4/resourceGroups/contosoRG/providers/microsoft.OperationalInsights/workspaces/servicews"

$schedule = New-AzScheduledQueryRuleSchedule -FrequencyInMinutes 15 -TimeWindowInMinutes 30

$metricTrigger = New-AzScheduledQueryRuleLogMetricTrigger -ThresholdOperator "GreaterThan" -Threshold 2 -MetricTriggerType "Consecutive" -MetricColumn "_ResourceId"

$triggerCondition = New-AzScheduledQueryRuleTriggerCondition -ThresholdOperator "LessThan" -Threshold 5 -MetricTrigger $metricTrigger

$aznsActionGroup = New-AzScheduledQueryRuleAznsActionGroup -ActionGroup "/subscriptions/a123d7efg-123c-1234-5678-a12bc3defgh4/resourceGroups/contosoRG/providers/microsoft.insights/actiongroups/sampleAG" -EmailSubject "Custom email subject" -CustomWebhookPayload "{ `"alert`":`"#alertrulename`", `"IncludeSearchResults`":true }"

$alertingAction = New-AzScheduledQueryRuleAlertingAction -AznsAction $aznsActionGroup -Severity "3" -Trigger $triggerCondition

New-AzScheduledQueryRule -ResourceGroupName "contosoRG" -Location "Region Name for your Application Insights App or Log Analytics Workspace" -Action $alertingAction -Enabled $true -Description "Alert description" -Schedule $schedule -Source $source -Name "Alert Name"

PowerShell とリソース間のクエリを使用してログ アラート ルールを作成する手順の例を次に示します。

$authorized = @ ("/subscriptions/a123d7efg-123c-1234-5678-a12bc3defgh4/resourceGroups/contosoRG/providers/microsoft.OperationalInsights/workspaces/servicewsCrossExample", "/subscriptions/a123d7efg-123c-1234-5678-a12bc3defgh4/resourceGroups/contosoRG/providers/microsoft.insights/components/serviceAppInsights")

$source = New-AzScheduledQueryRuleSource -Query 'Heartbeat | summarize AggregatedValue = count() by bin(TimeGenerated, 5m), _ResourceId' -DataSourceId "/subscriptions/a123d7efg-123c-1234-5678-a12bc3defgh4/resourceGroups/contosoRG/providers/microsoft.OperationalInsights/workspaces/servicews" -AuthorizedResource $authorized

$schedule = New-AzScheduledQueryRuleSchedule -FrequencyInMinutes 15 -TimeWindowInMinutes 30

$metricTrigger = New-AzScheduledQueryRuleLogMetricTrigger -ThresholdOperator "GreaterThan" -Threshold 2 -MetricTriggerType "Consecutive" -MetricColumn "_ResourceId"

$triggerCondition = New-AzScheduledQueryRuleTriggerCondition -ThresholdOperator "LessThan" -Threshold 5 -MetricTrigger $metricTrigger

$aznsActionGroup = New-AzScheduledQueryRuleAznsActionGroup -ActionGroup "/subscriptions/a123d7efg-123c-1234-5678-a12bc3defgh4/resourceGroups/contosoRG/providers/microsoft.insights/actiongroups/sampleAG" -EmailSubject "Custom email subject" -CustomWebhookPayload "{ `"alert`":`"#alertrulename`", `"IncludeSearchResults`":true }"

$alertingAction = New-AzScheduledQueryRuleAlertingAction -AznsAction $aznsActionGroup -Severity "3" -Trigger $triggerCondition
New-AzScheduledQueryRule -ResourceGroupName "contosoRG" -Location "Region Name for your Application Insights App or Log Analytics Workspace" -Action $alertingAction -Enabled $true -Description "Alert description" -Schedule $schedule -Source $source -Name "Alert Name" 

PowerShell を使用して、テンプレートとパラメーター ファイルを使用してログ アラートを作成することもできます。

Connect-AzAccount

Select-AzSubscription -SubscriptionName <yourSubscriptionName>

New-AzResourceGroupDeployment -Name AlertDeployment -ResourceGroupName ResourceGroupofTargetResource `
  -TemplateFile mylogalerttemplate.json -TemplateParameterFile mylogalerttemplate.parameters.json

CLI を使用したログ アラートの管理

注意

Azure CLI サポートは、scheduledQueryRules API バージョン 2020-05-01-preview 以降でのみ使用できます。 以前の API バージョンでは、次に示すように、テンプレートと共に Azure Resource Manager CLI を使用できます。 従来の Log Analytics Alert API を使用する場合は、CLI を使用するよう切り替える必要があります。 切り替えの詳細について参照してください

前のセクションでは、Azure portal を使用してログ アラート ルールを作成、表示、および管理する方法について説明しました。 このセクションでは、クロスプラットフォームの Azure CLI を使用して同じ操作を行う方法について説明します。 Azure CLI の使用を開始する最も簡単な方法は、Azure Cloud Shell を使用することです。 この記事では、Cloud Shell を使用します。

  1. Azure portal に移動して、 [Cloud Shell] を選択します。

  2. プロンプトでは、--help オプションを指定してコマンドを実行することで、コマンドとその使用方法の詳細を確認できます。 たとえば、次のコマンドでは、ログ アラートの作成、表示、管理に使用できるコマンドの一覧が表示されます。

    az monitor scheduled-query --help
    
  3. システム イベント エラーの数を監視するログ アラート ルールを作成できます。

    az monitor scheduled-query create -g {ResourceGroup} -n {nameofthealert} --scopes {vm_id} --condition "count \'union Event, Syslog | where TimeGenerated > ago(1h) | where EventLevelName == \"Error\" or SeverityLevel== \"err\"\' > 2" --description {descriptionofthealert}
    
  4. 次のコマンドを使用して、リソース グループ内のすべてのログ アラートを表示できます。

    az monitor scheduled-query list -g {ResourceGroup}
    
  5. ルールの名前またはリソース ID を使用して、特定のログ アラート ルールの詳細を確認できます。

    az monitor scheduled-query show -g {ResourceGroup} -n {AlertRuleName}
    
    az monitor scheduled-query show --ids {RuleResourceId}
    
  6. 次のコマンドを使用して、ログ アラート ルールを無効にできます。

    az monitor scheduled-query update -g {ResourceGroup} -n {AlertRuleName} --enabled false
    
  7. 次のコマンドを使用して、ログ アラート ルールを削除できます。

    az monitor scheduled-query delete -g {ResourceGroup} -n {AlertRuleName}
    

また、テンプレート ファイルに対して Azure Resource Manager CLI を使用することもできます。

az login

az deployment group create \
    --name AlertDeployment \
    --resource-group ResourceGroupofTargetResource \
    --template-file mylogalerttemplate.json \
    --parameters @mylogalerttemplate.parameters.json

作成に成功すると、201 が返されます。 更新に成功すると、200 が返されます。

次の手順