アラート ポリシーを使用して SQL クエリの結果をモニタリングする

このドキュメントでは、Log Analytics で実行したクエリの結果をモニタリングするアラート ポリシーを作成する方法について説明します。これらのクエリは SQL で記述され、ログビューに対してクエリを実行する必要があります。アラート ポリシーは、クエリ結果が指定した条件を満たしたときに通知します。たとえば、特定の期間のログエントリの 25% 以上が ERROR の重大度の場合に通知されるようにアラート ポリシーを構成できます。

[ログ分析] ページから作成したアラート ポリシーは、BigQuery エンジンで実行されます。したがって、クエリ対象のデータには、リンクされた BigQuery データセットからアクセスできる必要があります。そのため、これらの SQL クエリでクエリできるのはログビューのみです。アナリティクス ビューをクエリすることはできません。

ログ分析の概要については、ログ分析でログをクエリして分析するをご覧ください。

アラート ポリシーの仕組み

アラート ポリシーでは、アラートを受け取る状況とインシデントの通知方法を記述します。ログデータにコンテンツやパターンが検出されたときに通知を受け取る方法は 3 つあります。

  • 特定のフレーズを個々のログエントリでスキャンするには、ログベースのアラート ポリシーを作成します。セキュリティ関連のイベントなどの通知を受け取る必要がある場合は、これらのアラート ポリシーを使用します。

  • ログエントリ データ内のイベントをモニタリングするには、ログベースの指標を作成し、指標をモニタリングするアラート ポリシーを作成します。このようなタイプのアラート ポリシーは、時間の経過に伴うログエントリ データの傾向をモニタリングする場合に効果的です。ただし、イベントが数件しかない場合は、それほど効果的ではありません。

  • ログエントリ データの集計分析をモニタリングするには、Log Analytics とアラート ポリシーを組み合わせます。このシナリオでは、Log Analytics を使用するようにログバケットをアップグレードし、そのログバケットのリンクされた BigQuery データセットを作成します。次に、SQL クエリをサポートするログ分析を使用して、ログバケットのログビューをクエリします。最後に、SQL クエリの結果をモニタリングするアラート ポリシーを作成します。このタイプのアラート ポリシーは、SQL ベースのアラート ポリシーと呼ばれます。

SQL ベースのアラート ポリシーは、複数のログエントリで正確な値を評価する場合に最も効果的です。個々のログエントリを評価する場合は、ログベースのアラート ポリシーを作成します。

このドキュメントの残りの部分では、SQL ベースのアラート ポリシーの使用方法について説明します。

通知ポリシーのコンポーネント

SQL ベースのアラート ポリシーには、条件とスケジュールが含まれます。

  • 条件には、ログビューにクエリを実行する SQL クエリであるクエリが含まれます。この条件では、クエリ結果が原因で Monitoring がインシデントを作成する状況も定義します。

  • スケジュールは、アラート ポリシーがクエリを実行する頻度を定義します。スケジュールでは、ルックバック ウィンドウのサイズも定義します。これは、クエリが前回評価されてから受信されたログエントリのみを選択するフィルタです。たとえば、スケジュールを 60 分に設定すると、クエリは 60 分ごとに実行され、直近 60 分間のログエントリを選択するルックバック ウィンドウが使用されます。

アラート ポリシーには、通知チャンネルのリストも含まれています。アラート ポリシーの条件が満たされると、Cloud Monitoring はインシデントを作成し、これらのチャネルを通じてインシデントに関する通知を送信します。インシデントは、条件が満たされた原因となったデータとその他の関連情報を記録したものです。この情報は、インシデントの原因となった問題のトラブルシューティングに役立ちます。インシデントを確認するには、Google Cloud コンソールを使用します。

SQL ベースのアラート ポリシーの評価タイプ

SQL クエリの結果をモニタリングする条件は、次の 2 種類の評価をサポートしています。

  • 行数しきい値: クエリ結果の行数がしきい値の値より大きい場合、または同じか小さい場合に条件が満たされます。

    たとえば、ルックバック ウィンドウ内の 50 件を超えるログエントリの重大度が 200 を超えたときに通知を受け取るとします。重大度が 200 を超えるログエントリを報告するクエリを作成します。次に、条件を構成し、[行数のしきい値] を選択し、しきい値を 50 に設定します。

  • ブール値: クエリ結果テーブルの特定のブール列に true の値を持つ行が含まれている場合、条件が満たされます。

    たとえば、ルックバック ウィンドウ内のログエントリの 25% を超える重大度が ERROR の場合に通知を受け取るとします。重大度レベルが ERROR のログエントリの割合を計算するクエリを作成します。割合が 25% を超えると、クエリ結果は truenotify 列に書き込みます。次に、条件を作成し、タイプを ブール値に設定し、notify 列をモニタリングするように条件を構成します。

SQL クエリの結果をモニタリングするアラート ポリシーに含めることができる条件は 1 つだけです。

アラート ポリシーと BigQuery

アラート ポリシーが SQL クエリを実行すると、そのクエリは、アラート ポリシーが定義されている Google Cloud プロジェクトで予約された BigQuery スロットを使用して実行されます。詳細については、スロット予約の操作をご覧ください。

予約済みの BigQuery スロットを使用してログビューをクエリするアラート ポリシーの場合、ログビューをホストするログバケットにリンクされた BigQuery データセットが構成されている必要があります。リンクされたデータセットを使用すると、BigQuery はログバケット内のデータを読み取ることができ、SQL クエリから返されたデータに対して BigQuery 関数を実行できます。

評価されたログエントリ

ログエントリがアラート ポリシーの SQL クエリによって評価されるには、次の両方の条件を満たしている必要があります。

  • ログエントリの受信タイムスタンプ(Cloud Logging がログエントリを受信した時刻を記録)は、アラート ポリシーのルックバック ウィンドウ内にする必要があります。
  • ログエントリの生成時刻を記録するログエントリのタイムスタンプは、ルックバック ウィンドウの 15 分以内にする必要があります。

たとえば、SQL ベースのアラート ポリシーのルックバック ウィンドウが 60 分の場合、ログ分析は、午後 1 時 30 分にアラート ポリシーの SQL クエリを実行します。クエリに含めるには、ログエントリが次の両方の条件を満たしている必要があります。

  • 受信したタイムスタンプは午後 12 時 30 分から午後 1 時 30 分の間にする必要があります。
  • タイムスタンプは午後 12 時 15 分から午後 1 時 45 分の間にする必要があります。

ログ分析のインターフェースからクエリを実行すると、選択した期間内のすべてのログエントリがログエントリのタイムスタンプに基づいて評価されます。

始める前に

  1. ログ分析の使用に必要な権限を取得するには、ログバケットまたはログビューに対する次の IAM ロールの付与を管理者に依頼してください。

    • _Required および _Default のログバケットに対してクエリを実行するには:   ログ閲覧者roles/logging.viewer
    • プロジェクト内のすべてのログビューをクエリするには: ログビューアクセサー roles/logging.viewAccessor
    • 特定のログビューでログをクエリするには、ログビューの IAM ポリシーを作成するか、ログビュー アクセサー(roles/logging.viewAccessor)ロールを特定のログビューに制限します。詳細については、ログビューへのアクセスを制御するをご覧ください。

    その他のロールについては、Logging のロールをご覧ください。
  2. クエリを実行するログビューで、[ログストレージ] ページに移動し、これらのログビューを格納するログバケットが、ログ分析を使用するようにアップグレードされていることを確認します。必要に応じて、ログバケットをアップグレードします。
  3. Google Cloud コンソールで、[ログストレージ] ページに移動します。

    [ログストレージ] に移動

    検索バーを使用してこのページを検索する場合は、小見出しが [Logging] の結果を選択します。

  4. 予約済みの BigQuery スロットでクエリの実行を有効にするには、次の操作を行います。
    1. クエリするログバケットにリンクされたデータセットがない場合は、そのログバケットにリンクされたデータセットを作成します。
    2. 予約済みの BigQuery スロットを構成し、Google Cloud プロジェクトに割り当てる

  5. SQL ベースのアラート ポリシーの作成と管理に必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。

    データセットへのアクセス権の付与については、データセットへのアクセス権を付与するをご覧ください。

  6. モニタリング サービス アカウントが存在し、次のロールがあることを確認します。

    1. プロジェクトに対するMonitoring サービス エージェント(roles/monitoring.notificationServiceAgent
    2. リンクされたデータセットに対する BigQuery データ閲覧者(roles/bigquery.dataViewer

    Monitoring サービス アカウントが存在しない場合は、トラブルシューティング: Monitoring サービス アカウントがないをご覧ください。

  7. インシデントの通知の受信に使用する通知チャンネルを構成します。冗長性を確保するために、複数のタイプの通知チャンネルを作成することをおすすめします。詳細については、通知チャンネルを作成して管理するをご覧ください。

SQL ベースのアラート ポリシーを作成する

SQL ベースのアラート ポリシーを作成するには、次の操作を行います。

Google Cloud コンソール

  1. Google Cloud コンソールで、[ログ分析] ページに移動します。

    [ログ分析] に移動

    検索バーを使用してこのページを検索する場合は、小見出しが [Logging] の結果を選択します。

  2. [ログ分析] ページのクエリエディタで、ログビューの SQL クエリを入力します。

    ログビューの SQL クエリの作成の詳細については、ログビューをクエリするをご覧ください。

  3. ツールバーで [BigQuery で実行] をクリックします。

    ログ分析は BigQuery エンジンでクエリを実行し、結果を [結果] テーブルに表示します。

    [BigQuery で実行] が表示されない場合は、[ クエリエンジンを選択]、[BigQuery] の順にクリックします。[クエリを実行] ボタンが [BigQuery で実行] に変わります。

  4. [ログ分析] ページの [結果] 表で、 [アラートを作成] をクリックします。

    [ログ分析] ページに [SQL アラート ポリシーを作成] ウィンドウが表示されます。[SQL クエリ] セクションにクエリが表示されます。

  5. [アラート条件] セクションで、アラート ポリシーの条件とスケジュールを構成します。

  6. アラート ポリシーのアラートの詳細を構成します。

    1. 省略可: アラート ポリシーのラベルドキュメントを追加します。

    2. 通知チャンネルを追加し、[次へ] をクリックします。

  7. アラート ポリシーを確認し、[保存] をクリックして作成します。

Cloud Monitoring API

alertPolicies.create メソッドを使用して、アラート ポリシーをプログラムで作成します。アラート ポリシーの Condition タイプは conditionSql にする必要があります。これは SqlCondition のインスタンスです。この条件タイプを使用すると、アラート ポリシーの条件を SQL で定義できます。

スケジュールを定義するには、minuteshours、または days フィールドのいずれかに periodicity 値を設定します。たとえば、クエリを 12 時間ごとに実行する場合は、hours フィールドの周期を 12 に設定します。

条件を定義するには、次のフィールドを使用します。

  • boolean_test: クエリ結果テーブルのブール列の行に true 値が含まれている場合に条件が満たされるようにアラート ポリシーを構成します。
  • row_count_test: クエリ結果テーブルの行数が特定のしきい値に達したときに条件が満たされるように、アラート ポリシーを構成します。

フィールドと定義の一覧については、Cloud Monitoring API ドキュメントの SqlCondition をご覧ください。

アラート ポリシー用の Monitoring API の詳細については、API によるアラート ポリシーの管理をご覧ください。

Terraform

  1. プロジェクトに Terraform をインストールして構成します。App Hub 構成の場合は、App Hub ホスト プロジェクトまたはアプリ対応フォルダの管理プロジェクトを選択します。

  2. Cloud Shell で、Terraform 構成を含むディレクトリに移動します。

  3. Terraform 構成で、google_monitoring_alert_policy リソースのインスタンスを構成します(condition_sql など)。

  4. Cloud Shell で、「terraform apply」と入力します。

アラート ポリシーを変更するには、Terraform の構成を編集して再適用します。詳細については、Terraform でアラート ポリシーを管理するをご覧ください。

Terraform で Google Cloud を使用する場合の一般的な情報については、 Google Cloudでの Terraform をご覧ください。

制限事項

アラート ポリシーの条件の評価がスケジュールされている場合、SQL クエリの実行は 5 分遅延されます。これは、Cloud Logging がルックバック ウィンドウ中に受信したログエントリをインデックスに登録する時間を確保するためです。たとえば、アラート ポリシーで午後 2 時に終了するルックバック ウィンドウを使用している場合、SQL クエリは午後 2 時 5 分まで実行されません。

  • SQL ベースのアラート ポリシーごとに 1 つのアラート条件を設定できます。
  • SQL ベースのアラート ポリシーによって発行されたクエリは、実行時間が 5 分を超えると失敗します。エラーが発生すると、エラーがログに記録されます。
  • SQL ベースのアラート ポリシーでは、分析ビューをクエリできません。

アラート ポリシーに関連付けられている上限の一覧については、モニタリングの上限をご覧ください。

料金

料金については、次のドキュメントをご覧ください。

次のステップ