您可以將儲存在 Cloud Logging 記錄檔 bucket 中的記錄項目複製到 Cloud Storage bucket,以支援安全稽核、執行自訂資料分析,或封存過往的記錄項目。複製作業不會造成資料遺失;記錄項目會保留在來源記錄檔 bucket 中,而且您可以跨不同 Google Cloud 專案複製。
使用 gcloud CLI 複製作業,即可追溯複製現有的記錄項目。相較之下,接收器會在相符的記錄項目抵達時,自動即時轉送這些項目,但無法轉送接收器建立前儲存的記錄項目。
限制
複製記錄項目時,請注意下列限制:
您只能將記錄項目複製到 Cloud Storage bucket,無法複製到其他目的地。
您無法從已設定客戶自行管理的加密金鑰 (CMEK) 的記錄 bucket 複製記錄項目。
事前準備
開始複製記錄項目之前,請先完成下列步驟:
- 確認您使用的是最新版 gcloud CLI。如需安裝或更新 gcloud CLI 的操作說明,請參閱「管理 Google Cloud CLI 元件」。
-
如要取得複製記錄檔項目所需的權限,請要求管理員在包含您要複製來源記錄檔 bucket 的專案中,授予下列 IAM 角色:
-
如要執行複製作業:
Logging 管理員 (
roles/logging.admin) -
如要查看及管理複製作業的狀態,請執行下列操作:
記錄檔設定寫入者 (
roles/logging.configWriter)
-
如要執行複製作業:
Logging 管理員 (
-
如要取得將記錄檔項目寫入 Cloud Storage 的權限,請要求管理員在包含 Cloud Storage bucket 的專案中,授予您「Storage 物件建立者 」(
roles/storage.objectCreator) IAM 角色。
複製記錄項目
記錄功能只會複製複製作業開始時儲存在記錄檔 bucket 中的記錄項目。如果記錄項目是在複製作業開始後儲存到記錄 bucket,就不會複製到 Cloud Storage。
如要將記錄檔項目複製到 Cloud Storage,您必須知道下列資訊:
- 要複製的記錄檔 bucket ID 和位置。如要擷取記錄檔 bucket ID 和位置,請使用 gcloud CLI 指令
gcloud logging buckets list。 - 要複製到的 Cloud Storage bucket 名稱。如要瞭解如何擷取 Cloud Storage bucket 名稱,請參閱「取得 Cloud Storage bucket 資訊」。
- 您要複製的記錄項目篩選器。
如要複製記錄項目,請執行 gcloud logging copy 指令:
gcloud logging copy LOG_BUCKET_ID storage.googleapis.com/CLOUD_STORAGE_BUCKET_NAME \
--location=LOCATION --log-filter='FILTER' --project=PROJECT_ID
執行上一個指令前,請先完成下列步驟:
- 將 LOG_BUCKET_ID 替換為記錄檔 bucket 的名稱。
- 將 CLOUD_STORAGE_BUCKET_NAME 替換為 Cloud Storage bucket 名稱。
- 將 LOCATION 替換為記錄檔 bucket 的位置。
(選用):將 FILTER 替換為篩選器,定義要複製的記錄項目。
如果省略
--log-filter旗標,系統會將記錄檔 bucket 中的所有記錄項目複製到 Cloud Storage bucket。將 PROJECT_ID 替換為 Google Cloud 專案 ID。如果有效 gcloud CLI 設定已設為正確的 Google Cloud 專案,可以省略這個標記。
指令範例:
gcloud logging copy my-log-bucket storage.googleapis.com/my-gcs-bucket \
--location=global --log-filter='timestamp > "2024-07-18T10:00:00.0Z"' \
--project=my-project
這個指令會建立長時間執行的作業,在背景執行,並傳回複製作業的名稱和記錄檔 bucket 的位置:
name: projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID
複製作業的位置與您要複製的記錄值區位置相同。
查看及管理複製作業
您可以使用 gcloud logging operations 指令查看及管理複製作業,包括列出、查看及取消作業。
執行下列指令時,您必須指定作業位置。 使用記錄檔 bucket 的位置。如要瞭解如何找出記錄檔 bucket 的位置,請參閱「查看 bucket 的詳細資料」。
列出複製作業
您可以列出近期複製作業,包括已排定、執行中、已完成、失敗和已取消的作業。結果中最多會顯示結束時間後 30 天內的近期複製作業。
如要列出複製作業,請執行下列指令:
gcloud logging operations list --location=LOCATION \
--operation-filter=request_type=CopyLogEntries \
--project=PROJECT_ID
執行上一個指令前,請先完成下列步驟:
- 將 LOCATION 替換為要從中複製的記錄檔 bucket 位置。
- 將 PROJECT_ID 替換為 Google Cloud 專案 ID。
這個指令會傳回長時間執行的作業的相關資訊,包括作業 ID:
projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID
查看複製作業的狀態
您可以擷取複製作業的狀態和其他中繼資料, 包括:
startTime:表示作業建立時間的時間戳記。endTime:表示作業完成的時間戳記。state:作業狀態 (已排定、執行中、已取消、失敗或成功)。cancellation:使用者是否要求取消作業。progress:作業的預估進度 (0 到 100%)。destination:作業要將記錄檔項目複製到的 Cloud Storage bucket 名稱。filter:篩選器,用於指定要複製的記錄項目。name:作業從中複製記錄項目的記錄檔 bucket 名稱。logEntriesCopiedCount:作業成功複製到 Cloud Storage bucket 的記錄項目數量。
請注意,並非所有列出的中繼資料欄位都適用於每個複製作業。
舉例來說,如果複製作業仍在執行中,endTime 中繼資料就不會套用至該作業。舉例來說,如果執行 gcloud logging copy 指令時未使用 --log-filter=FILTER 旗標,則 filter 中繼資料不會套用至作業。
如要擷取複製作業的相關資訊,請執行下列指令:
gcloud logging operations describe OPERATION_ID \
--location=LOCATION --project=PROJECT_ID
執行上一個指令前,請先完成下列步驟:
- 將 OPERATION_ID 替換為作業 ID。
- 將 LOCATION 替換為要從中複製的記錄檔 bucket 位置。
- 將 PROJECT_ID 替換為 Google Cloud 專案 ID。
這項指令會傳回複製作業的中繼資料。舉例來說,以下是進行中作業的輸出內容:
done: false
metadata:
`@type`: type.googleapis.com/google.logging.v2.CopyLogEntriesMetadata
progress: 75
destination: storage.googleapis.com/CLOUD_STORAGE_BUCKET_NAME
source: projects/PROJECT_ID/locations/LOCATION/buckets/LOG_BUCKET_ID
verb: copy
startTime: `2024-05-23T10:52:40.039751Z`
state: OPERATION_STATE_RUNNING
name: projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID
取消複製作業
你可以取消進行中的複製作業。如果取消複製作業,作業取消前複製的所有記錄檔項目仍會保留在 Cloud Storage 值區中。
取消複製作業後,Logging 會先完成所有進行中的程序,再完成取消作業。因此取消作業後,系統可能仍會將部分記錄項目複製到 Cloud Storage。
如要取消複製作業,請執行下列指令:
gcloud logging operations cancel OPERATION_ID \
--location=LOCATION --project=PROJECT_ID
執行上一個指令前,請先完成下列步驟:
- 將 OPERATION_ID 替換為作業 ID。
- 將 LOCATION 替換為要從中複製的記錄檔 bucket 位置。
- 將 PROJECT_ID 替換為 Google Cloud 專案 ID。
在 Cloud Storage 中查看記錄項目
如要瞭解如何查看及解讀複製到 Cloud Storage 的記錄項目,請參閱「查看已路由至 Cloud Storage 的記錄項目」。
配額與限制
無論複製的資料量多寡,所有複製作業至少都需要一小時才能完成。
如要複製大量資料 (例如數 PB),請使用 --log-filter 旗標中的 timestamp 欄位,將複製作業分割成多個複製作業。
複製指令無法複製保留期限已過的記錄項目。
疑難排解
本節說明如何排解複製記錄項目時發生的錯誤。
無法寫入匯出資料
使用 gcloud logging operations describe 查看複製作業狀態時,作業可能會顯示下列錯誤:
done: true
error:
code: 7
message: Failed to write export data to the destination Cloud Storage bucket.
如果 Logging 無法在目的地 Cloud Storage 值區中寫入或完成記錄檔,就會發生這項錯誤。作業期間寫入匯出檔案可能會失敗,原因如下:
- VPC Service Controls 服務範圍會封鎖對目的地 Cloud Storage bucket 的要求。
- 啟動複製作業的帳戶 IAM 權限在作業執行期間遭到修改或撤銷。
- 複製作業執行時間過長,授權憑證已過期。
- 目的地 Cloud Storage 值區使用 CMEK,且 Cloud Key Management Service 金鑰已停用,或 Cloud Storage 服務代理沒有加密權限。
- 寫入重試會嘗試覆寫無法取代的現有檔案。 舉例來說,如果匯出批次作業在暫時延遲後重試,或是複製作業重新啟動,重試作業可能會嘗試覆寫已建立的檔案。如果該檔案受到有效物件保留或鎖定保留政策保護,Cloud Storage 會拒絕覆寫。
- 目的地 bucket 已刪除、進入鎖定狀態,或是專案超出資源配額。
如要解決這個問題,請按照下列步驟操作:
檢查 VPC Service Controls:如果貴機構使用 VPC Service Controls,請檢查 Cloud 稽核記錄,瞭解是否有 perimeter 拒絕存取 (
cloudaudit.googleapis.com/data_access)。目的地 Cloud Storage bucket 的 perimeter 必須允許執行複製作業的專案存取,或設定輸入和輸出規則。確認目的地 bucket 的 IAM 角色:發起複製作業的帳戶必須在目的地 bucket 中具備Storage 物件建立者 (
roles/storage.objectCreator) 角色。驗證客戶自行管理的加密金鑰 (CMEK):如果目的地 bucket 使用 CMEK 做為預設加密方式,請確認 Cloud KMS 金鑰已啟用,且 Cloud Storage 服務代理程式具備金鑰的「Cloud KMS CryptoKey Encrypter/Decrypter」(
roles/cloudkms.cryptoKeyEncrypterDecrypter) 角色。將大型複製作業分成較短的時間間隔:為避免複製大量記錄項目時發生逾時或憑證過期問題,請將作業分成較小的批次。如要將記錄項目分割成批次,請使用
--log-filter旗標中的timestamp欄位。確認沒有物件保留設定或保留衝突:確認目的地 bucket 在目標目的地路徑中,沒有受有效物件保留設定或已鎖定保留政策保護的物件。
定價
如要瞭解定價資訊,請參閱「Google Cloud Observability 定價」頁面。如果將記錄資料傳送至其他 Google Cloud 服務,請參閱下列文件: