ログビューアによるエクスポート

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

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

ログエントリのサポートされているエクスポート先は、Cloud StorageBigQueryPub/Sub、Cloud Logging のログバケットです。

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

始める前に

  • プロジェクト: ログビューアで表示可能なログを含む Google Cloud プロジェクトが必要です。

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

  • エクスポート先のサービス: ログをエクスポートするには、ログの書き込み先となる Cloud StorageBigQueryPub/Sub などの Google Cloud サービスに登録する必要があります。

はじめに

  1. Logging メニューから [ログルーター] を選択します。

    ログルーターに移動

  2. ページの上部にある既存の Google Cloud プロジェクトを選択します。

ログルーターのユーザー インターフェース

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

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

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

  • シンクの詳細を表示: シンクのフィルタを表示します。[編集] をクリックすると、シンクのプロパティまたはフィルタを変更できます。
  • シンクを編集: シンクのパラメータを変更できる [シンクを編集] パネルを開きます。
  • シンクを無効化: シンクを無効にし、シンクのエクスポート先へのルーティングを停止します。
  • シンクを有効化: 無効になっているシンクを有効にして、シンクのエクスポート先にルーティングを再開します。
  • シンクを削除: シンクを削除し、シンクのエクスポート先へのルーティングを停止します。_Default シンクと _Required シンクは削除できませんが、_Default シンクを無効にして、_Default ログバケットへのログのルーティングを停止できます。

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

シンクを作成する

ログビューアまたはログルーターを使用してシンクを作成できます。

ログビューアを使用してシンクを作成する(従来版)

エクスポート シンクを作成するには、[ログルーター] ページの上部にある [シンクを作成] をクリックします。これは、[ログビューア] ページの上部で行うこともできます。

プロジェクトのエクスポートを作成する権限がサービス アカウントにない場合、このオプションは使用できません。詳細については、上記の始める前にをご覧ください。

次のスクリーンショットは、いくつかのフィールドが入力された状態の [シンクを編集] パネルを示しています。

[エクスポートの編集] パネルを表示するユーザー インターフェース。

シンクを作成するには、[シンクを編集] パネルに以下の情報を入力します。

  1. (フィルタ): 高度なログクエリを入力します。クエリを引用符で囲む必要はなく、複数の行を使用できます。[エクスポートを作成] をクリックしたときに表示されるログエントリによって、最初のクエリが決まります。

    クエリを編集したら、[クエリを送信する] をクリックします。該当するログエントリが表示されます。最新のログをフェッチするには、[最新のログを表示します] をクリックします。

    基本表示インターフェースを使用してログを選択するには、検索クエリボックスでプルダウン メニュー を使用します。

  2. シンク名: シンクに割り当てる識別子を入力します。

  3. シンクサービス: エクスポート先のサービスとして [Cloud Storage]、[Pub/Sub]、[BigQuery]、または [独自のエクスポート先] を選択します。

    独自のエクスポート先は、Cloud Storage、BigQuery、または Pub/Sub 内である必要がありますが、これを選択することで、別の Google Cloud プロジェクトのシンクにログを送信できます。シンクのソースとエクスポート先は、同じ Google Cloud 組織内にある必要はありません。

  4. シンクのエクスポート先:

    1. Cloud Storage: エクスポートされたログを受信する特定のバケットを選択または作成します。
    2. Pub/Sub: エクスポートされたログを受信する特定のトピックを選択または作成します。
    3. BigQuery: エクスポートされたログを受信する特定のデータセットを選択または作成します。パーティション分割テーブルを使用することもできます。
    4. 独自のエクスポート先: Cloud Storage、Pub/Sub、または BigQuery の Google Cloud プロジェクトを文字列として追加します。プロジェクト名のフォーマットについては、シンクのプロパティをご覧ください。
  5. [シンクを更新] をクリックして、シンクを作成します。

    シンクの作成の一環として、Logging はシンクの書き込み ID にエクスポート先への書き込み権限を付与しようとします。ログを所有しているプロジェクト以外のプロジェクトのエクスポート先にエクスポートする場合は、新しいエクスポート先の管理者が権限を付与する必要があります。管理者にシンクの書き込み ID を送信してください。この ID は、[ルーター] ページにシンクとともに表示されます。

シンクに一致する新しいログエントリがシンクのエクスポート先にエクスポートされ始めます。BigQuery や Pub/Sub に渡されるログエントリは、すぐにそれらのエクスポート先にストリーミングされます。Cloud Storage へのログエントリは、約 1 時間ごとにまとめて送信されます。詳しくは、エクスポートしたログの使用をご覧ください。

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

ログルーターを使用してシンクを作成する

ログをログバケットまたはカスタムのエクスポート先にルーティングするには、次の手順を実行します。

gcloud

シンクをエクスポート先に作成するには、gcloud alpha logging sinks create コマンドを実行します。

 gcloud alpha logging sinks create SINK_NAME SINK_LOCATION OPTIONAL_FLAGS

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

 gcloud alpha 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"

CONSOLE

シンクをエクスポート先に作成するには、次の手順に従います。

  1. Logging メニューから [ログルーター] を選択します。

    ログルーターに移動

  2. [シンクを作成] をクリックします。

  3. [シンクサービスの選択] パネルで、エクスポート先を選択します。

  4. シンクの [名前] と [説明] を入力します。

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

  6. [シンクの宛先の選択] で、ログを送信するバケットを選択します。

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

  8. バケットにルーティングするログを指定するための包含フィルタを作成します。フィルタを作成する際に、正しいログを含んでいるか確認するため、[ログのプレビュー] をクリックします。

    1 つのバケットにすべてのデータ アクセス ログをルーティングするフィルタを作成できます。このフィルタは次のようになります。

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

  9. 設定が完了したら、[次へ] をクリックします。

  10. 必要に応じて、除外フィルタを作成して、バケットから除外するログを指定できます。

    フィルタの詳細については、除外フィルタの使用一般的なユースケースのフィルタをご覧ください。

  11. 完了したら、[シンクの作成] をクリックします。新しいシンクが [ログ ルーティング シンク] のリストに表示されます。

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

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

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

gcloud

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

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

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

    gcloud alpha 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

CONSOLE

  1. Logging メニューから [ログルーター] を選択します。

    ログルーターに移動

  2. [シンクを作成] をクリックします。

  3. [シンクサービスの選択] ウィンドウで、エクスポート先を選択して [次へ] をクリックします。

  4. [シンクの詳細] セクションで、Sink nameSink description を入力します。

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

  6. [シンクのエクスポート先] フィールドに、宛先プロジェクトのバケットの場所を入力します。

    logging.googleapis.com/projects/[DESTINATION_PROJECT_ID]/locations/global/buckets/[BUCKET_ID]
    
  7. バケットにルーティングするログを指定するための包含フィルタを作成します。フィルタを作成する際に、正しいログを含んでいるか確認するため、[ログのプレビュー] をクリックします。

    1 つのバケットにすべてのデータ アクセス ログをルーティングするフィルタを作成できます。このフィルタは次のようになります。

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

  8. フィルタの作成が完了したら、[次へ] をクリックします。

  9. 省略可: バケットから除外するログエントリを指定します。

    フィルタの詳細については、除外フィルタの使用一般的なユースケースのフィルタをご覧ください。

  10. 完了したら、[シンクの作成] をクリックします。新しいシンクが [ログ ルーティング シンク] のリストに表示されます。

  11. シンク内の writerIdentity フィールドからサービス アカウントを取得します。

    gcloud alpha logging sinks describe SINK_NAME

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

    serviceAccount:p123456789012-12345@gcp-sa-logging.iam.gserviceaccount.com
  12. サービス アカウントに 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

シンクを更新する

ログビューアでシンクを更新する(従来版)

シンクを更新するには、シンクの名前の右側にあるメニュー から [シンクを編集] コマンドを選択します。次のパラメータを変更できます。

  • エクスポート先
  • クエリ

シンクのその他のパラメータを変更するには、projects.sinks.update API メソッドを使用します。

ログルーターでシンクを更新する

次の手順に従って、ログルーターを使用して既存のシンクを編集できます。

  1. Logging メニューから [ログルーター] を選択します。

    ログルーターに移動

  2. 除外フィルタを表示するシンクで、その他アイコン をクリックします。

  3. [シンクを編集] をクリックします。

  4. 必要に応じてシンクを編集します。

  5. 完了したら、[シンクを更新] をクリックします。

シンクを削除する

シンクを削除すると、Cloud Logging から削除され、以降のログがそのエクスポート先にルーティングされなくなります。

ログビューアでシンクを削除する(従来版)

シンクを削除するには、[ルーター] ページでシンクを選択し、ページの上部にある [削除] をクリックします。または、シンクの名前の右側にあるメニュー から [シンクを削除] を選択します。

ログルーターでシンクを削除する

シンクを削除するには、次の手順を行います。

CONSOLE

  1. Logging メニューから [ログルーター] を選択します。

    ログルーターに移動

  2. 削除するシンクのその他アイコン をクリックします。

  3. [シンクを削除] を選択します。

  4. 確認パネルで [削除] をクリックします。

  5. シンクは削除されます。

シンクを無効にする

シンクを無効にすると、以降のログはエクスポート先にルーティングされなくなりますが、Cloud Logging からシンクは削除されません。

ログルーターを使用してシンクを無効にする

シンクを無効にするには、次の手順を行います。

CONSOLE

  1. Logging メニューから [ログルーター] を選択します。

    ログルーターに移動

  2. 無効にするシンクのその他アイコン をクリックします。

  3. [シンクを無効にする] を選択します。

  4. 確認パネルで [無効にする] をクリックします。

  5. シンクの状態が無効に変わります。

シンクを有効にする

シンクを有効にすると、無効なシンクが再起動され、エクスポート先へのルーティングが再開されます。

無効化されたシンクを有効にする

無効化されたシンクを有効にするには、次の手順を行います。

CONSOLE

  1. Logging メニューから [ログルーター] を選択します。

    ログルーターに移動

  2. 有効にするシンクのその他アイコン をクリックします。

  3. [シンクを有効にする] を選択します。

  4. 確認パネルで [有効にする] をクリックします。

  5. シンクの状態が有効に変わります。

エクスポート先の権限

このセクションでは、エクスポートされたログをシンクのエクスポート先に書き込むための 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 は [ルーター] ページのシンクリストに表示されます。
    • Logging API を使用している場合は、LogSink オブジェクトから書き込み ID を取得できます。
    • gcloud logging を使用している場合は、シンクを一覧表示すると書き込み ID が表示されます。
  4. エクスポート先へのオーナー アクセス権がある場合は、次の方法でエクスポート先にサービス アカウントを追加します。

    • Cloud Storage のエクスポート先の場合は、シンクの書き込み ID をバケットに追加し、ストレージのオブジェクト作成者の役割を付与します。
    • BigQuery のエクスポート先の場合は、シンクの書き込み ID をデータセットに追加し、BigQuery データ編集者の役割を付与します。
    • Cloud Pub/Sub の場合は、シンクの書き込み ID をトピックに追加し、Pub/Sub パブリッシャーの役割を付与します。

    これで、権限の付与は完了です。

  5. エクスポート先へのオーナー アクセス権がない場合は、書き込み ID のサービス アカウント名をその権限を持つ人に送信します。送信された担当者は、前のステップの指示に従って、書き込み ID をエクスポート先に追加する必要があります。

承認遅延

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

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

利点と制限事項

Cloud Console には、Logging API を使用する場合に比べて次の利点があります。

  • Cloud Console ではすべてのシンクが 1 か所に表示されます。
  • Cloud Console では、シンクを作成する前にシンククエリによって照合されたログエントリが表示されます。
  • Cloud Console では、シンクのエクスポート先を作成して承認できます。

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

トラブルシューティング

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

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

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

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

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

次のステップ