部署工作,將 Cloud Storage 中的記錄檔匯入 Cloud Logging

本文說明如何部署「將記錄檔從 Cloud Storage 匯入 Cloud Logging」一文所述的參考架構。

這些操作說明適用於工程師和開發人員,包括開發運作、網站穩定性工程師 (SRE) 和安全調查人員,他們想要設定及執行記錄匯入作業。此外,本文也假設您熟悉如何執行 Cloud Run 匯入工作,以及如何使用 Cloud Storage 和 Cloud Logging。

架構

下圖顯示此參考架構中使用的服務: Google Cloud

工作流程圖:從 Cloud Storage 匯入記錄檔至 Cloud Logging。

詳情請參閱「將 Cloud Storage 中的記錄匯入 Cloud Logging」。

目標

  • 建立及設定 Cloud Run 匯入工作
  • 建立服務帳戶來執行作業

費用

在本文件中,您會使用下列 Google Cloud的計費元件:

您可以使用 Pricing Calculator,根據預測用量估算費用。

初次使用 Google Cloud 的使用者可能符合免費試用期資格。

事前準備

  1. 請確認要匯入的記錄先前已匯出至 Cloud Storage,也就是說,這些記錄已整理成預期的匯出格式

  2. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

  3. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

    PROJECT_ID 替換為目的地專案 ID。

  4. 確認您已為 Google Cloud 專案啟用計費功能

  5. 必要的角色

    如要取得部署這項解決方案所需的權限,請要求管理員授予下列 IAM 角色:

    • 如要授予記錄 bucket 的記錄寫入者角色,請在目的地專案中具備「專案 IAM 管理員」 (roles/resourcemanager.projectIamAdmin) 角色。
    • 如要在儲存空間 bucket 中授予 Storage 物件檢視者角色: 儲存空間 bucket 所在的專案中,具有「Storage 管理員」 (roles/storage.admin) 角色
    • 如要建立服務帳戶,請在目的地專案中擁有「建立服務帳戶」 (roles/iam.serviceAccountCreator) 角色。
    • 如要在專案中啟用服務: 目的地專案的服務使用情形管理員 (roles/serviceusage.serviceUsageAdmin)
    • 如要升級記錄檔 bucket 並刪除匯入的記錄,請在目的地專案中具備記錄管理員 (roles/logging.admin) 權限。
    • 如要建立、執行及修改匯入工作,請在目的地專案中點選「Cloud Run Developer」 (roles/run.developer)。

    如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

    您或許也能透過自訂角色或其他預先定義的角色,取得必要權限。

    升級記錄檔 bucket,即可使用 Log Analytics

    建議您使用預設記錄檔 bucket,並升級該 bucket 以使用記錄檔分析工具。不過,在正式環境中,如果預設 bucket 不符合需求,您可以使用自己的記錄檔 bucket。如果您決定使用自己的值區,則必須將擷取的記錄檔傳送至這個記錄檔值區的目標專案。詳情請參閱「設定記錄值區」和「建立接收器」。

    升級 bucket 後,您就能使用 SQL 查詢及分析記錄檔。 升級值區或使用記錄檔分析時,不會產生額外費用。

    如要升級目標專案中的預設記錄檔 bucket,請按照下列步驟操作:

    • 升級預設記錄檔 bucket,即可使用 Log Analytics:

      gcloud logging buckets update BUCKET_ID --location=LOCATION --enable-analytics
      

      更改下列內容:

      • BUCKET_ID:記錄 bucket 的名稱 (例如 _Default)
      • LOCATION:支援的地區 (例如 global)

    建立 Cloud Run 匯入工作

    建立工作時,您可以使用為這個參考架構提供的預先建構容器映像檔。如要修改實作項目來變更 30 天的保留期限,或有其他需求,可以自行建立自訂映像檔

    • 在 Cloud Shell 中,使用設定和環境變數建立工作:

      gcloud run jobs create JOB_NAME \
      --image=IMAGE_URL \
      --region=REGION \
      --tasks=TASKS \
      --max-retries=0 \
      --task-timeout=60m \
      --cpu=CPU \
      --memory=MEMORY \
      --set-env-vars=END_DATE=END_DATE,LOG_ID=LOG_ID,\
      START_DATE=START_DATE,STORAGE_BUCKET_NAME=STORAGE_BUCKET_NAME,\
      PROJECT_ID=PROJECT_ID
      

      更改下列內容:

      • JOB_NAME:工作名稱。
      • IMAGE_URL:容器映像檔的參照;如果使用 GitHub 中的操作說明建構自訂映像檔,請使用 us-docker.pkg.dev/cloud-devrel-public-resources/samples/import-logs-solution 或自訂映像檔的網址。
      • REGION:您要將工作放在哪個區域;為避免產生額外費用,建議將工作區域設為與 Cloud Storage bucket 區域相同,或位於相同多區域。舉例來說,如果值區是美國多重區域,您可以使用 us-central1。詳情請參閱「成本最佳化」。
      • TASKS:作業必須執行的工作數量。 預設值為 1。如果發生逾時,可以增加工作數量。
      • CPU:CPU 限制,可以是 1、2、4、6 或 8 個 CPU。預設值為 2。如果發生逾時情形,您可以增加數量;詳情請參閱「設定 CPU 限制」。
      • MEMORY:記憶體限制。 預設值為 2Gi。如果發生逾時情況,可以增加數量;詳情請參閱「設定記憶體限制」。
      • END_DATE:日期範圍的結束日期,格式為 MM/DD/YYYY。系統會匯入時間戳記早於或等於這個日期的記錄。
      • LOG_ID:要匯入記錄的記錄 ID。記錄 ID 是記錄項目的 logName 欄位的一部分。例如:cloudaudit.googleapis.com
      • START_DATE:日期範圍的開始日期,格式為 MM/DD/YYYY。系統會匯入時間戳記等於或晚於這個日期的記錄。
      • STORAGE_BUCKET_NAME:儲存記錄的 Cloud Storage bucket 名稱 (不含 gs:// 前置字串)。

      max-retries 選項設為零,可防止失敗的工作重試,避免記錄項目重複。

      如果 Cloud Run 工作因逾時而失敗,可能會導致匯入作業不完整。為避免匯入作業因逾時而未完成,請增加 tasks 值,以及 CPU記憶體資源。

    調高這些值可能會增加費用。如要瞭解費用詳情,請參閱「成本最佳化」。

    建立服務帳戶來執行 Cloud Run 工作

    1. 在 Cloud Shell 中建立由使用者管理的服務帳戶:

      gcloud iam service-accounts create SA_NAME
      

      SA_NAME 改為服務帳戶名稱。

    2. 在儲存空間 bucket 上授予「Storage 物件檢視者」角色:

      gcloud storage buckets add-iam-policy-binding gs://STORAGE_BUCKET_NAME \
      --member=serviceAccount:SA_NAME@PROJECT_ID.iam.gserviceaccount.com \
      --role=roles/storage.objectViewer
      

      更改下列內容:

      • STORAGE_BUCKET_NAME:您在匯入作業設定中使用的儲存空間 bucket 名稱。例如:my-bucket
      • PROJECT_ID:目的地專案 ID。
    3. 在記錄 bucket 中授予記錄寫入者角色:

      gcloud projects add-iam-policy-binding PROJECT_ID \
      --member=serviceAccount:SA_NAME@PROJECT_ID.iam.gserviceaccount.com \
      --role=roles/logging.logWriter
      
    4. 設定 Cloud Run 工作的服務帳戶:

      gcloud run jobs update JOB_NAME \
      --region=REGION \
      --service-account SA_NAME@PROJECT_ID.iam.gserviceaccount.com
      

      REGION 替換為部署 Cloud Run 匯入工作的相同區域。

    執行匯入工作

    • 在 Cloud Shell 中執行建立的工作:

      gcloud run jobs execute JOB_NAME \
      --region=REGION
      

    詳情請參閱「執行工作」和「管理工作執行作業」。

    如需重新執行工作,請刪除先前匯入的記錄,以免建立重複項目。詳情請參閱本文稍後的「刪除匯入的記錄」一節。

    查詢匯入的記錄時,查詢結果不會顯示重複項目。 Cloud Logging 會從查詢結果中移除重複項目 (來自相同專案,且插入 ID 和時間戳記相同的記錄項目)。詳情請參閱 Logging API 參考資料中的 insert_id 欄位

    驗證結果

    如要驗證工作是否已順利完成,您可以在 Cloud Shell 中查詢匯入結果:

      gcloud logging read 'log_id("imported_logs") AND timestamp<=END_DATE'
    

    輸出結果會顯示匯入的記錄。如果這個專案在指定時間範圍內執行多個匯入工作,輸出內容也會顯示這些工作匯入的記錄。

    如需更多選項和查詢記錄項目的詳細資料,請參閱 gcloud logging read

    刪除匯入的記錄

    如需多次執行相同工作,請刪除先前匯入的記錄,避免出現重複項目並增加費用。

    • 如要刪除匯入的記錄,請在 Cloud Shell 中執行記錄刪除作業:

      gcloud logging logs delete imported_logs
      

    請注意,刪除匯入的記錄檔會清除所有匯入目標專案的記錄項目,而不只是上次匯入作業的執行結果。

    後續步驟

    貢獻者

    作者:Leonid Yankulin | 開發人員關係工程師

    其他貢獻者: