このドキュメントでは、Log Analytics で実行したクエリの結果をモニタリングするアラート ポリシーを作成する方法について説明します。これらのクエリは SQL で記述され、ログビューに対してクエリを実行する必要があります。アラート ポリシーは、クエリ結果が指定した条件を満たしたときに通知します。たとえば、特定の期間のログエントリの 25% 以上が ERROR
の重大度の場合に通知されるようにアラート ポリシーを構成できます。
[ログ分析] ページから作成したアラート ポリシーは、BigQuery エンジンで実行されます。したがって、クエリ対象のデータには、リンクされた BigQuery データセットからアクセスできる必要があります。
ログ分析の概要については、ログ分析でログをクエリして分析するをご覧ください。
アラート ポリシーの仕組み
アラート ポリシーでは、アラートを受け取る状況とインシデントの通知方法を記述します。ログデータにコンテンツやパターンが検出された場合に通知を受け取るには、次の 3 つの方法があります。
特定のフレーズを個々のログエントリでスキャンするには、ログベースのアラート ポリシーを作成します。セキュリティ関連のイベントなどの通知を受け取る必要がある場合は、これらのアラート ポリシーを使用します。
ログエントリ データ内のイベントをモニタリングするには、ログベースの指標を作成し、指標をモニタリングするアラート ポリシーを作成します。このようなタイプのアラート ポリシーは、時間の経過に伴うログエントリ データの傾向をモニタリングする場合に効果的です。ただし、イベントが数件しかない場合は、それほど効果的ではありません。
ログエントリ データの集計分析をモニタリングするには、Log Analytics とアラート ポリシーを組み合わせます。このシナリオでは、Log Analytics を使用するようにログバケットをアップグレードし、そのログバケットのリンクされた BigQuery データセットを作成します。次に、SQL クエリをサポートする Log Analytics を使用して、ログバケットのログビューをクエリします。最後に、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% を超えると、クエリ結果はtrue
をnotify
列に書き込みます。次に、条件を作成し、タイプを ブール値に設定し、notify
列をモニタリングするように条件を構成します。
SQL クエリの結果をモニタリングするアラート ポリシーに含めることができる条件は 1 つのみです。
アラート ポリシーと BigQuery
アラート ポリシーが SQL クエリを実行すると、そのクエリは、アラート ポリシーが定義されている Google Cloud プロジェクトで予約された BigQuery スロットを使用して実行されます。詳細については、スロット予約の操作をご覧ください。
予約済みの BigQuery スロットを使用してログビューをクエリするアラート ポリシーの場合、ログビューをホストするログバケットにリンクされた BigQuery データセットが構成されている必要があります。リンクされたデータセットを使用すると、BigQuery はログバケット内のデータを読み取ることができ、SQL クエリから返されたデータに対して BigQuery 関数を実行できます。
始める前に
-
ログ分析の使用に必要な権限を取得するには、ログバケットまたはログビューに対する次の IAM ロールの付与を管理者に依頼してください。
-
_Required
および_Default
のログバケットに対してクエリを実行するには: ログ閲覧者(roles/logging.viewer
) -
プロジェクト内のすべてのログビューをクエリするには:
ログビューアクセサー (
roles/logging.viewAccessor
) -
特定のログビューでログをクエリするには、ログビューの IAM ポリシーを作成するか、ログビュー アクセサー(
roles/logging.viewAccessor
)ロールを特定のログビューに制限します。詳細については、ログビューへのアクセスを制御するをご覧ください。
-
- クエリを実行するログビューで、[ログストレージ] ページに移動し、これらのログビューを格納するログバケットが、ログ分析を使用するようにアップグレードされていることを確認します。必要に応じて、ログバケットをアップグレードします。
- 予約済みの BigQuery スロットでクエリの実行を有効にするには、次の操作を行います。
- クエリを実行するログバケットにリンクされたデータセットがない場合は、そのログバケットにリンクされたデータセットを作成します。
- 予約済みの BigQuery スロットを構成し、Google Cloud プロジェクトに割り当てます。
-
SQL ベースのアラート ポリシーの作成と管理に必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。
-
プロジェクトに対するモニタリング編集者 (
roles/monitoring.editor
) -
プロジェクトに対する Logging SqlAlertWriter (
roles/logging.sqlAlertWriter
) -
プロジェクトに対する BigQuery ジョブユーザー (
roles/bigquery.jobUser
) -
リンクされたデータセットに対する BigQuery データ閲覧者 (
roles/bigquery.dataViewer
)
データセットへのアクセス権の付与については、データセットへのアクセス権を付与するをご覧ください。
-
プロジェクトに対するモニタリング編集者 (
モニタリング サービス アカウントが存在し、次のロールがあることを確認します。
- プロジェクトに対するMonitoring サービス エージェント(
roles/monitoring.notificationServiceAgent
) 。 - リンクされたデータセットに対する BigQuery データ閲覧者(
roles/bigquery.dataViewer
)。
Monitoring サービス アカウントが存在しない場合は、トラブルシューティング: Monitoring サービス アカウントがないをご覧ください。
- プロジェクトに対するMonitoring サービス エージェント(
- インシデントの通知の受信に使用する通知チャンネルを構成します。冗長性を確保するために、複数のタイプの通知チャンネルを作成することをおすすめします。詳細については、通知チャンネルを作成して管理するをご覧ください。
Google Cloud コンソールで、[ログストレージ] ページに移動します。
検索バーを使用してこのページを検索する場合は、小見出しが [Logging] の結果を選択します。
SQL ベースのアラート ポリシーを作成する
SQL ベースのアラート ポリシーを作成するには、次の操作を行います。
Google Cloud コンソール
-
Google Cloud コンソールで、[ログ分析] ページに移動します。
検索バーを使用してこのページを検索する場合は、小見出しが [Logging] の結果を選択します。
[ログ分析] ページのクエリエディタで、ログビューの SQL クエリを入力します。
ログビューの SQL クエリの作成の詳細については、ログビューをクエリするをご覧ください。
ツールバーで [BigQuery で実行] をクリックします。
ログ分析は BigQuery エンジンでクエリを実行し、結果を [結果] テーブルに表示します。
[BigQuery で実行] が表示されない場合は、settings [クエリエンジンを選択]、[BigQuery] の順にクリックします。[クエリを実行] ボタンが [BigQuery で実行] に変わります。
[ログ分析] ページの [結果] 表で、add_alert [アラートを作成] をクリックします。
[ログ分析] ページに [SQL アラート ポリシーを作成] ウィンドウが表示されます。[SQL クエリ] セクションにクエリが表示されます。
[アラート条件] セクションで、アラート ポリシーの条件とスケジュールを構成します。
アラート ポリシーのアラートの詳細を構成します。
省略可: アラート ポリシーのラベルとドキュメントを追加します。
通知チャンネルを追加し、[次へ] をクリックします。
アラート ポリシーを確認して、[保存] をクリックして作成します。
Cloud Monitoring API
alertPolicies.create
メソッドを使用して、アラート ポリシーをプログラムで作成します。アラート ポリシーの Condition
タイプは conditionSql
にする必要があります。これは SqlCondition
のインスタンスです。この条件タイプを使用すると、アラート ポリシーの条件を SQL で定義できます。
スケジュールを定義するには、minutes
、hours
、または days
フィールドのいずれかに periodicity
値を設定します。たとえば、クエリを 12 時間ごとに実行する場合は、hours
フィールドの周期を 12 に設定します。
条件を定義するには、次のフィールドを使用します。
boolean_test
: クエリ結果テーブルのブール列の行に true 値が含まれている場合に条件が満たされるようにアラート ポリシーを構成します。row_count_test
: クエリ結果テーブルの行数が特定のしきい値に達したときに条件が満たされるように、アラート ポリシーを構成します。
フィールドと定義の一覧については、Cloud Monitoring API ドキュメントの SqlCondition
をご覧ください。
アラート ポリシー用の Monitoring API の詳細については、API によるアラート ポリシーの管理をご覧ください。
制限事項
アラート ポリシーがスケジュール設定された SQL クエリを実行すると、アラート ポリシーは 15 分間遅延し、ログエントリがログバケットに伝播する時間を確保します。ログエントリが到着するまでに 15 分以上かかる場合、アラート ポリシーはログエントリを評価しません。
この 15 分間の遅延の導入は、ログエントリが生成されてから、Monitoring が条件が満たされたことを検出するまでの時間に影響します。たとえば、30 分ごとに実行されるようにスケジュールされた SQL クエリがあるとします。アラート ポリシーが条件を定期的に評価するときに、15 ~ 45 分前のタイムスタンプを持つログエントリをクエリします。
アラート ポリシーに関連する上限については、Monitoring の上限をご覧ください。
料金
料金については、次のドキュメントをご覧ください。
- BigQuery の料金
- Google Cloud Observability の料金ドキュメントの Cloud Logging
- Google Cloud Observability の料金ドキュメントの Cloud Monitoring
次のステップ
ログ分析データからグラフを作成する方法については、ログ分析でクエリの結果をグラフ化するをご覧ください。
これらのアラート ポリシーのインシデントの管理については、SQL ベースのアラート ポリシーのインシデントをご覧ください。