本文件提供您需要的資訊,協助您決定是否要使用程式輔助功能,透過用戶端程式庫或記錄代理程式,將應用程式記錄傳送至 Cloud Logging。記錄代理程式會將寫入檔案的資料 (例如 stdout
或檔案) 以記錄檔的形式傳送至 Cloud Logging。Google Kubernetes Engine、App Engine 彈性環境和 Cloud Run 函式等服務包含整合的記錄代理程式。如為 Compute Engine,您可以安裝 Ops Agent 或舊版 Cloud Logging 代理程式。這些代理程式會從已知的檔案位置或記錄服務 (例如 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 記錄 API。
選擇代理程式或用戶端程式庫
在決定要使用代理程式或用戶端程式庫時,請考慮下列問題:
- 您的應用程式是否在 Google Cloud外執行?
如果應用程式並非在 Google Cloud上執行,您需要透過某種方式將記錄傳送至 Logging API。如要將記錄從內部部署系統轉送至 Logging,建議您使用 Bindplane,該服務會部署及管理 OpenTelemetry 收集器,以便將遙測資料傳送至 Google Cloud。詳情請參閱「關於 Bindplane」。
或者,您也可以使用用戶端程式庫,直接從應用程式將記錄路由至 Logging。對於無伺服器運算等暫時性環境,您必須使用用戶端程式庫直接呼叫 Logging API。
- 執行應用程式的 Google Cloud 服務是否支援
- 將
stdout
和stderr
內容寫入專案? 部分 Google Cloud 服務為完全管理式服務,因此您不需要使用代理程式將記錄傳送至 Google Cloud 專案。您可以使用任何已建立的記錄架構,並選擇所需語言 (例如 Go、Node.js 和 Python),將記錄傳送至支援
stdout
和stderr
的產品。相較於使用用戶端程式庫,依賴stdout
和stderr
的好處在於,應用程式當機不會導致無法將記錄傳送至專案。如要瞭解如何透過stdout
和stderr
傳送結構化記錄,請參閱「您的應用程式是否可靈活變更記錄格式?」一節。您可以使用記錄功能用戶端程式庫,但請注意,當您不需要記錄功能時,記錄功能用戶端程式庫可能會引進本機測試的依附元件。使用用戶端程式庫也可能需要更複雜的程式碼,才能明確處理緩衝和重試。此外,每次使用記錄用戶端程式庫時,都會建立與 API 的新連線串流。這些新連線會帶來更多複雜性、使用額外的連接埠,並傳送只包含應用程式記錄的個別要求,如果記錄不多,這可能會造成浪費。
- 應用程式記錄是否需要在本機環境中可供存取?
如果您需要在本機環境中存取應用程式記錄,以便進行偵錯或其他用途,可以使用某些語言的記錄模組,將記錄輸出至
stdout
和stderr
。部分語言的用戶端程式庫記錄功能可將記錄資料路由至stdout
和stderr
。如果在 Google Cloud 服務中執行應用程式,但該服務不支援自動將寫入
stdout
和stderr
的記錄傳送至Google Cloud 專案,您可以收集磁碟上檔案中的stdout
和stderr
記錄,並設定代理程式擷取這些記錄並傳送至 Logging。詳情請參閱 Ops Agent 或舊版 Logging 代理程式 的設定指南。- 代理程式安裝程序是手動或自動?
部分服務會自動安裝代理程式,或讓您自行安裝代理程式。如果您使用的服務不允許安裝代理程式,則必須使用用戶端程式庫才能使用記錄功能。
- 您是否已在系統中執行 Fluentd?
舊版記錄代理程式是以 Fluentd 為基礎。
如果系統中已執行 Fluentd,且您想使用該守護程序將記錄檔傳送至 Logging,請使用 Google Cloud Logging 外掛程式。
- 您是否也收集 Cloud Monitoring 的應用程式指標?
在 Compute Engine VM 中,作業套件代理程式可以收集記錄和大部分指標。詳情請參閱「作業套件代理程式功能」。
如果 Ops Agent 無法解決您的用途,您可以使用舊版 Monitoring 代理程式或Monitoring 用戶端程式庫收集指標。
- 您的應用程式是否可以靈活變更記錄格式?
這項問題可協助您判斷應用程式是否能產生結構化記錄。如果您以結構化記錄格式將記錄傳送至 Logging API,記錄功能就會辨識結構化記錄。用戶端程式庫會提供處理此格式的方法。
撰寫結構化記錄的方法有兩種:一種是設定
LogEntry
信封中的特定欄位,另一種是設定LogEntry
信封中的jsonPayload
欄位。前者的結構定義由 Cloud Logging 決定,後者的結構定義則由使用者決定。您必須設定代理程式,才能辨識結構化記錄。根據預設,代理程式會偵測 JSON 格式的記錄,並將這些記錄處理為結構化記錄。如果應用程式有您無法變更的記錄格式,但您希望記錄能以結構化記錄格式 (通常為 JSON) 寫入
stdout
和stderr
,以便代理程式將其識別為結構化記錄,否則,您必須設定代理程式,讓其瞭解自己的格式。
各個選項的摘要
Cloud Logging 用戶端程式庫
優點
- 您可以將記錄直接轉送至 Cloud Logging API。
- 部分語言可使用程式庫將記錄輸出至
stdout
和stderr
。
缺點
- 應用程式當機會導致記錄無法傳送至 Google Cloud 專案。
作業套件代理程式
優點
- 作業套件代理程式可使用穩定的開放原始碼技術傳送記錄和指標:Fluent Bit 用於記錄收集,OpenTelemetry Collector 用於指標收集。
- 您可以從許多常見的應用程式收集記錄檔和指標,請參閱「監控第三方應用程式並收集記錄檔」。
- 您可以在本機環境中保留記錄。
- 您或許可以從應用程式當機中復原記錄。
- 作業套件代理程式仍在開發中。
缺點
- Fluent Bit 僅支援 UTF-8 編碼。不支援編碼轉換。
舊版記錄代理程式
- 優點
- 代理程式會使用 Fluentd 收集記錄檔,以便支援編碼轉換。
- 您可以在本機環境中保留記錄。
- 您或許可以從應用程式當機中復原記錄。
- 缺點
- 我們目前支援這項工具,但並未積極開發。
- 優點
stdout
和stderr
記錄會自動傳送至您的 Google Cloud 專案- 優點
- 這是將記錄檔發送至本機環境的常用方法。
- 您可以使用任意記錄資料庫。
- 您或許可以從應用程式當機中復原記錄。
- 缺點
- 並非所有環境都會自動將記錄轉送至 Logging。
- 優點