本文提供相關資訊,協助您決定是否要使用用戶端程式庫或記錄代理程式,以程式輔助方式將應用程式記錄檔傳送至 Cloud Logging。記錄代理程式會將寫入檔案 (例如 stdout 或檔案) 的資料,以記錄的形式傳送至 Cloud Logging。Google Kubernetes Engine、App Engine 彈性環境和 Cloud Run functions 等服務都內建記錄代理程式。如果是 Compute Engine,您可以安裝 Ops Agent。
這個代理程式會從已知檔案位置或記錄服務 (例如 Windows Event Log、journald 或 syslogd) 收集記錄。
如果無法使用用戶端程式庫或 Logging 代理程式,或是只想進行實驗,可以使用 gcloud logging write 指令寫入記錄,也可以將 HTTP 指令傳送至 Cloud Logging API 端點 entries.write。Cloud Logging API 支援 HTTP 和 gRPC 呼叫。Ops Agent 和大多數 Logging 用戶端程式庫都會呼叫 gRPC Logging API。部分語言的用戶端程式庫會呼叫 REST Logging API。
選擇代理程式或用戶端程式庫
決定要使用代理程式或用戶端程式庫時,請考量下列問題:
- 您的應用程式是否在 Google Cloud以外的環境中執行?
如果應用程式不是在 Google Cloud上執行,您需要某種方式將記錄傳送至 Logging API。如要將地端部署系統的記錄傳送至 Cloud Logging,建議使用 Bindplane,這個工具會部署及管理 OpenTelemetry 收集器,將遙測資料傳送至 Google Cloud。詳情請參閱「關於 Bindplane」。

或者,您也可以使用用戶端程式庫,直接從應用程式將記錄檔傳送至 Logging。如果是無伺服器運算等暫時性環境,您必須使用用戶端程式庫直接呼叫 Logging API。
- 執行應用程式的 Google Cloud 服務是否支援
- 將
stdout和stderr內容寫入專案? 部分 Google Cloud 服務是全代管服務,因此您不需要使用代理程式將記錄傳送至專案。 Google Cloud 您可以使用所選語言 (例如 Go、Node.js 和 Python) 中任何已建立的記錄架構,將記錄傳送至預設支援
stdout和stderr的產品中的 Cloud Logging。相較於使用用戶端程式庫,改用stdout和stderr的優點是,應用程式當機不會中斷將記錄傳送至專案的作業。如要瞭解如何透過stdout和stderr傳送結構化記錄,請參閱「您的應用程式是否能彈性變更記錄格式?」一節。您可以使用 Logging 用戶端程式庫,但請注意,這可能會在您不一定需要時,為本機測試導入 Logging 的依附元件。使用用戶端程式庫時,可能也需要更複雜的編碼,才能明確處理緩衝和重試作業。此外,每次使用 Logging 用戶端程式庫時,都會建立新的 API 連線串流。這些新連線會增加複雜度、使用額外通訊埠,並只傳送應用程式的記錄,如果記錄不多,可能會浪費資源。
- 您是否需要在本機環境中存取應用程式記錄?
如要在本機環境中存取應用程式記錄,以進行偵錯或其他用途,可以使用某些語言的記錄模組輸出至
stdout和stderr。部分語言的記錄用戶端程式庫支援將記錄傳送至stdout和stderr。在 Google Cloud 服務中執行應用程式時,如果該服務不支援自動將寫入
stdout和stderr的記錄檔傳送至Google Cloud 專案,您可以收集磁碟檔案中的stdout和stderr記錄檔,並設定代理程式來擷取這些記錄檔,然後傳送至 Logging。詳情請參閱 Ops Agent 的設定指南。- 代理程式安裝程序是手動還是自動?
部分服務會自動安裝代理程式,或允許您自行安裝。如果您使用的服務不允許安裝代理程式,就必須使用用戶端程式庫才能使用 Logging。
- 您是否已在系統中執行 Fluentd?
如果系統已執行 Fluentd,且您想使用該常駐程式將記錄傳送至 Logging,請使用 Google Cloud Fluentd 適用的 Logging 外掛程式。
- 您是否也為 Cloud Monitoring 收集應用程式指標?
在 Compute Engine VM 中,作業套件代理程式可以收集記錄檔和大部分指標。詳情請參閱「Ops Agent 功能」。
如果 Ops Agent 無法滿足您的用途,可以使用 Monitoring 用戶端程式庫收集指標。
- 您的應用程式是否可彈性變更記錄格式?
這個問題可協助您判斷應用程式是否能產生結構化記錄。如果您以結構化記錄格式將記錄檔傳送至 Logging API,Logging 就會辨識結構化記錄檔。用戶端程式庫提供處理這種格式的方法。
有兩種方式可編寫結構化記錄:一是設定
LogEntry信封中的特定欄位 , 二是設定LogEntry信封中的jsonPayload欄位。 前者結構定義由 Cloud Logging 決定,後者則由使用者決定。您必須設定代理,才能辨識結構化記錄。 根據預設,代理程式會偵測 JSON 格式的記錄,並將其視為結構化記錄處理。如果應用程式有無法變更的專屬記錄格式,但您希望系統將記錄辨識為結構化記錄,則必須以結構化記錄格式 (通常為 JSON) 將記錄寫入
stdout和stderr,代理程式才能將其辨識為結構化記錄。否則,您必須設定代理程式,讓代理程式瞭解自己的格式。
各選項的摘要
Cloud Logging 用戶端程式庫
優點
- 您可以將記錄直接轉送至 Cloud Logging API。
- 部分語言可使用程式庫,將記錄輸出至
stdout和stderr。
缺點
- 應用程式當機時,系統會停止將記錄傳送至 Google Cloud 專案。
Ops Agent
優點
- Ops Agent 可使用穩定的開放原始碼技術傳送記錄和指標:Fluent Bit 用於收集記錄,OpenTelemetry Collector 則用於收集指標。
- 您可以從許多常見應用程式收集記錄檔和指標;詳情請參閱「監控及收集第三方應用程式的記錄檔」。
- 您可以在本機環境中保留記錄。
- 您或許可以從應用程式當機事件中復原記錄。
- Ops Agent 仍在開發階段。
缺點
- Fluent Bit 僅支援 UTF-8 編碼。不支援編碼轉換。
stdout和stderr記錄檔會自動傳送至 Google Cloud 專案- 優點
- 這是將記錄傳送至本機環境的常見方式。
- 您可以使用任意記錄程式庫。
- 您或許可以從應用程式當機事件中復原記錄。
- 缺點
- 並非所有環境都會自動將記錄檔傳送至 Logging。
- 優點