Cloud Logging 中的記錄接收器可讓您將 Google Cloud 專案中的記錄項目轉送至支援的目的地,以便長期儲存、分析或串流。為傳送記錄,每個接收器都會寫入授權的目的地,例如記錄 bucket 或 Pub/Sub 主題。
接收器會執行寫入動作,因此必須具備寫入目的地的授權。如果目的地是與接收器位於相同專案的記錄檔 bucket,系統會自動授權接收器。如果是其他目的地,接收器必須附加至服務帳戶,且該帳戶已具備將資料寫入目的地所需的權限。
如果需要服務帳戶,Cloud Logging 會自動建立及管理。不過,您可能需要修改授予服務帳戶的權限。您不一定要使用 Logging 建立的服務帳戶。您可以建立及管理多個專案中接收器使用的服務帳戶。詳情請參閱「使用使用者自行管理的服務帳戶設定記錄檔接收器」。
總覽
本文說明如何建立接收器,以及如何設定使用 Google Cloud 控制台、Google Cloud CLI 或 API 時可能看到的選項。
接收器屬於特定 Google Cloud 資源: Google Cloud 專案、帳單帳戶、資料夾或組織。當資源收到記錄項目時,資源中的每個接收器都會處理該記錄項目。如果記錄項目符合接收器的篩選條件,就會轉送至接收器的目的地。
一般來說,接收器只會轉送源自資源的記錄項目。不過,您可以為資料夾和組織建立匯總接收器。這些接收器會轉送源自資料夾或組織,以及源自其子資源的記錄項目。本文不討論匯總接收器。詳情請參閱「匯總接收器總覽」。
如要建立及管理接收器,可以使用 Google Cloud 控制台、Cloud Logging API 和 Google Cloud CLI。建議您使用 Google Cloud 控制台,原因如下:
- 您可以在建立接收器的流程中設定接收器目的地。
- 您可以預覽哪些記錄項目符合接收器的篩選器。
- 部分授權步驟已簡化。
建議您在變更記錄檔儲存空間時,檢查記錄檔接收器設定。舉例來說,如果您刪除記錄檔接收器的目的地,請一併刪除對應的記錄檔接收器。
如要瞭解如何查看及管理記錄檔接收器,請參閱本文的「管理接收器」一節。
支援的目的地
接收器的目的地可以位於與接收器不同的資源中。舉例來說,您可以使用記錄檔接收器,將某個專案的記錄項目轉送至儲存在其他專案的記錄檔 bucket。
支援的目的地如下:
- Google Cloud 專案
如要讓目的地專案中的記錄檔接收器重新轉送記錄項目,或已建立攔截匯總接收器,請選取這個目的地。目的地專案中的記錄檔接收器,可將記錄項目重新轉送至任何支援的目的地 (專案除外)。
目的地專案中由系統建立的記錄檔接收器,會排除轉送至來源專案中
_Required記錄檔 bucket 的記錄項目。舉例來說,如果您將管理員活動記錄檔轉送至其他專案,則目的地專案中的_Required和_Default記錄檔接收器都會排除這些記錄項目。如要儲存這些記錄項目,請在目的地專案中更新_Default記錄檔接收器,或建立自訂記錄檔接收器。
- 記錄檔值區
- 如要將記錄資料儲存在 Cloud Logging 管理的資源中,請選取這個目的地。您可以使用 Logs Explorer 等服務,查看及分析儲存在記錄檔 bucket 中的記錄資料。
- Pub/Sub 主題
- 如要從Google Cloud 匯出記錄資料,然後使用第三方整合服務,請選取這個目的地。記錄項目會格式化為 JSON,然後轉送至 Pub/Sub 主題。
目的地限制
本節說明目的地專屬限制:
- 設定接收器目的地時,請提供完整路徑,並使用服務的全域端點。不支援區域服務端點 (REP),例如
pubsub.LOCATION.rep.googleapis.com。
不支援將記錄轉送至強制執行傳輸中限制的 Pub/Sub 主題。Logging 無法保證發布要求來自允許的區域,這會導致
topic_region_not_allowed設定錯誤和記錄遭捨棄。如果記錄檔接收器的目的地是 Google Cloud 專案,則適用下列限制:
- 限制為一個躍點。
- 目的地專案中的
_Required記錄檔接收器會將記錄項目轉送至專案的_Required記錄檔 bucket,前提是記錄項目符合接收器的篩選器,且源自目的地專案。 - 目的地專案中的
_Default記錄檔接收器會轉送符合「包含」篩選器且不符合任何「排除」篩選器的記錄項目。_Default記錄檔接收器會排除部分記錄項目。舉例來說,這個接收器不會轉送管理員活動和系統事件記錄項目。您可以修改這個接收器。 - 只有位於記錄項目資源階層中的匯總接收器,才會處理該項目。
舉例來說,假設專案
A中記錄檔接收器的目的地是專案B。在這種情況下,適用下列規則:- 由於單躍點限制,專案
B中的記錄檔接收器無法將記錄項目重新轉送至其他 Google Cloud 專案。 - 專案
B的_Required記錄檔 bucket 只會儲存源自專案B的記錄項目。這個記錄檔 bucket 不會儲存來自任何其他資源的記錄項目,包括來自專案A的記錄項目。 - 如果專案
A和專案B的資源階層不同,則專案A中的記錄檔接收器轉送至專案B的記錄項目,不會傳送至專案B資源階層中的匯總接收器。 - 如果專案
A和專案B具有相同的資源階層,記錄項目就會傳送至該階層中的匯總接收器。如果記錄項目未遭到匯總接收器攔截,記錄路由器會將該項目傳送至專案A中的接收器。
事前準備
本文的操作說明說明如何在Google Cloud 專案層級建立及管理接收器。您可以使用相同程序建立接收器,轉送源自組織、資料夾或帳單帳戶的記錄項目。
如要開始使用,請按照下列步驟操作:
-
啟用 Cloud Logging API (如果尚未啟用)。
啟用 API 所需的角色
您必須具備
serviceusage.services.enable權限,才能啟用 API。如果您建立了專案,可能已透過擁有者角色 (roles/owner) 取得這項權限。否則,您可以透過 Service Usage 管理員角色 (roles/serviceusage.serviceUsageAdmin) 取得這項權限。瞭解如何授予角色。 確認 Google Cloud 專案包含可在記錄檔探索工具中查看的記錄項目。
-
如要取得建立、修改或刪除接收器所需的權限,請要求管理員授予您專案的記錄檔設定寫入者 (
roles/logging.configWriter) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。如要瞭解如何授予 IAM 角色,請參閱 Logging 的存取控管指南。
確認您在支援的目的地中有資源,或有能力建立資源。
如要將記錄項目轉送至目的地,您必須先建立目的地,再建立接收器。您可以在任何組織的任何Google Cloud 專案中建立目的地。
建立接收器前,請先查看適用於接收器目的地的限制。詳情請參閱本文的「目的地限制」一節。
選取要使用的介面:
控制台
使用 Google Cloud 控制台存取 Google Cloud 服務和 API 時,不需要設定驗證機制。
gcloud
安裝 Google Cloud CLI,然後 使用聯合身分登入 gcloud CLI。 登入後,執行下列指令來初始化 Google Cloud CLI:
gcloud initREST
如要在本機開發環境中使用本頁的 REST API 範例,請使用您提供給 gcloud CLI 的憑證。
安裝 Google Cloud CLI,然後 使用聯合身分登入 gcloud CLI。
詳情請參閱 Google Cloud 驗證說明文件中的「使用 REST 進行驗證」一節。
建立接收器
本節說明如何在 Google Cloud 專案中建立接收器。每個 Google Cloud 專案最多可建立 200 個接收器。如要查看轉送的記錄項目數量和數量,請查看 logging.googleapis.com/exports/ 指標。
您可以使用 Logging 查詢語言建立篩選運算式,比對要納入的記錄項目。請勿在接收器篩選器中輸入機密資訊。接收器篩選器會視為服務資料。
如果查詢包含多個陳述式,您可以指定這些陳述式的聯結方式,也可以依賴 Cloud Logging 隱含地在陳述式之間新增連接限制 AND。舉例來說,假設查詢或篩選器對話方塊包含兩個陳述式:resource.type = "gce_instance" 和 severity >= "ERROR"。實際查詢為 resource.type = "gce_instance" AND severity >= "ERROR"。Cloud Logging 支援析取限制 OR 和合取限制 AND。使用 OR 陳述式時,建議您使用括號將子句分組。
如要建立接收器,請按照下列步驟操作:
控制台
-
前往 Google Cloud 控制台的「Log Router」(記錄檔路由器) 頁面:
如果您是使用搜尋列尋找這個頁面,請選取子標題為「Logging」的結果。
選取要轉送的記錄項目來源 Google Cloud 專案。
舉例來說,如要將專案
Project-A的資料存取記錄項目轉送至專案Project-B的記錄檔 bucket,請選取Project-A。選取「建立接收器」。
在「Sink details」(接收器詳細資料) 面板中,輸入下列詳細資料:
Sink name (接收器名稱):輸入接收器的 ID。接收器建立後即無法重新命名,但您可以刪除接收器並建立新的接收器。
接收器說明 (選填):說明接收器的用途或用途。
在「Sink destination」(接收器目的地) 面板中,使用「Select sink service」(選取接收器服務) 選單選取接收器服務和目的地。執行下列任一操作:
如要將記錄項目轉送至位於相同Google Cloud 專案中的服務,請選取下列其中一個選項:
- Cloud Logging bucket:選取或建立 Logging bucket。
- 「Pub/Sub topic」(Pub/Sub 主題):選取或建立主題,用於接收轉送的記錄項目。
如要將記錄項目轉送至其他 Google Cloud 專案, 請選取「Google Cloud project」( 專案),然後輸入目的地的完整名稱 :
logging.googleapis.com/projects/DESTINATION_PROJECT_ID如要將記錄項目轉送至其他Google Cloud 專案中的服務,請按照下列步驟操作:
- 選取「其他資源」。
- 輸入目的地的完整名稱。如要瞭解語法,請參閱「目的地路徑格式」。
指定要納入的記錄項目:
前往「Choose logs to include in sink」(選擇要納入接收器的記錄檔) 面板。
在「Build inclusion filter」(建立「包含」篩選器) 欄位中,輸入與要納入的記錄項目相符的篩選運算式。如要瞭解語法,請參閱「Logging 查詢語言」。
如未設定篩選器,所選資源的所有記錄項目都會轉送至目的地。
舉例來說,如要將所有資料存取記錄項目轉送至 Logging bucket,可以使用下列篩選器:
log_id("cloudaudit.googleapis.com/data_access") OR log_id("externalaudit.googleapis.com/data_access")篩選器長度不得超過 20,000 個字元。
如要確認輸入的篩選條件正確無誤,請選取「Preview logs」(預覽記錄)。Logs Explorer 會在新分頁中開啟,並預先填入篩選器。
(選用) 設定排除篩選器,排除部分納入的記錄項目:
前往「Choose logs to filter out of sink」(選擇要從接收器排除的記錄檔) 面板。
在「Exclusion filter name」(排除篩選器名稱) 欄位中輸入名稱。
在「Build an exclusion filter」(建立排除篩選器) 欄位中,輸入與要排除的記錄項目相符的篩選運算式。您也可以使用
sample函式,選取要排除的部分記錄項目。
每個接收器最多可建立 50 個排除篩選器。請注意,篩選器長度不得超過 20,000 個字元。
選取「建立接收器」。
授予接收器服務帳戶權限,將記錄項目寫入接收器目的地。詳情請參閱「設定目的地權限」。
gcloud
如要建立接收器,請按照下列步驟操作:
執行下列
gcloud logging sinks create指令:gcloud logging sinks create SINK_NAME SINK_DESTINATION
執行指令前,請先完成下列替換作業:
- SINK_NAME:記錄檔接收器的名稱。接收器建立後即無法變更名稱。
SINK_DESTINATION:記錄項目要轉送至的服務或專案。按照「目的地路徑格式」一節所述,將 SINK_DESTINATION 設為適當路徑。
舉例來說,如果接收器目的地是 Pub/Sub 主題,則 SINK_DESTINATION 會如下所示:
pubsub.googleapis.com/projects/PROJECT_ID/topics/TOPIC_ID
您也可以提供下列選項:
--log-filter:使用這個選項設定篩選器,比對要納入接收器的記錄項目。如未提供「包含」篩選器的值,則此篩選器會比對所有記錄項目。--exclusion:使用這個選項,為不希望接收器轉送的記錄項目設定排除篩選器。您也可以使用sample函式,選取要排除的部分記錄項目。您可以重複使用這個選項,每個接收器最多可建立 50 個排除篩選器。--description:使用這個選項,說明接收器的用途或用途。
舉例來說,如要建立接收器並傳送至 Logging bucket,指令可能如下所示:
gcloud logging sinks create my-sink logging.googleapis.com/projects/myproject123/locations/global/buckets/my-bucket \ --log-filter='logName="projects/myproject123/logs/matched"' --description="My first sink"
如要進一步瞭解如何使用 Google Cloud CLI 建立接收器,請參閱
gcloud logging sinks參考資料。如果指令回應包含標示為
"writerIdentity"的 JSON 金鑰,請授予接收器服務帳戶寫入接收器目的地的權限。詳情請參閱「設定目的地權限」。如果回應不含標示為
"writerIdentity"的 JSON 鍵,則不需設定目的地權限。
REST
如要在 Google Cloud 專案中建立記錄檔接收器,請使用 Logging API 中的
projects.sinks.create。在LogSink物件中,於方法要求主體提供適當的必要值:name:接收器的 ID。接收器建立後即無法重新命名,但您可以刪除並建立新的接收器。destination:要轉送記錄項目的服務和目的地。如要將記錄項目轉送至其他專案,或轉送至其他專案中的目的地,請將destination欄位設為適當的路徑,詳情請參閱「目的地路徑格式」。舉例來說,如果接收器目的地是 Pub/Sub 主題,則
destination會如下所示:pubsub.googleapis.com/projects/PROJECT_ID/topics/TOPIC_ID
在
LogSink物件中,提供適當的選用資訊:呼叫
projects.sinks.create建立接收器。如果 API 回應包含標示為
"writerIdentity"的 JSON 金鑰,請授予接收器服務帳戶寫入接收器目的地的權限。詳情請參閱「設定目的地權限」。如果 API 回應不含標示為
"writerIdentity"的 JSON 鍵,則不必設定目的地權限。
如要進一步瞭解如何使用 Logging API 建立接收器,請參閱 LogSink 參考資料。
如果收到錯誤通知,請參閱「排解轉送和接收器問題」。
目的地路徑格式
設定接收器目的地時,請提供完整路徑,並使用服務的全域端點。不支援區域服務端點 (REP),例如 pubsub.LOCATION.rep.googleapis.com。
在下列路徑格式中,DESTINATION_PROJECT_ID 是指目的地專案的 ID 或編號:
Cloud Logging 記錄檔 bucket:
logging.googleapis.com/projects/DESTINATION_PROJECT_ID/locations/LOCATION/buckets/BUCKET_NAME
另一個 Google Cloud 專案:
logging.googleapis.com/projects/DESTINATION_PROJECT_ID
Pub/Sub 主題:
pubsub.googleapis.com/projects/DESTINATION_PROJECT_ID/topics/TOPIC_ID
設定目的地權限
本節說明如何授予 Logging 相關 Identity and Access Management 權限,以便將記錄項目寫入接收器的目的地。如需 Logging 角色和權限的完整清單,請參閱「存取控管」。
除非必要的服務帳戶已存在,否則 Cloud Logging 會在建立接收器時,為資源建立共用服務帳戶。服務帳戶可能存在,因為基礎資源中的所有接收器都使用相同的服務帳戶。資源可以是 Google Cloud 專案、組織、資料夾或帳單帳戶。
接收器的寫入者身分是指與該接收器相關聯的服務帳戶 ID。所有接收器都有寫入者身分,但如果接收器寫入的記錄檔 bucket 位於記錄項目來源的 Google Cloud 專案,則不在此限。如果是後者,則不需要服務帳戶,因此接收器的「writer identity」(寫入者身分) 欄位在控制台中會列為 None。API 和 Google Cloud CLI 指令不會回報寫入者身分。
下列操作說明適用於專案、資料夾、組織和帳單帳戶:
控制台
確認您具備Google Cloud 專案的擁有者存取權,該專案包含目的地。如果您沒有接收器目的地的「擁有者」存取權,請要求專案擁有者將寫入者身分新增為主體。
如要從新接收器取得接收器的寫入者身分 (電子郵件地址),請按照下列步驟操作:
-
前往 Google Cloud 控制台的「Log Router」(記錄檔路由器) 頁面:
如果您是使用搜尋列尋找這個頁面,請選取子標題為「Logging」的結果。
- 在工具列中,選取含有接收器的專案。
- 選取「選單」圖示 more_vert,然後選取「查看接收器詳細資料」。寫入者身分會顯示在「Sink details」(接收器詳細資料) 面板中。
-
如果
writerIdentity欄位的值包含電子郵件地址,請繼續下一個步驟。如果值為None,則不必設定接收器的目的地權限。將接收器的寫入者身分複製到剪貼簿。
電子郵件地址可用來識別主體。前置字串
serviceAccount:會指定帳戶類型。將接收器寫入者身分中指定的主體權限,授予將記錄資料寫入目的地的權限:
-
前往 Google Cloud 控制台的「IAM」頁面:
如果您是使用搜尋列尋找這個頁面,請選取子標題為「IAM & Admin」(IAM 與管理) 的結果。
在工具列中,確認所選專案是儲存目的地的專案,或是接收器目的地。舉例來說,如果目的地是記錄檔 bucket,請確認工具列顯示儲存記錄檔 bucket 的專案。
選取「 授予存取權」。
根據記錄檔接收器的目的地,將 IAM 角色授予接收器寫入者身分中指定的主體:
- 針對所有目的地,授予記錄檔寫入者角色 (
roles/logging.logWriter)。具體來說,主體需要logging.logEntries.route權限。 - 根據目的地授予下列其中一個角色:
- 記錄檔值區:授予記錄檔值區寫入者角色 (
roles/logging.bucketWriter)。 - Pub/Sub 主題:授予 Pub/Sub 發布者角色 (
roles/pubsub.publisher)。
- 記錄檔值區:授予記錄檔值區寫入者角色 (
- 針對所有目的地,授予記錄檔寫入者角色 (
-
gcloud
確認您具備Google Cloud 專案的擁有者存取權,該專案包含目的地。如果您沒有接收器目的地的「擁有者」存取權,請要求專案擁有者將寫入者身分新增為主體。
從接收器的
writerIdentity欄位取得服務帳戶:gcloud logging sinks describe SINK_NAME
找出要修改權限的接收器,如果接收器詳細資料包含
writerIdentity,請繼續執行下一個步驟。如果詳細資料不含writerIdentity欄位,則不必設定接收器的目的地權限。服務帳戶的寫入者身分應與以下內容類似:
serviceAccount:service-123456789012@gcp-sa-logging.
呼叫
gcloud projects add-iam-policy-binding指令,將記錄資料寫入目的地的權限授予接收器的寫入者身分。使用下列指令前,請先完成下列替換作業:
- PROJECT_ID:專案 ID。指定儲存記錄檔接收器目的地的專案。如果目的地是專案,請指定該專案。
- PRINCIPAL:要授予角色的主體 ID。主體 ID 通常採用以下格式:
PRINCIPAL-TYPE:ID。例如:。如需PRINCIPAL可採用的完整格式清單,請參閱「主體 ID」。 ROLE:IAM 角色。根據記錄檔接收器的目的地,授予接收器寫入者身分 IAM 角色:
- 針對所有目的地,授予記錄檔寫入者角色 (
roles/logging.logWriter)。具體來說,主體需要logging.logEntries.route權限。 - 根據目的地授予下列其中一個角色:
- 記錄檔值區:授予記錄檔值區寫入者角色 (
roles/logging.bucketWriter)。 - Pub/Sub 主題:授予 Pub/Sub 發布者角色 (
roles/pubsub.publisher)。
- 記錄檔值區:授予記錄檔值區寫入者角色 (
- 針對所有目的地,授予記錄檔寫入者角色 (
執行
gcloud projects add-iam-policy-binding指令:gcloud projects add-iam-policy-binding PROJECT_ID --member=PRINCIPAL --role=ROLE
REST
建議您使用 Google Cloud 控制台或 Google Cloud CLI,將角色授予服務帳戶。
篩選器範例
以下列舉一些在建立接收器時特別實用的篩選器。如需更多範例,請參閱「查詢範例」,在建立「包含」篩選器和「排除」篩選器時,這些範例可能很有幫助。
還原 _Default 接收器篩選器
如果您編輯了 _Default 接收器的篩選器,建議您將這個接收器還原為原始設定。建立後,_Default 接收器會設定下列「包含」篩選器和空白的「排除」篩選器:
NOT log_id("cloudaudit.googleapis.com/activity") AND NOT \
log_id("externalaudit.googleapis.com/activity") AND NOT \
log_id("cloudaudit.googleapis.com/system_event") AND NOT \
log_id("externalaudit.googleapis.com/system_event") AND NOT \
log_id("cloudaudit.googleapis.com/access_transparency") AND NOT \
log_id("externalaudit.googleapis.com/access_transparency")
排除 Google Kubernetes Engine 容器和 Pod 記錄
如要排除 GKE 系統 namespaces 的 Google Kubernetes Engine 容器和 Pod 記錄項目,請使用下列篩選器:
resource.type = ("k8s_container" OR "k8s_pod")
resource.labels.namespace_name = (
"cnrm-system" OR
"config-management-system" OR
"gatekeeper-system" OR
"gke-connect" OR
"gke-system" OR
"istio-system" OR
"knative-serving" OR
"monitoring-system" OR
"kube-system")
如要排除 GKE 系統 log_id 值的 Google Kubernetes Engine 節點記錄項目,請使用下列篩選器:
resource.type = "k8s_node"
(log_id("container-runtime") OR
log_id("docker") OR
log_id("kube-container-runtime-monitor") OR
log_id("kube-logrotate") OR
log_id("kube-node-configuration") OR
log_id("kube-node-installation") OR
log_id("kubelet") OR
log_id("kubelet-monitor") OR
log_id("node-journal") OR
log_id("node-problem-detector"))
支援性
雖然 Cloud Logging 可讓您排除記錄項目,並防止這些項目儲存在記錄檔 bucket 中,但建議您保留有助於支援的記錄項目。使用這些記錄項目,有助於排解及找出應用程式問題。
舉例來說,GKE 系統記錄項目會針對叢集內發生的事件產生,因此可用於排解 GKE 應用程式和叢集的問題。這些記錄項目可協助您判斷應用程式錯誤是由應用程式程式碼或基礎 GKE 叢集造成。GKE 系統記錄也包含 Kubernetes API 伺服器元件產生的 Kubernetes 稽核記錄,其中包含使用 kubectl 指令所做的變更和 Kubernetes 事件。