存取記錄和儲存空間記錄

本文件將說明如何下載及檢閱 Cloud Storage 值區的存取記錄和儲存空間資訊,並使用 Google BigQuery 分析記錄。

簡介

Cloud Storage 提供 CSV 檔案格式的存取記錄和儲存空間記錄,供您下載和查看。每小時建立的存取記錄可提供所有針對特定值區提出要求的相關資訊,每日儲存空間記錄則可提供最近一天內該值區消耗的儲存空間大小資訊。系統會自動將存取記錄和儲存空間記錄建立為新物件,並儲存於您指定的值區。

設定 Cloud Storage 值區來模擬靜態網站行為時,您可能會想記錄網站上資源目前的使用方式。請注意,您也可以為任何 Cloud Storage 值區設定值區存取記錄和儲存空間記錄。

您應該使用存取和儲存空間記錄,還是 Cloud 稽核記錄?

在大多數情況下,Cloud 稽核記錄為產生記錄以追蹤在 Cloud Storage 中執行的 API 作業的建議方法。

  • Cloud 稽核記錄會持續追蹤存取情況。
  • Cloud 稽核記錄產生的記錄更易於使用。
  • Cloud 稽核記錄可以監控許多 Google Cloud Platform 服務,而不只是 Cloud Storage。

不過在某些情況下,您可能要改用存取和儲存空間記錄。

如果是以下情況,使用存取記錄可能比較合適:

如果是以下情況,您可能要考慮使用儲存空間記錄:

  • 想要追蹤儲存在值區中的資料量。請注意,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。您可以使用 gsutil 設定紀錄值區的預設物件 ACL。舉例來說,以下指令可將預設物件 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"
  }
}

如果記錄功能未啟用,則會傳回空的設定:

{
}

下載記錄

儲存空間記錄一天產生一次,內容包含前一天的儲存空間用量;通常會在太平洋標準時間上午 10:00 前建立。

只要受監控的值區中有需要報告的活動,系統將每小時產生一次使用記錄;通常是在每個小時結束後的 15 分鐘內建立。

存取權是由記錄物件的 ACL 來控管。記錄物件具有記錄值區的預設物件 ACL

下載存取記錄和儲存空間記錄最簡單的做法是透過 Google Cloud Platform 主控台或使用 gsutil 工具。系統會採用以下命名慣例將存取記錄儲存為 CSV 格式:

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

舉例來說,以下範例是值區 gs://example-bucket 的存取記錄物件,建立時間為世界標準時間 2013 年 6 月 18 日下午 2:00,儲存位置為值區 gs://example-logs-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

如要下載記錄,請按照下列步驟操作:

主控台

  1. 在 Google Cloud Platform 主控台中開啟 Cloud Storage 瀏覽器。
    開啟 Cloud Storage 瀏覽器
  2. 選取記錄值區。

  3. 按一下相應的記錄物件即可下載或查看記錄。

gsutil

執行下列指令:

gsutil cp <logs_object> <destination_uri>

在 BigQuery 中分析記錄

如要查詢 Cloud Storage 使用情形和儲存空間記錄,使用 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. 將使用情形及儲存空間的結構定義儲存到本機電腦,以供載入指令使用。

    您可在以下位置找到要使用的結構定義: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 資料表。
    • 從執行 bq 指令的同一個目錄位置讀取結構定義資料 (.json 檔案)。
    • 略過每個記錄檔的第一列,因為該列包含資料欄說明。

    以這裡的例子來說,這是您第一次執行載入指令,因此系統會建立 usagestorage 資料表。您可以使用不同的存取記錄檔案名稱或萬用字元,繼續對這些資料表附加後續載入指令。舉例來說,下列指令會將開頭為「bucket_usuage_2014」的所有記錄中的資料附加到 storage 資料表。

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

    使用萬用字元時,您可將已上傳到 BigQuery 的記錄移到另一個目錄 (例如 gs://example-logs-bucket/processed),以免從同一個記錄重複上傳資料。

您也可以透過 BigQuery 瀏覽器工具存取 BigQuery 功能。使用瀏覽器工具時,您可藉由建立資料表的程序來載入資料。

如要進一步瞭解如何從 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 指令會將檔案複製到您的工作目錄中。第二個指令會在記錄檔中循環,並將「filename」新增到說明列 (第一列),並將實際的檔案名稱新增到資料列 (第二列)。以下是修改後的記錄檔範例:

    "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 瀏覽器工具執行下方查詢。

  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 表示 IPV6 位址。
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 字串 使用者在要求中指定的值區。如果這是值區所要求的清單,則可能為空值。
cs_object 字串 使用者在要求中指定的物件。可能為空值。

儲存空間記錄欄位:

欄位 類型 說明
bucket 字串 值區名稱。
storage_byte_hours 整數 值區 24 小時期間的平均大小 (位元組-小時)。如要取得值區的總大小,請將位元組-小時除以 24。
本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Cloud Storage
需要協助嗎?請前往我們的支援網頁