BigQuery Monitoring の概要

モニタリングとロギングは、クラウドで信頼性の高いアプリケーションを実行するために不可欠です。ワークロードが大きい場合やミッション クリティカルな場合、BigQuery ワークロードも例外ではありません。このドキュメントでは、BigQuery で使用できるモニタリング データの概要を説明します。

指標

指標は定期的に収集され、分析に利用できる数値です。指標を使って次のことができます。

  • グラフとダッシュボードを作成する。
  • 人間による介入を必要とする重大な状態や状況に応じたアラートをトリガーする。
  • 過去のパフォーマンスを分析する。

BigQuery の場合、利用可能な指標には、実行中のジョブの数、クエリ中にスキャンされたバイト数、クエリ時間の分布、その他の統計情報などがあります。BigQuery で使用可能な指標の一覧については、Google Cloud の指標bigquery をご覧ください。

Cloud Monitoring を使用して、BigQuery の指標を表示し、グラフとアラートを作成します。各指標には、bigquery_datasetbigquery_projectglobal のいずれかのリソースタイプと一連のラベルがあります。この情報を基に、Monitoring Query Language(MQL)でクエリを作成します。ラベルを使用して、各指標をグループ化またはフィルタリングできます。

たとえば、処理中のインタラクティブなクエリの数をグラフ化するには、次の MQL ステートメントを使用します。このステートメントでは、interactive と等しい priority でフィルタリングを行います。

fetch global
| metric 'bigquery.googleapis.com/query/count'
| filter metric.priority = 'interactive'

次の例では、処理中の読み込みジョブの数を 10 分間隔でグループ化して取得します。

fetch bigquery_project
| metric 'bigquery.googleapis.com/job/num_in_flight'
| filter metric.job_type = 'load'
| group_by 10m

詳細については、BigQuery のグラフとアラートの作成をご覧ください。

ログ

ログは、特定のイベントまたはアクションに応じて生成されるテキスト レコードです。BigQuery は、テーブルの作成や削除、スロットの購入、読み込みジョブの実行などのアクションのログエントリを作成します。Google Cloud でのロギングの詳細については、Cloud Logging をご覧ください。

ログは、ログエントリの追記専用のコレクションです。たとえば、独自のログエントリを projects/PROJECT_ID/logs/my-test-log という名前のログに書き込むことができます。BigQuery を含む多くの Google Cloud サービスは、監査ログと呼ばれるログの種類を作成します。ログには次の情報が記録されます。

  • リソースの作成や変更などの管理アクティビティ。
  • リソースからのユーザー提供データの読み取りなどのデータアクセス。
  • ユーザーの操作ではなく、Google システムによって生成されたシステム イベント。

監査ログは構造化 JSON 形式で書き込まれます。Google Cloud ログエントリの基本データ型は LogEntry 構造です。この構造には、ログの名前、ログエントリを生成したリソース、タイムスタンプ、その他の基本情報が含まれています。

ログに記録されたイベントの詳細は、ペイロード フィールドと呼ばれるサブフィールドに含まれています。監査ログの場合、ペイロード フィールドは protoPayload という名前になります。このフィールドの値は AuditLog 構造で、type.googleapis.com/google.cloud.audit.AuditLog に設定された、protoPayload.@type フィールドの値で示されます。

BigQuery は現在、データセット、テーブル、ジョブのオペレーション用に監査ログを 2 つの異なる形式で書き込みますが、どちらも AuditLog ベースタイプを共有します。

以前の形式:

  • resource.type フィールドは bigquery_resource です。
  • オペレーションの詳細は、protoPayload.serviceData フィールドに書き込まれます。このフィールドの値は AuditData 構造です。

新しい形式:

  • resource.type フィールドは bigquery_project または bigquery_dataset のいずれかです。bigquery_project リソースにはジョブに関するログエントリがありますが、bigquery_dataset リソースにはストレージに関するログエントリがあります。
  • オペレーションの詳細は、protoPayload.metadata フィールドに書き込まれます。このフィールドの値は BigQueryAuditMetadata 構造です。

新しい形式のログを使用することをおすすめします。詳細については、監査ログ移行ガイドをご覧ください。

次に、失敗したオペレーションを示すログエントリの簡単な例を示します。

{
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "status": {
      "code": 5,
      "message": "Not found: Dataset my-project:my-dataset was not found in location US"
    },
    "authenticationInfo": { ... },
    "requestMetadata":  { ... },
    "serviceName": "bigquery.googleapis.com",
    "methodName": "google.cloud.bigquery.v2.JobService.InsertJob",
    "metadata": {
  },
  "resource": {
    "type": "bigquery_project",
    "labels": { .. },
  },
  "severity": "ERROR",
  "logName": "projects/my-project/logs/cloudaudit.googleapis.com%2Fdata_access",
  ...
}

BigQuery Reservations のオペレーションでは、protoPayloadAuditLog 構造であり、protoPayload.request フィールドと protoPayload.response フィールドに詳細情報が含まれています。フィールドの定義は BigQuery Reservation API で確認できます。詳細については、BigQuery Reservations のモニタリングをご覧ください。

INFORMATION_SCHEMA ビュー

INFORMATION_SCHEMA ビューは BigQuery のインサイトの別のソースで、指標やログと組み合わせて使用できます。

このビューには、ジョブ、データセット、テーブル、その他の BigQuery エンティティに関するメタデータが含まれます。たとえば、特定の期間に実行された BigQuery ジョブに関するリアルタイムのメタデータを取得し、取得した結果をプロジェクト、ユーザー、参照するテーブル、その他のディメンションでグループ化またはフィルタリングできます。

この情報を基に、BigQuery ワークロードをより細かく分析することで、次のような質問に答えることができます。

  • 特定のプロジェクトの過去 7 日間のすべてのクエリの平均スロット使用率
  • 特定のプロジェクトでバッチ読み込みジョブを送信したユーザー
  • 過去 30 分間に発生したストリーミング エラーを、エラーコード別にグループ化したもの

BigQuery ワークロードのパフォーマンスを分析する場合は、特にジョブ メタデータストリーミング メタデータ予約メタデータをご覧ください。

組織のスロットと予約の使用状況、ジョブ実行エラー、ジョブエラーを示す GitHub のサンプル INFORMATION_SCHEMA クエリがあります。これらのクエリから構築された Google データポータルのダッシュボードを表示することもできます。BigQuery システム テーブル レポートをご覧ください。

次のステップ