Cloud Logging 中的匯總接收器可讓您合併資料夾或機構中所有資源的記錄項目,並將這些項目轉送至中央目的地。您可以將匯總接收器設為攔截或非攔截、定義篩選器來控管要轉送的記錄項目,以及授予接收器寫入目的地的權限。
限制
設定匯總接收器時,請注意下列限制:
目的地路徑只能包含全域服務端點,例如
pubsub.googleapis.com。您無法加入區域服務端點 (REP),例如pubsub.LOCATION.rep.googleapis.com。如需支援的目的地路徑清單,請參閱「目的地路徑格式」。不支援將記錄資料轉送至傳輸中限制的 Pub/Sub 主題。如果您將記錄檔接收器設定為具有傳輸中限制的 Pub/Sub 主題,可能會看到
topic_region_not_allowed設定錯誤和捨棄的記錄檔。
如要將記錄項目轉送至受 service perimeter 保護的資源,您必須在 perimeter 新增輸入規則,允許從接收器的服務帳戶存取:
如果您使用匯總記錄檔接收器,將記錄項目轉送至 perimeter 內的 Cloud Storage bucket,請在輸入規則中使用
ANY_IDENTITY做為身分類型。這個目的地無法使用ANY_SERVICE_ACCOUNT或ANY_USER_ACCOUNT做為識別資訊類型。您不需要為非匯總接收器設定輸入規則。
事前準備
建立接收器前,請確認下列事項:
您熟悉匯總接收器的行為。詳情請參閱「匯總接收器總覽」。
您有 Google Cloud 資料夾或機構,且其中包含可在 Logs Explorer 中查看的記錄項目。
您在Google Cloud 機構或資料夾中具備下列任一 Identity and Access Management 角色,可從中將記錄項目路由傳送出去:
- 擁有者 (
roles/owner) - 記錄管理員 (
roles/logging.admin) - 記錄檔設定寫入者 (
roles/logging.configWriter)
這些角色包含的權限可讓您建立、刪除或修改接收器。如要瞭解如何設定 IAM 角色,請參閱 Logging 存取控管指南。
- 擁有者 (
匯總接收器的目的地存在,或您有權建立目的地。目的地可以位於任何 Google Cloud 專案和任何機構。如需支援的目的地清單和限制,請參閱「支援的目的地」。
選取要使用的介面:
控制台
使用 Google Cloud 控制台存取 Google Cloud 服務和 API 時,您不需要設定驗證機制。
gcloud
在 Google Cloud 控制台啟用 Cloud Shell。
Google Cloud 控制台底部會開啟 Cloud Shell 工作階段,並顯示指令列提示。Cloud Shell 是已安裝 Google Cloud CLI 的殼層環境,並已設定適用於您目前專案的值。工作階段可能要幾秒鐘的時間才能初始化。
REST
如要在本機開發環境中使用本頁的 REST API 範例,請使用您提供給 gcloud CLI 的憑證。
安裝 Google Cloud CLI。
若您採用的是外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。
詳情請參閱 Google Cloud 驗證說明文件中的「使用 REST 進行驗證」一節。
建立匯總接收器
如要設定匯總接收器,請建立接收器,然後授予接收器寫入目的地的權限。本節說明如何建立匯總接收器。如要瞭解如何授予接收器權限,請參閱「設定目的地權限」。
每個資料夾或機構最多可建立 200 個接收器。
控制台
如要為資料夾或組織建立匯總接收器,請按照下列步驟操作:
-
前往 Google Cloud 控制台的「Log Router」(記錄檔路由器) 頁面:
如果您是使用搜尋列尋找這個頁面,請選取子標題為「Logging」的結果。
選取現有的資料夾或機構。
選取「建立接收器」。
在「Sink details」(接收器詳細資料) 面板中,輸入下列詳細資料:
接收器名稱:提供接收器的 ID。建立接收器後,您無法重新命名,但可以刪除並建立新的接收器。
「Sink description」(接收器說明) (選填):說明接收器的用途或用途。
在「Select sink service」(選取接收器服務) 選單中,選取目的地類型,然後完成對話方塊來指定目的地。您可以選取現有目的地,也可以建立目的地。
如果是攔截接收器,請選取「Google Cloud 專案」,然後輸入目的地Google Cloud 專案的完整名稱:
logging.googleapis.com/projects/DESTINATION_PROJECT_ID如果是非攔截接收器,請選取目的地,然後輸入目的地的完整名稱。支援的目的地如下:
Google Cloud 專案
logging.googleapis.com/projects/DESTINATION_PROJECT_IDLogging bucket
logging.googleapis.com/projects/DESTINATION_PROJECT_ID/locations/LOCATION/buckets/BUCKET_NAME
BigQuery 資料集
輸入已啟用寫入功能的資料集名稱。請勿輸入連結的 BigQuery 資料集名稱,因為這些資料集為唯讀。您可以使用分區資料表。
bigquery.googleapis.com/projects/DESTINATION_PROJECT_ID/datasets/DATASET_ID
Cloud Storage bucket
storage.googleapis.com/BUCKET_NAME
Pub/Sub 主題
請勿輸入強制執行傳輸中限制的 Pub/Sub 主題名稱。
pubsub.googleapis.com/projects/DESTINATION_PROJECT_ID/topics/TOPIC_ID
在「Choose logs to include in sink」(選擇要納入接收器的記錄檔) 面板中,選取要納入接收器的資源。
如果是攔截接收器,請選取「攔截這個機構和所有子資源擷取的記錄」。
如果是非攔截接收器,請選取「Include logs ingested by this resource and all child resources」(收錄這項資源和所有子資源擷取的記錄檔)。
在「Build inclusion filter」(建立「包含」篩選器) 欄位中,輸入篩選運算式,比對要納入的記錄項目。如未設定篩選器,所選資源的所有記錄項目都會轉送至目的地。
舉例來說,您可以建立篩選器,將所有資料存取稽核記錄轉送至單一 Logging bucket。這個篩選器看起來像這樣:
LOG_ID("cloudaudit.googleapis.com/data_access") OR LOG_ID("externalaudit.googleapis.com/data_access")如需範例,請參閱「匯總接收器的篩選器」。
請注意,篩選器長度不得超過 20,000 個字元。
選用:如要確認輸入的篩選條件正確無誤,請選取「預覽記錄」。系統會在新分頁中開啟 Logs Explorer,並預先填入篩選器。
選用:在「Choose logs to exclude from the sink」(選擇要從接收器排除的記錄檔) 面板中,執行下列操作:
在「Exclusion filter name」(排除篩選器名稱) 欄位中輸入名稱。
在「Build an exclusion filter」(建立排除篩選器) 欄位中,輸入與要排除的記錄項目相符的篩選運算式。您也可以使用
sample函式,選取要排除的部分記錄項目。舉例來說,如要排除特定專案的記錄項目,不轉送至目的地,請新增下列排除篩選器:
logName:projects/PROJECT_ID
如要排除多個專案的記錄項目,請使用邏輯 OR 運算子來聯結
logName子句。
每個接收器最多可建立 50 個排除篩選器。請注意,篩選器的長度不得超過 20,000 個半形字元。
選取「建立接收器」。
如要完成匯總接收器的設定,請將權限授予接收器的服務帳戶,以便將記錄項目寫入接收器的目的地。詳情請參閱「設定目的地權限」。
gcloud
如要建立匯總接收器,請使用 logging sinks create 指令:
如要建立接收器,請執行
gcloud logging sinks create指令,並加入--include-children旗標。使用下列指令前,請先替換以下項目:
- SINK_NAME:記錄檔接收器的名稱。水槽名稱一經建立即無法變更。
- SINK_DESTINATION:要轉送記錄項目的服務或專案。如要瞭解這些目的地的格式,請參閱「目的地路徑格式」。
- INCLUSION_FILTER:接收器的「包含」篩選器。如需範例,請參閱「匯總接收器的篩選器」。
- FOLDER_ID:資料夾 ID。如要在組織層級建立接收器,請將
--folder=FOLDER_ID替換為--organization=ORGANIZATION_ID。
請執行
gcloud logging sinks create指令。gcloud logging sinks create SINK_NAME \ SINK_DESTINATION --include-children \ --folder=FOLDER_ID --log-filter="INCLUSION_FILTER"
如要建立攔截接收器,請一併加入
--intercept-children旗標。舉例來說,如果您要建立目的地為 Pub/Sub 主題的資料夾層級匯總接收器,指令可能如下所示:
gcloud logging sinks create SINK_NAME \ pubsub.googleapis.com/projects/PROJECT_ID/topics/TOPIC_ID --include-children \ --folder=FOLDER_ID --log-filter="logName:activity"
授予接收器服務帳戶寫入接收器目的地的權限。詳情請參閱「設定目的地權限」。
REST
如要建立匯總接收器,請使用 organizations.sinks.create 或 folders.sinks.create Logging API 方法。準備方法引數,如下所示:
將
parent欄位設為要建立接收器的 Google Cloud 機構或資料夾。父項必須是下列其中一項:organizations/ORGANIZATION_IDfolders/FOLDER_ID
在方法要求主體的
LogSink物件中,執行下列其中一項操作:將
includeChildren設為true。如要建立攔截接收器,請將
interceptChildren欄位設為true。
設定
filter欄位,以比對要納入的記錄項目。如需範例,請參閱「匯總接收器的篩選器」。
篩選器長度不得超過 20,000 個字元。
其餘
LogSink欄位的設定方式與任何接收器相同。 詳情請參閱「將記錄檔轉送至支援的目的地」。呼叫
organizations.sinks.create或folders.sinks.create建立接收器。授予接收器服務帳戶寫入接收器目的地的權限。詳情請參閱「設定目的地權限」。
對接收器所做的任何變更,可能需要幾分鐘才會生效。
設定目的地權限
本節說明如何將必要的 IAM 權限授予記錄檔接收器的寫入者身分,讓接收器能將記錄項目寫入接收器的目的地。寫入者身分是與接收器相關聯的服務帳戶 ID,包含電子郵件地址,用於識別必須具備目的地資料寫入權限的主體。
如果記錄檔接收器將記錄項目轉送至同一專案中的記錄檔 bucket,您就不需要設定目的地權限。這項設定不需要服務帳戶。對於所有其他設定,Logging 會自動建立及管理記錄檔接收器的服務帳戶,您必須設定目的地權限:
- 自 2023 年 5 月 22 日起,Logging 會針對基礎資源中的所有接收器使用相同的服務帳戶。資源可以是Google Cloud 專案、機構、資料夾或帳單帳戶。
- 在 2023 年 5 月 22 日前,Logging 會為每個接收器建立服務帳戶。
如果接收器的目的地受到 VPC Service Controls service perimeter 保護,則必須在目的地 perimeter 新增輸入規則,允許接收器的寫入者身分存取。詳情請參閱「限制」一節。
如要設定接收器的權限,以便將訊息轉送至目的地,請按照下列步驟操作:
控制台
如要取得接收器服務帳戶的相關資訊,請按照下列步驟操作:
-
前往 Google Cloud 控制台的「Log Router」(記錄檔路由器) 頁面:
如果您是使用搜尋列尋找這個頁面,請選取子標題為「Logging」的結果。
選取「選單」圖示 more_vert,然後選取「查看接收器詳細資料」。寫入者身分會顯示在「Sink details」(接收器詳細資料) 面板中。
如果
writerIdentity欄位的值包含電子郵件地址,請繼續下一個步驟。如果值為None,則不需要設定目的地權限。將接收器的寫入者身分複製到剪貼簿。寫入者身分可能會因接收器所屬的資源而異,但一律會以
serviceAccount:開頭。以下是寫手身分識別資訊的範例:serviceAccount:service-123456789012@gcp-sa-logging.iam.gserviceaccount.com
-
將記錄資料寫入目的地的權限授予接收器寫入者身分指定的主體:
-
前往 Google Cloud 控制台的「IAM」頁面:
如果您是使用搜尋列尋找這個頁面,請選取子標題為「IAM & Admin」(IAM 與管理) 的結果。
在 Google Cloud 控制台的工具列中,選取儲存匯總接收器目的地的專案。如果目的地是專案,請選取該專案。
按一下「Grant access」(授予存取權)。
輸入接收器寫入者身分指定的主體,然後授予 IAM 角色:
- 針對所有目的地,授予記錄寫入者角色 (
roles/logging.logWriter)。具體來說,主體需要logging.logEntries.route權限。 - 根據目的地授予下列其中一個角色:
- 記錄檔 bucket:授予記錄檔 bucket 寫入者角色 (
roles/logging.bucketWriter)。 - Cloud Storage bucket:授予 Storage 物件建立者角色 (
roles/storage.objectCreator)。 - BigQuery 資料集:授予「BigQuery 資料編輯者」角色 (
roles/bigquery.dataEditor)。 - Pub/Sub 主題 (包括 Splunk):授予 Pub/Sub 發布者角色 (
roles/pubsub.publisher)。
- 記錄檔 bucket:授予記錄檔 bucket 寫入者角色 (
- 針對所有目的地,授予記錄寫入者角色 (
-
gcloud
確認您對包含目的地的Google Cloud 專案具備擁有者存取權。如果沒有接收器目的地的「擁有者」存取權,請要求專案擁有者將寫入者身分新增為主體。
如要取得接收器服務帳戶的相關資訊,請執行
gcloud logging sinks describe指令。使用下列指令前,請先完成下列替換:
- SINK_NAME:記錄檔接收器的名稱。接收器建立後即無法變更名稱。
請執行
gcloud logging sinks describe指令。gcloud logging sinks describe SINK_NAME如果接收器詳細資料包含標示為
writerIdentity的欄位,請繼續進行下一個步驟。如果詳細資料不含writerIdentity欄位,您就不需要為接收器設定目的地權限。將接收器的寫入者身分複製到剪貼簿。以下是寫入者身分的範例:
serviceAccount:service-123456789012@gcp-sa-logging.iam.gserviceaccount.com執行
gcloud projects add-iam-policy-binding指令,將記錄資料寫入目的地的權限授予接收器的寫入者身分。使用下列指令前,請先替換以下項目:
- PROJECT_ID:專案的 ID。選取儲存匯總接收器目的地的專案。如果目的地是專案,請選取該專案。
- PRINCIPAL:要授予角色的主體 ID。主體 ID 通常採用以下格式:
PRINCIPAL-TYPE:ID。例如:user:my-user@example.com。 如要查看PRINCIPAL的完整格式清單,請參閱「主體 ID」。 ROLE:IAM 角色。根據記錄檔接收器的目的地,授予接收器寫入者身分適當的 IAM 角色:
- 針對所有目的地,授予記錄檔寫入者角色 (
roles/logging.logWriter)。具體來說,主體需要logging.logEntries.route權限。 - 根據目的地授予下列其中一個角色:
- 記錄檔 bucket:授予記錄檔 bucket 寫入者角色 (
roles/logging.bucketWriter)。 - Cloud Storage bucket:授予 Storage 物件建立者角色 (
roles/storage.objectCreator)。 - BigQuery 資料集:授予 BigQuery 資料編輯者角色 (
roles/bigquery.dataEditor)。 - Pub/Sub 主題 (包括 Splunk):授予 Pub/Sub 發布者角色 (
roles/pubsub.publisher)。
- 記錄檔 bucket:授予記錄檔 bucket 寫入者角色 (
- 針對所有目的地,授予記錄檔寫入者角色 (
請執行
gcloud projects add-iam-policy-binding指令。gcloud projects add-iam-policy-binding PROJECT_ID --member=PRINCIPAL --role=ROLE
REST
建議您使用 Google Cloud 控制台或 Google Cloud CLI,將角色授予服務帳戶。
匯總接收器的篩選器
本節提供一些範例,說明您可能會在匯總接收器中使用的篩選器。如需更多範例,請參閱「使用記錄檔探索工具的查詢範例」。
有一些範例使用了下列標記法:
:是子字串運算子。請勿替換=運算子。...代表任何其他篩選器比較。- 變數會以彩色文字表示。以有效的值取代。
篩選條件的長度上限為 20,000 個字元。
如要進一步瞭解篩選語法,請參閱「Logging 查詢語言」。
選取記錄來源
如要轉送所有子資源的記錄項目,請勿在接收器的「包含」和「排除」篩選器中指定專案、資料夾或機構。舉例來說,假設您為機構設定匯總接收器,並採用下列篩選條件:
resource.type="gce_instance"
使用這個篩選器,匯總接收器會將該機構任何子項資源中 Compute Engine 執行個體的記錄項目,轉送至目的地。
不過,有時您可能想使用匯總接收器,只將特定子資源的記錄項目傳送至接收器。舉例來說,基於法規遵循考量,您可能想將特定資料夾或專案的稽核記錄,儲存在專屬的 Cloud Storage bucket。在這種情況下,請設定「包含」篩選器,指定要轉送記錄項目的「每個」子項資源。如要轉送資料夾和該資料夾內所有專案的記錄項目,篩選器必須列出資料夾和該資料夾內含的每個專案,並以 OR 子句聯結陳述式。
下列篩選器會將記錄項目限制在「特定」 Google Cloud 專案、資料夾或組織:
logName:"projects/PROJECT_ID/logs/" AND ...
logName:("projects/PROJECT_A_ID/logs/" OR "projects/PROJECT_B_ID/logs/") AND ...
logName:"folders/FOLDER_ID/logs/" AND ...
logName:"organizations/ORGANIZATION_ID/logs/" AND ...
舉例來說,如要只轉送 Compute Engine 執行個體產生,且源自資料夾 my-folder 的記錄項目,請使用下列篩選器:
logName:"folders/my-folder/logs/" AND resource.type="gce_instance"
使用這項篩選器時,系統不會將源自 my-folder 以外任何資源的記錄項目 (包括源自 my-folder 子項 Google Cloud 專案的記錄項目) 轉送至目的地。
選取受監控的資源
如要僅從Google Cloud 專案中的特定受監控資源轉送記錄項目,請使用多個比較運算式來精確指定資源:
logName:"projects/PROJECT_ID/logs" AND resource.type=RESOURCE_TYPE AND resource.labels.instance_id=INSTANCE_ID
如需資源類型清單,請參閱「受監控資源類型」。
選取記錄項目樣本
如要將記錄項目隨機取樣並傳送至目的地,請新增 sample 內建函式。舉例來說,如要只轉送符合目前篩選條件的 10% 記錄項目,請使用下列附加條件:
sample(insertId, 0.10) AND ...
詳情請參閱 sample 函式。
如要瞭解 Logging 篩選器,請參閱「Logging 查詢語言」。
後續步驟
在記錄檔 bucket 建立記錄檔檢視表: 記錄檔檢視表可讓您授予主體讀取權限,存取記錄檔 bucket 中儲存的部分記錄項目。