該使用哪一項服務:Logging 代理程式或用戶端程式庫?

本文件提供您需要的資訊,協助您決定是否要使用程式輔助功能,透過用戶端程式庫或記錄代理程式,將應用程式記錄傳送至 Cloud Logging。記錄代理程式會將寫入檔案的資料 (例如 stdout 或檔案) 以記錄檔的形式傳送至 Cloud Logging。Google Kubernetes Engine、App Engine 彈性環境和 Cloud Run 函式等服務包含整合的記錄代理程式。如為 Compute Engine,您可以安裝 Ops Agent 或舊版 Cloud Logging 代理程式。這些代理程式會從已知的檔案位置或記錄服務 (例如 Windows Event Logjournaldsyslogd) 收集記錄。

如果您無法使用用戶端程式庫或 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」。

您可以使用 Bindplane 從各種來源收集遙測資料,並將這些資料匯出至 Cloud Monitoring 和 Cloud Logging。

或者,您也可以使用用戶端程式庫,直接從應用程式將記錄路由至 Logging。對於無伺服器運算等暫時性環境,您必須使用用戶端程式庫直接呼叫 Logging API。

執行應用程式的 Google Cloud 服務是否支援
stdoutstderr 內容寫入專案?

部分 Google Cloud 服務為完全管理式服務,因此您不需要使用代理程式將記錄傳送至 Google Cloud 專案。您可以使用任何已建立的記錄架構,並選擇所需語言 (例如 Go、Node.js 和 Python),將記錄傳送至支援 stdoutstderr 的產品。相較於使用用戶端程式庫,依賴 stdoutstderr 的好處在於,應用程式當機不會導致無法將記錄傳送至專案。如要瞭解如何透過 stdoutstderr 傳送結構化記錄,請參閱「您的應用程式是否可靈活變更記錄格式?」一節。

您可以使用記錄功能用戶端程式庫,但請注意,當您不需要記錄功能時,記錄功能用戶端程式庫可能會引進本機測試的依附元件。使用用戶端程式庫也可能需要更複雜的程式碼,才能明確處理緩衝和重試。此外,每次使用記錄用戶端程式庫時,都會建立與 API 的新連線串流。這些新連線會帶來更多複雜性、使用額外的連接埠,並傳送只包含應用程式記錄的個別要求,如果記錄不多,這可能會造成浪費。

應用程式記錄是否需要在本機環境中可供存取?

如果您需要在本機環境中存取應用程式記錄,以便進行偵錯或其他用途,可以使用某些語言的記錄模組,將記錄輸出至 stdoutstderr。部分語言的用戶端程式庫記錄功能可將記錄資料路由至 stdoutstderr

如果在 Google Cloud 服務中執行應用程式,但該服務不支援自動將寫入 stdoutstderr 的記錄傳送至Google Cloud 專案,您可以收集磁碟上檔案中的 stdoutstderr 記錄,並設定代理程式擷取這些記錄並傳送至 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) 寫入 stdoutstderr,以便代理程式將其識別為結構化記錄,否則,您必須設定代理程式,讓其瞭解自己的格式。

各個選項的摘要

記錄模式圖表

  • Cloud Logging 用戶端程式庫

    • 優點

      • 您可以將記錄直接轉送至 Cloud Logging API。
      • 部分語言可使用程式庫將記錄輸出至 stdoutstderr
    • 缺點

      • 應用程式當機會導致記錄無法傳送至 Google Cloud 專案。
  • 作業套件代理程式

    • 優點

      • 作業套件代理程式可使用穩定的開放原始碼技術傳送記錄和指標:Fluent Bit 用於記錄收集,OpenTelemetry Collector 用於指標收集。
      • 您可以從許多常見的應用程式收集記錄檔和指標,請參閱「監控第三方應用程式並收集記錄檔」。
      • 您可以在本機環境中保留記錄。
      • 您或許可以從應用程式當機中復原記錄。
      • 作業套件代理程式仍在開發中。
    • 缺點

      • Fluent Bit 僅支援 UTF-8 編碼。不支援編碼轉換。
  • 舊版記錄代理程式

    • 優點
      • 代理程式會使用 Fluentd 收集記錄檔,以便支援編碼轉換。
      • 您可以在本機環境中保留記錄。
      • 您或許可以從應用程式當機中復原記錄。
    • 缺點
      • 我們目前支援這項工具,但並未積極開發。
  • stdoutstderr 記錄會自動傳送至您的 Google Cloud 專案

    • 優點
      • 這是將記錄檔發送至本機環境的常用方法。
      • 您可以使用任意記錄資料庫。
      • 您或許可以從應用程式當機中復原記錄。
    • 缺點
      • 並非所有環境都會自動將記錄轉送至 Logging。