Google Cloud Console でのログのエクスポート

このページでは、Cloud Console と gcloud コマンドライン ツールを使用してログエントリをエクスポートする方法について説明します。

Cloud Logging API を使用してログエントリをエクスポートすることもできます。

ログ エクスポートのコンセプトの概要については、ログのエクスポートの概要をご覧ください。要約すると、ログをエクスポートするには、ログフィルタエクスポート先を含む 1 つ以上のシンクを作成します。Cloud Logging は、新しいログエントリを受け取ると、各シンクと比較します。ログエントリがシンクのフィルタと一致する場合は、ログエントリのコピーがエクスポート先に書き込まれます。

ログを次の宛先にエクスポートできます。

発信先 ルーティングの頻度
Cloud Storage 1 時間ごとのバッチ
BigQuery ほぼリアルタイム
Pub/Sub ほぼリアルタイム
Cloud Logging のログ バケット リアルタイム
Splunk ほぼリアルタイム

エクスポートしたログを書式設定および整理する方法と、エクスポートしたログを表示する方法については、エクスポートしたログの使用をご覧ください。

ログ エクスプローラとログルーターを使用したシンクの作成と管理

Cloud Console を使用すると、次のことができます。

  • すべてのシンクを 1 か所に表示します。
  • シンクを作成する前に、シンクのフィルタによって照合されるログエントリを表示します。
  • シンクのエクスポート先を作成して承認します。

ただし、Cloud Console を使用する場合は、プロジェクトでのみシンクを作成または表示できます。gcloud コマンドライン ツールまたは Cloud Logging API を使用して組織、フォルダ、請求先アカウントにシンクを作成するには、集約シンクをご覧ください。

シンクを作成する前に、次のことを確認します。

  • Logs Explorer に表示されるログを持つ Google Cloud プロジェクトを所有している。

  • シンクを作成、削除、変更するには、Cloud プロジェクトでオーナーまたは Logging / ログ構成書き込みのどちらかの IAM ロールを持っている。詳細については、権限とロールをご覧ください。

  • 宛先サービスを受けているか、またはリンク先サービスを作成する権限がある。

シンクの作成

  1. [ログルーター] ページからシンクを作成するには、[シンクを作成] を選択します。

    ログルーターからシンクの作成を選択する

    [ログ エクスプローラ] ページからシンクを作成するには、[アクション] > [シンクを作成] を選択します。

    シンクの作成オプションが表示されたメニュー。

    いずれかのページで [シンクを作成] を選択した後、[ログ ルーティング シンクの作成] パネルで次の手順を完了します。

  2. シンクの詳細を入力します。

    • シンク名: シンクの識別子を指定します。

    • シンクの説明(省略可): シンクの目的またはユースケースについて説明します。

  3. シンクのエクスポート先を入力します。

    • シンクサービスの選択: ログを転送するサービスを選択します。

    次のサービスと宛先を利用できます。

    • Cloud Logging ログ バケット: ログ バケットを選択または作成します。
    • BigQuery: エクスポートされたログを受信する特定のデータセットを選択または作成します。パーティション分割テーブルを使用することもできます。
    • Cloud Storage: エクスポートされたログを受信する特定の Cloud Storage バケットを選択または作成します。
    • Pub/Sub: エクスポートされたログを受信する特定のトピックを選択または作成します。
    • Splunk: Splunk サービスの Pub/Sub トピックを選択します。
    • 他のプロジェクト: 次の形式で Google Cloud サービスと宛先を追加します。

      SERVICE.googleapis.com/projects/PROJECT_ID/DESTINATION/DESTINATION_ID
      

      たとえば、エクスポート先が BigQuery データセットの場合、シンクのエクスポート先は次のようになります。

      bigquery.googleapis.com/projects/PROJECT_ID/datasets/DATASET_ID
      

  4. シンクに含めるログを選択します。

    • 包含フィルタの作成: シンクのエクスポート先にルーティングするログを選択するフィルタを入力します。

    1 つのログ バケットに、すべてのデータ アクセス ログを送信するフィルタを作成する場合があります。このフィルタは次のようになります。

    LOG_ID("cloudaudit.googleapis.com/data_access") OR LOG_ID("externalaudit.googleapis.com/data_access")
    

    正しいフィルタを入力したことを確認するには、[ログをプレビュー] を選択します。フィルタが事前に入力された状態で、ログ エクスプローラが新しいタブで開きます。フィルタの作成については、Logging のクエリ言語をご覧ください。

  5. シンクから除外するログを選択します(省略可)。

    • 除外フィルタを作成する: [除外を追加] を選択し、シンクのエクスポート先にルーティングしないログを選択するフィルタを入力します。

    • 除外フィルタ名: 除外フィルタの識別子を指定します。

    • Exclusion filter rate: 0 から 100 までの整数を指定します。その値に従って、除外フィルタに一致する着信ログがサンプリングされます。

      0 は、フィルタに一致するログの 0 パーセントをサンプリングします。つまり、0 は除外フィルタを無効にするのと同じです。値 100 はすべてのログの 100 パーセントをサンプリングします。そのため、除外フィルタに一致するすべてのログが宛先から除外されます。値 50 は除外フィルタと一致するログの 50 パーセント をサンプリングします。つまり、除外対象のログの 50 パーセントが除外され、もう一方の 50 パーセント が宛先にルーティングされます。

      シンクごとに最大 50 個の除外フィルタを作成できます。

  6. [シンクを作成] を選択します。

シンクのフィルタに一致する新しいログエントリは、シンクのエクスポート先にルーティングされます。ログ バケット、BigQuery、または Pub/Sub に送信されるログエントリは、直ちにストリーミングされます。Cloud Storage へのログエントリは、約 1 時間ごとにまとめて送信されます。エクスポート先のログを表示する方法については、エクスポートしたログの使用をご覧ください。

シンクを作成すると、logging.googleapis.com/exports/ 指標を使用して受信したログエントリの数と量を表示できます。

ログをエクスポート先にエクスポートしようとしたときに Logging でエラーが発生した場合、エラーはプロジェクトのアクティビティ ストリームに表示されます。Google Cloud Console でプロジェクトのホームページの上部にある [アクティビティ] を選択します。一般的なエラーを診断するには、下記のトラブルシューティングをご覧ください。

別の Google Cloud プロジェクトにログをエクスポートする

シンクが作成されたプロジェクトとは別の Cloud プロジェクトのエクスポート先にログをエクスポートできます。

そのためには、以下のいずれかを行う必要があります。

  • ログを送信する Cloud プロジェクトに対する次のいずれかの IAM 権限を取得します。

    • オーナーroles/owner
    • Logging 管理者roles/logging.admin
    • ログ設定書き込み (roles/logging.configWriter)
  • シンクのサービス アカウントに、エクスポート先に書き込む roles/logging.logWriter ロールを付与します。

シンクのサービス アカウントに適切な権限を付与する手順の詳細については、エクスポート先の権限をご覧ください。Logging のロールと権限のリストについては、アクセス制御をご覧ください。

シンクを管理する

シンクが作成されると、[ログルーター] ページで表示できます。このページでは次の操作を行うことができます。

  • シンクの詳細を表示する
  • シンクを編集する
  • シンクを無効にする
  • シンクを削除する

Logging メニューから [ログルーター] ページに移動するには、[ログルーター] を選択します。

ログルーターに移動

[ログルーター] インターフェースには、シンクのテーブルサマリが含まれています。表の各行には、ログのエクスポートで説明されているシンク プロパティの一部に対応する情報が含まれています。

  • タイプ: シンクのエクスポート先のタイプです。
  • 名前: 現在のプロジェクトのシンクの識別子です。
  • 説明: シンクの説明です。
  • エクスポート先: エクスポートされたログエントリの宛先の完全な名前です。
  • 状態: シンクが有効か無効かを示します。

表の各行には、メニュー があり、次のオプションを利用できます。

  • シンクの詳細を表示する: シンクの名前、説明、サービス、エクスポート先、包含フィルタと除外フィルタを表示します。[編集] を選択すると、シンクのプロパティを変更できます。
  • シンクを編集: シンクのパラメータを変更できる [シンクを編集] パネルを開きます。
  • シンクを無効化: シンクを無効にし、シンクのエクスポート先へのルーティングを停止します。

  • シンクを有効化: 無効になっているシンクを有効にして、シンクのエクスポート先にルーティングを再開します。

  • シンクを削除: シンクを削除し、シンクのエクスポート先へのログの転送を停止します。_Default シンクと _Required シンクは削除できませんが、_Default シンクを無効にして、_Default ログ バケットへのログの転送を停止できます。

いずれかの列名をクリックすると、昇順または降順でデータを並べ替えることができます。表の一番下では、表示する行数を選択することもできます。

gcloud コマンドライン ツールを使用したシンクの作成と管理

シンクを作成するには、gcloud logging sinks create コマンドを実行します。

gcloud logging sinks create SINK_NAME SINK_LOCATION OPTIONAL_FLAGS

たとえば、Cloud Logging ログ バケットにシンクを作成するには、以下を実行します。

gcloud logging sinks create my-sink logging.googleapis.com/projects/myproject123/locations/global/buckets/my-bucket \
  --log-filter='logName="projects/myproject123/logs/matched"' --description="My first sink"

あるプロジェクトから別のプロジェクトのバケットにログをルーティングする

現在のプロジェクトのログを別のプロジェクトのバケットにルーティングするには、次の手順に従います。

クロスプロジェクトのバケット シンクでは、Logging でこのシンク用に作成するサービス アカウントに、適切な Identity and Access Management の権限を追加する必要があります。また、転送先バケットの Google Cloud プロジェクトでも課金を有効にする必要があります。

  1. 他のプロジェクトでバケットを作成していない場合は、作成します。

     gcloud logging buckets create BUCKET_ID --project=DESTINATION_PROJECT_ID
    
  2. ログを別のバケットにルーティングするシンクを作成します。

     gcloud logging sinks create SINK_NAME \
       logging.googleapis.com/projects/DESTINATION_PROJECT_ID/locations/global/buckets/BUCKET_ID \
       --log-filter='FILTER_CONDITIONS'
    
  3. シンク内の writerIdentity フィールドからサービス アカウントを取得します。

     gcloud logging sinks describe SINK_NAME
    

    サービス アカウントは次のようになります。

     serviceAccount:p123456789012-12345@gcp-sa-logging.iam.gserviceaccount.com
    
  4. サービス アカウントに roles/logging.bucketWriter ロールを付与します。

    1. エクスポート先のプロジェクトの Identity and Access Management ポリシーを取得し、JSON 形式でローカル ファイルに書き込みます。

      gcloud projects get-iam-policy DESTINATION_PROJECT_ID --format json > output.json
      
    2. サービス アカウントが、作成したバケットにのみ書き込みを許可する IAM 条件を追加します。例:

       {
         "bindings": [
           {
             "members": [
               "user:username@gmail.com"
             ],
             "role": "roles/owner"
           },
           {
             "members": [
               "[SERVICE_ACCOUNT]"
             ],
             "role": "roles/logging.bucketWriter",
             "condition": {
                 "title": "Bucket writer condition example",
                 "description": "Grants logging.bucketWriter role to service account [SERVICE_ACCOUNT] used by log sink [SINK_NAME]",
                 "expression":
                   "resource.name.endsWith(\'locations/global/buckets/BUCKET_ID\')"
             }
           }
         ],
         "etag": "BwWd_6eERR4=",
         "version": 3
       }

    3. IAM ポリシーを更新します。

      gcloud projects set-iam-policy DESTINATION_PROJECT_ID output.json
      

ログ取り込みの停止

_Default シンクやその他のシンクの _Default バケットへのルーティングを無効にして _Default バケットへのログの取り込みを無効にすると、Cloud Logging は _Default バケットへのログデータの取り込みと保存を停止します。_Default バケットには、次の 2 つの条件が満たされるまでのログが含まれます。

  • _Default バケットにルーティングされるシンクがない。

  • バケットでの保持期間の有効期限が切れた。

_Default バケットにログを送信するすべてのシンクを無効にすると、Cloud Logging は新しいログをバケットに取り込む際の課金を停止します。

ログの取り込みを無効にするには、次の手順を行います。

  1. ログルーターに移動します。

    ログルーターに移動

  2. ログを _Default バケットにルーティングするすべてのシンクを見つけるには、エクスポート先でシンクをフィルタし、「_Default」と入力します。

    デフォルトのバケットにログをルーティングするすべてのシンクを検索する

  3. 各シンクで、[メニュー] を選択し、[シンクを無効にする] を選択します。

    デフォルトのシンクを無効にする

これでシンクは無効になり、Cloud Logging はログを _Default バケットにルーティングしなくなります。

エクスポート先の権限

このセクションでは、エクスポートされたログをシンクのエクスポート先に書き込むために Identity and Access Management 権限を Logging に付与する方法について説明します。

シンクを作成すると、Logging によって一意の書き込み ID と呼ばれるシンクのサービス アカウントが新規に作成されます。このサービス アカウントは Cloud Logging によって所有、管理されているため、直接管理できません。シンクが削除されると、このサービス アカウントは削除されます。

エクスポート先では、このサービス アカウントにログエントリの書き込みを許可する必要があります。この権限を設定するには、次の手順を行います。

  1. Cloud Console、gcloud logging コマンドライン インターフェース、または Logging API で新しいシンクを作成します。

  2. Cloud Console でシンクを作成し、エクスポート先へのオーナー アクセス権がある場合は、Cloud Logging で必要な権限が設定されているはずです。その場合は完了です。そうでない場合は続行します。

  3. 新しいシンクからシンクの書き込み ID(メールアドレス)を取得します。

    • Cloud Console を使用している場合、[ログルーター] ページに移動し、[メニュー] > [シンクの詳細を表示する] を選択します。書き込み ID が [シンクの詳細] パネルに表示されます。
    • gcloud logging を使用している場合は、シンクを一覧表示すると書き込み ID が表示されます。
    • Logging API を使用している場合は、LogSink オブジェクトから書き込み ID を取得できます。
  4. エクスポート先へのオーナー アクセス権がある場合は、次の方法でエクスポート先にサービス アカウントを追加します。

    • Cloud Storage のエクスポート先の場合は、シンクの書き込み ID をバケットに追加し、ストレージのオブジェクト作成者の役割を付与します。
    • BigQuery のエクスポート先の場合は、シンクの書き込み ID をデータセットに追加し、BigQuery データ編集者の役割を付与します。
    • Cloud Pub/Sub の場合は、シンクの書き込み ID をトピックに追加し、Pub/Sub パブリッシャーの役割を付与します。
    • ログバケットのエクスポート先の場合は、シンクの書き込み ID をログバケットに追加して、roles/logging.bucketWriter 権限を付与します。
  5. エクスポート先へのオーナー アクセス権がない場合は、書き込み ID のサービス アカウント名を、その権限を持つ担当者に送信します。送信された担当者は、前のステップの指示に従って、書き込み ID をエクスポート先に追加する必要があります。

承認遅延

シンクは、ログエントリをエクスポートしようとしたときにエクスポート先への適切な IAM 権限がない場合、エラーを報告してそのログエントリをスキップします。これは、権限が付与されてシンクが新しいログエントリのエクスポートを開始するまで続きます。

シンクを作成してから、シンクの新しいサービス アカウントを使用してエクスポート先への書き込みを許可するまで、遅延が発生します。シンクの作成から 24 時間以内に、プロジェクトの [アクティビティ] ページにシンクからのアクセス許可関連のエラー メッセージが表示されることがあります。これらのエラー メッセージは無視して差し支えありません。

トラブルシューティング

以下では、ログのエクスポートで発生する可能性がある一般的な問題とその対処方法を説明します。

  • エクスポート先からのエラー: シンク内のエクスポート先の指定を確認します。projects.sinks.get を使用して、シンクの書き込み ID を検索し、ID がエクスポート先への書き込みを許可されていることを確認します。

  • ログがエクスポートされない: 考えられる理由は次のとおりです。

    • フィルタが正しくありません。フィルタを確認して、フィルタと一致するログエントリが最近 Logging に到達していることを検証し、スペルミスまたはフォーマット エラーがあれば修正します。

    • シンクを作成または更新してから一致するログエントリが受信されていません。新しいログエントリのみがエクスポートされます。

      エクスポートされたログをエクスポート先で表示するまで時間がかかります。これは特に Cloud Storage のエクスポート先に当てはまります。詳しくは、エクスポートしたログの可用性をご覧ください。

      エクスポート システムの指標を確認することもできます。エクスポート システムの指標では、エクスポートされるログエントリの数と、エラーによってドロップされたログエントリの数がわかります。

エラーが修正されると、シンクはログのエクスポートを開始します。

以前のログビューアを使用してシンクエラーを表示する方法は次のとおりです。

  1. シンクが作成されたプロジェクトまたは他のリソースのアクティビティ ストリームに移動します。

    アクティビティ ストリームに移動

  2. [Filters] パネルで、[アクティビティ タイプ] > [設定]、[リソースの種類] > [ロギング エクスポート シンク] をそれぞれ選択します。

  3. [Date/time] を調整して、該当する期間のシンクエラーを表示します。

    シンクエラーが表示されます。

次のセクションでは、サービス固有の発生する可能性のあるエラーと予期しない結果の一覧を示し、それらに対処する方法を説明します。

Cloud Storage にエクスポートするとき発生するエラー

Cloud Storage にログをエクスポートするときによく発生するエラーを次の表に示します。

エラー 原因 解決方法
バケット [YOUR_BUCKET] の権限では、ロググループで新しいオブジェクトを作成できません。 シンクの書き込み ID に、バケットに対する正しい権限がありません。 バケットに必要な権限を追加するか、別のバケットを使用するようにシンクを更新します。エクスポート先の権限をご覧ください。
[YOUR_BUCKET] という名前のバケットはありません。 バケット名にエラーがあるか、バケットが削除された可能性があります。 正しいバケット エクスポート先でシンクを更新してください。
シンクは正常に作成されましたが、エクスポート先に適切な権限を付与できませんでした。 バケットの作成時にバケットのアクセス制御モデルが [均一] に設定されました。

このエラー メッセージは、サービス アカウントの追加後も引き続き表示されます。
バケットの作成中に [きめ細かい管理] アクセス制御モデルを選択します。既存のバケットの場合、バケットの作成後 90 日以内に [権限] タブを使用してアクセス制御モデルを変更できます。

BigQuery にエクスポートするとき発生するエラー

BigQuery にログをエクスポートするときによく発生するエラーを次の表に示します。

エラー 原因 解決方法
データセット [YOUR_DATASET] の権限では、ロググループで新しいテーブルを作成できません。 シンクの書き込み ID に、データセットに対する十分な権限がありません。 データセットに権限を追加します。エクスポート先の権限をご覧ください。
[YOUR_DATASET] という名前のデータセットはありません。 シンクのエクスポート先にエラーがあるか、誰かがデータセットを削除した可能性があります。 データセットを再作成するか、別のデータセットを使用するようにエクスポート シンクを更新します。
データセット [YOUR_DATASET] 内のテーブル [YOUR_TABLE] にストリーミングされるログがテーブル スキーマと一致しません。
またはエラー: table_invalid_schema
エクスポートしようとしているログが現在のテーブルのスキーマに適合していません。 ログエントリがテーブル スキーマと一致することを確認します。一般的な問題としては、異なるデータ型のログエントリを送信することが考えられます。たとえば、ログエントリのフィールドの 1 つが整数値で、スキーマで対応する列が文字列型になっている場合があります。アクティビティ ストリームには、無効なログエントリに対するリンクが含まれています。エラーの原因を修正したら、現在のテーブルの名前を変更して、Logging で再度テーブルを作成します。詳しい手順については、エクスポートしたログの BigQuery スキーマをご覧ください。
データセット [YOUR_DATASET] 内のテーブル [YOUR_TABLE] について、テーブルごとのストリーミング挿入の割り当てを超えています。 短時間に大量のログをエクスポートしようとしています。ログのストリーミングに適用される BigQuery のデフォルトの割り当て上限をご覧ください。 シンクが生成するログデータの量を減らします。一致するログエントリの数が少なくなるようにシンクのフィルタを更新したり、sample() 関数を使用します。
分割されたテーブル [YOUR_TABLE] にストリーミングされたログは、許可されている期間に含まれていません。 BigQuery では、許容された期間とかけ離れているログを受け入れません。 許可されている期間に含まれていないログをシンクでエクスポートすることはできません。これらのログを Cloud Storage にエクスポートすることで、代わりに BigQuery の読み込みジョブを使用できます。詳細については、BigQuery のドキュメントをご覧ください。
組織のポリシーで禁止されているため、データセット [YOUR_DATASET] にログをストリーミングできません。 選択したデータセットへの書き込みを禁止する組織のポリシーが存在します。組織のポリシーの詳細については、ドキュメントを参照してください。 エクスポート シンクを変更して、ポリシーに準拠したデータセットを使用します。

Pub/Sub にログをエクスポートするとき発生するエラー

Pub/Sub にログをエクスポートするときによく発生するエラーを次の表に示します。

エラー 原因 解決方法
[PROJECT] で [ACCOUNT] に編集アクセス権がないため、[TOPIC] に情報を公開できません。 シンクの書き込み ID に、トピックに対する正しい権限がありません。 プロジェクトに必要な権限を追加します。エクスポート先の権限をご覧ください。
トピック [TOPIC] は存在しません。 エクスポートしたログを受け取るように構成したトピックを削除してしまった可能性があります。 同じ名前のトピックを作り直すか、エクスポートの構成を変更して別のトピックを使います。

次のステップ