アクセスログとストレージログ

このドキュメントでは、Cloud Storage バケットのアクセスログとストレージログをダウンロードして確認する方法と、Google BigQuery を使ってログを分析する方法について説明します。

はじめに

Cloud Storage では、アクセスログとストレージログを CSV ファイル形式で提供しており、ダウンロードと表示が可能です。アクセスログには、特定のバケットに対して行われたすべてのリクエストの情報が含まれており、います。ストレージログには、前日のバケットのストレージ消費についての情報が含まれ、毎日作成されます。設定されると、アクセスログとストレージログは、指定したバケット内に新しいオブジェクトとして自動的に作成されます。

アクセスログを使用するか、Cloud Audit Log を使用するか

Cloud Storage で実行された API オペレーションを追跡するログを生成するために、Cloud 監査ログを使用することをおすすめします。

  • Cloud 監査ログは、継続的にアクセスを追跡します。
  • Cloud 監査ログは、使いやすいログを生成します。
  • Cloud 監査ログは、Cloud Storage だけでなく、さまざまな Google Cloud Platform サービスをモニタリングできます。

アクセスログのほうが便利な場合もあります。次のような場合にはアクセスログを使用します。

  • 静的ウェブサイトとして構成したバケット内のアセットなど、公開オブジェクトへのアクセスを追跡する。
  • オブジェクトに設定されたアクセス制御リスト(ACL)によりアクセスが排他的に付与されているときに、オブジェクトへのアクセスを追跡する。
  • オブジェクトのライフサイクル管理機能によって加えられた変更を追跡する。
  • 認証によるブラウザでのダウンロードを使用してバケット内のオブジェクトにアクセスする。
  • レイテンシの情報や、個々の HTTP リクエストのリクエスト サイズとレスポンス サイズをログに追加する。

ストレージログを使用するか、Stackdriver を使用するか。

通常、ストレージログを使用するべきではありません。ストレージの使用量を測定するために推奨されるツールは Stackdriver で、ストレージログにはない可視化ツールやストレージの使用量に関連する追加の指標があります。Stackdriver の使用に関する手順ガイドについては、バケットのサイズの確認をご覧ください。

ログ配信の設定

次の手順では、gsutil ツールXML APIJSON API を使って特定のバケットのログ配信を設定する方法について説明します。gsutil ツールがない場合は、Google Cloud SDK パッケージの一部またはスタンドアロン プロダクトとしてダウンロードしてインストールできます。

gsutil

  1. ログを保存するバケットを作成します。

    次のコマンドを使用して、ログを保存するバケットを作成します。

    gsutil mb gs://example-logs-bucket
  2. Cloud Storage にバケットへの WRITE 権限を付与するため、権限を設定します。

    Cloud Storage では、ログを新しいオブジェクトとして作成して保存するために、WRITE 権限が必要です。Cloud Storage にバケットへの WRITE アクセスを許可するために、次のコマンドを使って cloud-storage-analytics@google.com グループに書き込みアクセスを許可します。

    gsutil acl ch -g cloud-storage-analytics@google.com:W gs://example-logs-bucket
  3. ログ オブジェクトには、ログバケットのデフォルト オブジェクト ACL が適用されます。ログバケットのデフォルト オブジェクト ACL を設定するには gsutil を使用します。たとえば、デフォルト オブジェクト ACL を project-private に設定するには、次のコマンドを使用します。

    gsutil defacl set project-private gs://example-logs-bucket
  4. バケットのロギングを有効にします。

    バケットのロギングを有効にするには、logging コマンドを使用します:

    gsutil logging set on -b gs://example-logs-bucket [-o log_object_prefix ] gs://example-bucket

    必要に応じて、ログ オブジェクトに log_object_prefix オブジェクト接頭辞を設定できます。オブジェクト接頭辞は、ログ オブジェクト名の先頭に追加されます。最大文字数は 900 文字で、有効なオブジェクト名であることが必要です。デフォルトでは、オブジェクト接頭辞はログが有効化されているバケットの名前になります。

XML API

  1. ログを保存するバケットを作成します。

    次のリクエストを使用して、ログを保存するバケットを作成します。

    PUT /example-logs-bucket HTTP/1.1
    Host: storage.googleapis.com
    
  2. Cloud Storage にバケットへの WRITE 権限を付与するため、権限を設定します。

    Cloud Storage では、ログを新しいオブジェクトとして作成して保存するために、WRITE 権限が必要です。Cloud Storage にバケットへの WRITE アクセスを許可するために、cloud-storage-analytics@google.com グループに書き込みアクセスを許可する、バケットの ACL エントリを追加します。リクエストには、新しい ACL エントリだけでなく、バケットの既存のすべての ACL エントリを含めるようにしてください。

    PUT /example-logs-bucket?acl HTTP/1.1
    Host: storage.googleapis.com
    
    <AccessControlList>
      <Entries>
        <Entry>
          <Scope type="GroupByEmail">
            <EmailAddress>cloud-storage-analytics@google.com</EmailAddress>
          </Scope>
         <Permission>WRITE</Permission>
        </Entry>
        <!-- include other existing ACL entries here-->
      </Entries>
    </AccessControlList>
    
  3. バケットのロギングを有効にします。

    バケットのロギングを有効にするには、ロギング クエリ パラメータを使用します。

    PUT /example-bucket?logging HTTP/1.1
    Host: storage.googleapis.com
    
    <Logging>
        <LogBucket>example-logs-bucket</LogBucket>
        <LogObjectPrefix>log_object_prefix</LogObjectPrefix>
    </Logging>
    

JSON API

  1. ログを保存するバケットを作成します。

    次のリクエストを使用して、ログを保存するバケットを作成します。

    POST /storage/v1/b?project=project-id
    Host: www.googleapis.com
    
    {
      "name": "example-logs-bucket"
    }
    
  2. Cloud Storage にバケットへの WRITE 権限を付与するため、権限を設定します。

    Cloud Storage では、ログを新しいオブジェクトとして作成して保存するために、WRITE 権限が必要です。Cloud Storage にバケットへの WRITE アクセスを許可するために、cloud-storage-analytics@google.com グループに書き込みアクセスを許可する、バケットの ACL エントリを追加します。そのためには、ログを取得するバケットの BucketAccessControls リソースに対して次のリクエストを使用します。

    POST /storage/v1/b/example-logs-bucket/acl
    Host: www.googleapis.com
    {
     "entity": "group-cloud-storage-analytics@google.com",
     "role": "WRITER"
    }
    
  3. バケットのロギングを有効にします。

    次のリクエストを使ってバケットのロギングを有効にできます。

    PATCH /storage/v1/b/example-bucket
    Host: www.googleapis.com
    
    {
     "logging": {
      "logBucket": "example-logs-bucket",
      "logObjectPrefix": "log_object_prefix"
     }
    }
    

ロギングのステータスを調べる

gsutil

gsutil を使ってロギング状態を調べるには logging get コマンドを使用します。

gsutil logging get gs://example-bucket

また、ロギングの構成をファイルに保存することもできます。

gsutil logging get gs://example-bucket > your_logging_configuration_file

ロギングが有効な場合、サーバーはレスポンスでロギング構成を返します。

{"logBucket": "example-logs-bucket", "logObjectPrefix": "log_object_prefix"}

ロギングが有効でない場合、以下の内容が返されます。

gs://example-bucket/ has no logging configuration.

XML API

Cloud Storage XML API を使って、次の例に示すように、バケットのロギング構成に対する GET Bucket リクエストを送信できます。

GET /example-bucket?logging HTTP/1.1
Host: storage.googleapis.com

ロギングが有効な場合、サーバーはレスポンスで構成を送信します。次のようなレスポンスが返されます。

<?xml version="1.0" ?>
<Logging>
    <LogBucket>
        example-logs-bucket
    </LogBucket>
    <LogObjectPrefix>
        log_object_prefix
    </LogObjectPrefix>
</Logging>

ロギングが有効でない場合、空の構成が返されます。

<?xml version="1.0" ?>
<Logging/>

JSON API

Cloud Storage JSON API を使って、次の例に示すように、バケットのロギング構成に対する GET リクエストを送信できます。

GET /storage/v1/b/example-bucket?fields=logging
Host: www.googleapis.com

ロギングが有効な場合、サーバーはレスポンスで構成を送信します。次のようなレスポンスが返されます。

{
 "logging": {
  "logBucket": "example-logs-bucket",
  "logObjectPrefix": "log_object_prefix"
  }
}

ロギングが有効でない場合、空の構成が返されます。

{
}

ログのダウンロード

ストレージログは、1 日に 1 回作成され、前日のストレージ使用量が格納されます。通常は 10:00 am PST の前に作成されます。

使用状況ログは、モニタリング対象バケットで報告すべき活動がある場合に、1 時間ごとに生成されます。使用状況ログは、通常は時間の終わりから 15 分後に作成されます。

ログへのアクセスはログ オブジェクトの ACL で制御されます。ログ オブジェクトにはログバケットのデフォルト オブジェクト ACL が適用されます。

アクセスログとストレージログをダウンロードする最も簡単な方法は、Google Cloud Platform Console または gsutil ツールを使用することです。アクセスログは CSV 形式であり、その命名規則は次のようになっています。

gs://<bucket_name>/<object_prefix>_usage_<timestamp>_<id>_v0

たとえば、2013 年 6 月 18 日の 14:00 UTC に作成され、バケット gs://example-logs-bucket に保存されている、gs://example-bucket という名前のバケットのアクセスログ オブジェクトの名前は次のようになります。

gs://example-logs-bucket/example-bucket_usage_2013_06_18_14_00_00_1702e6_v0

ストレージログには次の命名規約が適用されます。

gs://<bucket_name>/<object_prefix>_storage_<timestamp>_<id>_v0

たとえば、2013 年 6 月 18 日の同じバケットのストレージログ オブジェクトの名前は次のようになります。

gs://example-logs-bucket/example-bucket_storage_2013_06_18_07_00_00_1702e6_v0

ログをダウンロードするには:

Console

  1. Google Cloud Platform Console で Cloud Storage ブラウザを開きます。
    Cloud Storage ブラウザを開く
  2. ログバケットを選択します。

  3. 該当するログ オブジェクトをクリックして、ログをダウンロードまたは表示します。

gsutil

次のコマンドを実行します。

gsutil cp <logs_object> <destination_uri>

BigQuery でのログの分析

Cloud Storage の使用状況とストレージのログをクエリするには、Google BigQuery を使用できます。Google BigQuery は、追記専用のテーブルに対して SQL と同様のクエリを高速で実施できます。BigQuery コマンドライン ツール(bq)は、Python ベースのツールであり、コマンドラインから BigQuery にアクセスできます。bq のダウンロードと使用については、bq コマンドライン ツールのリファレンス ページをご覧ください。

BigQuery へのログのロード

  1. デフォルト プロジェクトを選択します。

    プロジェクトの選択の詳細については、プロジェクトでの作業をご覧ください。

  2. 新しいデータセットを作成します。

    $ bq mk storageanalysis
    Dataset 'storageanalysis' successfully created.
    
  3. プロジェクト内のデータセットを一覧表示します。

    $ bq ls
     
    datasetId
    -----------------
    storageanalysis
    
  4. load コマンドで使用するために、使用状況とストレージのスキーマをローカルのパソコンに保存します。

    使用するスキーマは、cloud_storage_usage_schema_v0cloud_storage_storage_schema_v0 にあります。スキーマは、アクセスログとストレージログの形式でも説明されています。

  5. アクセスログをデータセットに読み込みます。

    $ bq load --skip_leading_rows=1 storageanalysis.usage \
          gs://example-logs-bucket/example-bucket_usage_2014_01_15_14_00_00_1702e6_v0 \
          ./cloud_storage_usage_schema_v0.json
    $ bq load --skip_leading_rows=1 storageanalysis.storage \
          gs://example-logs-bucket/example-bucket_storage_2014_01_05_14_00_00_091c5f_v0 \
          ./cloud_storage_storage_schema_v0.json
    

    これらのコマンドは以下のことを行います。

    • 使用状況とストレージのログをバケット example-logs-bucket から読み込みます。
    • データセット storageanalysis 内にテーブル usagestorage を作成します。
    • スキーマデータ(.json ファイル)を、bq コマンドを実行したのと同じディレクトリから読み込みます。
    • 各ログファイルの最初の行には、列の説明が含まれているため、スキップします。

    ここに示す例では load コマンドを初めて実行したため、テーブル usagestorage が作成されました。さらに load コマンドと異なるアクセスログ ファイル名かワイルドカードを使って、これらのテーブルへの追加を続けることもできます。たとえば、次のコマンドは、「bucket_usuage_2014」で始まるすべてのログのデータを storage テーブルに追加します。

    $ bq load --skip_leading_rows=1 storageanalysis.usage \
          gs://example-logs-bucket/bucket_usage_2014* \
          ./cloud_storage_usage_schema.json
    

    ワイルドカードを使う場合は、BiqQuery にアップロード済みのログを別のディレクトリ(gs://example-logs-bucket/processed など)に移動して、1 つのログから何度もデータをアップロードするのを避けてください。

BiqQuery の機能には、BigQuery Browser Tool からもアクセスできます。ブラウザツールを使用すると、テーブル作成手順を通じてデータを読み込めます。

プログラムによるデータの読み込みなど、Cloud Storage からのデータの読み込みの詳細は、Cloud Storage からのデータの読み込みをご覧ください。

アクセスログ スキーマの変更

場合によっては、BigQuery に読み込む前にアクセスログを前処理すると便利なことがあります。たとえば、アクセスログに情報を追加して、BigQuery でのクエリ分析を容易にすることが可能です。ここでは、各ストレージ アクセスログのファイル名をログに追加する方法を示します。これには、既存のスキーマと各ログファイルを変更する必要があります。

  1. 以下に示すように、既存のスキーマ cloud_storage_storage_schema_v0 を変更してファイル名を追加します。新しいスキーマに cloud_storage_storage_schema_custom.json のように新しい名前を付けて、元のスキーマと区別します。

    [  {"name": "bucket", "type": "string", "mode": "REQUIRED"},
    {"name": "storage_byte_hours","type": "integer","mode": "REQUIRED"},
    {"name": "filename","type": "string","mode": "REQUIRED"}
    ]
    
  2. BigQuery に読み込む前に、新しいスキーマに基づいてストレージ アクセスログ ファイルを前処理します。

    たとえば、Linux、macOS または Windows(Cygwin)環境で次のコマンドを使用できます。

    gsutil cp gs://example-logs-bucket/example-bucket_storage\* .
    for f in example-bucket_storage\*; do sed -i -e "1s/$/,\"filename\"/" -e "2s/$/,\""$f"\"/" $f; done
    

    gsutil コマンドは、作業ディレクトリにファイルをコピーします。2 番目のコマンドは、ログファイルを繰り返し処理して、説明の行(最初の行)に「filename」を追加し、データ行(2 番目の行)に実際のファイル名を追加します。変更後のログファイルの例を示します。

    "bucket","storage_byte_hours","filename"
    "example-bucket","5532482018","example-bucket_storage_2014_01_05_08_00_00_021fd_v0"
    
  3. ストレージ アクセスログを BigQuery に読み込むときには、ローカルに変更したログファイルを読み込み、カスタマイズしたスキーマを使用します。

    for f in example-bucket_storage\*; \
    do ./bq.py load --skip_leading_rows=1 storageanalysis.storage $f ./cloud_storage_storage_schema_custom.json; done
    

BigQuery でのログのクエリ

ログを BigQuery に読み込んだら、アクセスログに対してクエリを実行して、記録されたバケットに関する情報を返すことができます。次の例は、バケットの数日間にわたるアクセスログがあり、BigQuery へのアクセスログの読み込みに示すようにログを読み込んだ場合に、bq ツールを使用する方法を示しています。BigQuery Browser Tool を使って以下のクエリを実行することもできます。

  1. bq ツールで、対話型モードを開始します。

    $ bq shell
    
  2. ストレージログ テーブルに対してクエリを実行します。

    たとえば、次のクエリは、ログに記録されたバケットの保存容量が時間とともにどのように変化するかを示します。ここでは、アクセスログのスキーマの変更で説明している手順に従ってストレージ アクセスログを変更し、ログファイルに「logstorage*」という名前を付けたと想定しています。

    project-name>SELECT SUBSTRING(filename, 13, 10) as day, storage_byte_hours/24 as size FROM [storageanalysis.storage] ORDER BY filename LIMIT 100
    

    クエリからの出力例:

    Waiting on bqjob_r36fbf5c164a966e8_0000014379bc199c_1 ... (0s) Current status: DONE
    +------------+----------------------+
    |    day     |         size         |
    +------------+----------------------+
    | 2014_01_05 | 2.3052008408333334E8 |
    | 2014_01_06 | 2.3012297245833334E8 |
    | 2014_01_07 | 3.3477797120833334E8 |
    | 2014_01_08 | 4.4183686058333334E8 |
    +-----------------------------------+
    

    スキーマを変更せず、デフォルトのスキーマを使っている場合は、次のクエリを実行できます。

    project-name>SELECT storage_byte_hours FROM [storageanalysis.storage] LIMIT 100
    
  3. 使用状況ログテーブルに対してクエリを実行します。

    たとえば、次のクエリは、ログに記録されたバケット内のリソースにアクセスするためにクライアントが使用するリクエスト メソッドを要約する方法を示しています。

    project-name>SELECT cs_method, COUNT(\*) AS count FROM [storageanalysis.usage] GROUP BY cs_method
    

    クエリからの出力例:

    Waiting on bqjob_r1a6b4596bd9c29fb_000001437d6f8a52_1 ... (0s) Current status: DONE
    +-----------+-------+
    | cs_method | count |
    +-----------+-------+
    | PUT       |  8002 |
    | GET       | 12631 |
    | POST      |  2737 |
    | HEAD      |  2173 |
    | DELETE    |  7290 |
    +-----------+-------+
    
  4. bq ツールの対話型シェルを終了します。

    project-name> quit
    

ロギングを無効にする

gsutil

gsutil の logging コマンドを使ってロギングを無効にします。

gsutil logging set off gs://example-bucket

このロギングが正常に無効になったことを調べるには、logging get リクエストを実行します:

gsutil logging get gs://example-bucket

ロギングが無効になっている場合は、次の内容が返されます。

gs://example-bucket/ has no logging configuration.

XML API

Cloud Storage XML API を使い、次の例に示すように PUT リクエストをバケットのロギング構成に送信することでロギングを無効にします。

PUT /example-bucket?logging HTTP/1.1
Host: storage.googleapis.com

<Logging/>

JSON API

Cloud Storage JSON API を使い、次の例に示すように PATCH リクエストをバケットのロギング構成に送信することでロギングを無効にします。

PATCH /example-bucket?logging HTTP/1.1
Host: storage.googleapis.com

{
 "logging": null
}

アクセスログとストレージログの形式

アクセスログとストレージログでは、膨大な量の情報が提供される可能性があります。次の表を使用すれば、これらのログで提供されるすべての情報を識別できます。

アクセスログのフィールド:

フィールド 説明
time_micros 整数 リクエストが完了した時刻を表す、UNIX エポックからの経過時間(マイクロ秒単位)。
c_ip 文字列 リクエストの発信元の IP アドレス。接頭辞「c」はこれがクライアントに関する情報であることを示します。
c_ip_type 整数 c_ip フィールドの IP の種類:
  • 1 は IPV4 アドレスを示します。
  • 2 は IPV4 アドレスを示します。
c_ip_region 文字列 将来の使用のために予約。
cs_method 文字列 このリクエストの HTTP メソッド。接頭辞「cs」はこの情報がクライアントからサーバーへ送信されたことを示します。
cs_uri 文字列 リクエストの URI。
sc_status 整数 サーバーがレスポンスで送信した HTTP ステータス コード。接頭辞「sc」はこの情報がサーバーからクライアントへ送信されたことを示します。
cs_bytes 整数 リクエストで送信されたバイト数。
sc_bytes 整数 レスポンスで送信されたバイト数。
time_taken_micros 整数 リクエストの処理にかかった時間(マイクロ秒単位)。最初のバイトを受信してからレスポンスを送信するまでの時間が測定されます。再開可能なアップロードの場合、終了点は、再開可能なアップロードの一部であった最終アップロード リクエストに対するレスポンスによって決定されるので注意してください。
cs_host 文字列 オリジナルのリクエストのホスト。
cs_referer 文字列 リクエストの HTTP リファラー
cs_user_agent 文字列 リクエストのユーザー エージェントライフサイクル管理で発行されたリクエストでは、値は GCS Lifecycle Management になります。
s_request_id 文字列 リクエストの識別子。
cs_operation 文字列 Cloud Storage のオペレーション(例: GET_Object)。
cs_bucket 文字列 リクエストで指定されたバケット。これがバケットの一覧表示リクエストの場合は、null になることがあります。
cs_object 文字列 このリクエストで指定されたオブジェクト。これはヌルになることがあります。

ストレージログのフィールド:

フィールド 説明
bucket 文字列 バケットの名前です。
storage_byte_hours 整数 バケットの 24 時間の平均サイズ(バイト時間単位)。バケットの合計サイズを取得するには、バイト時間を 24 で割ります。
このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。