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

このドキュメントでは、ログ分析で実行したクエリの結果をモニタリングするアラート ポリシーを作成する方法について説明します。これらのクエリは SQL で記述され、_AllSpans という名前のオブザーバビリティ ビューに対してクエリを実行する必要があります。アラート ポリシーは、クエリ結果が指定した条件を満たしたときに通知します。

[ログ分析] ページから作成したアラート ポリシーは、BigQuery エンジンで実行されます。したがって、クエリ対象のデータには、リンクされた BigQuery データセットからアクセスできる必要があります。

ログ分析の概要については、ログ分析でトレースのクエリと分析を行うをご覧ください。

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

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

  • 1 か月あたりの Cloud Trace 取り込みスパン数、割り当て使用量、スパン取り込み率をモニタリングするには、Cloud Monitoring でアラート ポリシーを作成します。アラート ポリシーを作成したことがない場合は、アラート ポリシーの作成で Cloud Monitoring コンソールに関する詳細をご覧ください。

  • 個々のトレースやスパンを表示または調査したり、スパンに付加された属性を表示したりするには、[Trace エクスプローラ] ページを使用します。このページの詳細については、トレースを検索して調査するをご覧ください。

  • トレースデータの集計分析をモニタリングするには、ログ分析とアラート ポリシーを組み合わせます。このシナリオでは、SQL クエリを使用して、_Trace という名前のオブザーバビリティ バケットの _AllSpans ビューをクエリします。最後に、SQL クエリの結果をモニタリングするアラート ポリシーを作成します。このタイプのアラート ポリシーは、SQL ベースのアラート ポリシーと呼ばれます。

    トレースデータの保存方法については、ストレージの概要をご覧ください。

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

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

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

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

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

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

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

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

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

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

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

アラート ポリシーと BigQuery

アラート ポリシーでトレースデータをクエリするには、リンクされた BigQuery データセットを構成する必要があります。リンクされたデータセットを使用すると、BigQuery はトレースデータを読み取り、SQL クエリから返されたデータに対して BigQuery 関数を実行できます。

アラート ポリシーが SQL クエリを実行すると、そのクエリは、アラート ポリシーが定義されている Google Cloud プロジェクトの BigQuery エンジンで実行されます。デフォルトでは、BigQuery エンジンで実行されるクエリはオンデマンド スロットを使用します。オンデマンド スロットと予約済みスロットには、BigQuery の料金が適用されます。

プロジェクト専用の BigQuery スロット予約を構成することもできます。

  1. 専用スロットを使用して予約を作成するか、既存の予約を特定します。
  2. プロジェクトの予約割り当てを作成する

ルックバック ウィンドウとインシデントの伝播時間

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

クエリの実行後にアラート条件が満たされた場合、インシデントがシステム全体に伝播するまでさらに最大 2 分かかることがあります。

クエリの失敗数

SQL ベースのアラート ポリシーによって発行されたクエリは、次のようなさまざまな理由で失敗することがあります。

  • Monitoring サービス アカウントが存在しなくなったか、クエリ対象のトレースデータを読み取る権限がなくなった。

  • クエリの実行時間が 5 分を超えている。

  • 内部エラーが発生する。

クエリが失敗すると、アラート ポリシー ID とエラー ステータスを含むログエントリが生成されます。ログベースのアラート ポリシーを使用して、エラーがログに記録されたときにアラートを作成できます。

始める前に

このセクションでは、トレースデータの BigQuery リンク済みデータセットがあることを前提としています。

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

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

  2. Monitoring サービス アカウントが存在し、次のロールが付与されていることを確認します。

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

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

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

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

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

Google Cloud コンソール

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

    [ログ分析] に移動

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

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

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

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

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

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

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

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

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

    1. 通知チャンネルを追加し、カスタムの件名など、通知コンテンツを構成します。

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

    3. [次へ] をクリックします。

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

Cloud Monitoring API

alertPolicies.create メソッドを使用して、アラート ポリシーをプログラムで作成します。アラート ポリシーの Condition タイプは MonitoringQueryLanguageCondition にする必要があります。これは 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 ベースのアラート ポリシーごとに 1 つの条件を設定できます。
  • SQL ベースのアラート ポリシーによって発行されたクエリは、実行時間が 5 分を超えると失敗します。

  • クエリのスケジュール設定からインシデントの作成までには、最大 7 分の遅延とクエリの実行時間がかかります。

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

次のステップ