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

您可以使用 Logging 代理程式,或直接從程式碼呼叫用戶端程式庫,將應用程式記錄傳送至 Cloud Logging。為執行階段環境選擇合適的方法,有助於可靠地收集記錄,而不會為應用程式增加不必要的依附元件或作業負擔。

Logging 代理程式會收集寫入 stdout、stderr、已知檔案位置或系統記錄服務 (例如 Windows Event Log、journald 或 syslogd) 的資料,並將資料傳送至 Logging。Google Kubernetes Engine、App Engine 彈性環境和 Cloud Run functions 等服務包含整合式 Logging 代理程式,而 Compute Engine 則可安裝 Ops Agent。

如果無法使用用戶端程式庫或 Logging 代理程式,或者只想進行實驗,可以使用 gcloud logging write 指令,或傳送 HTTP 要求至 Cloud Logging API entries.write 端點,藉此寫入記錄。Logging API 支援 HTTP 和 gRPC 呼叫:Ops Agent 和大多數 Logging 用戶端程式庫會呼叫 gRPC Logging API,而某些語言的用戶端程式庫則會呼叫 REST Logging API。

選擇代理程式或用戶端程式庫

在決定要使用代理程式或用戶端程式庫時,請考量下列問題:

您的應用程式是否在 Google Cloud以外執行?

如果應用程式並非在 Google Cloud上執行,您需要透過某種方式將記錄傳送至 Logging API。如要將地端部署系統的記錄轉送至 Logging,建議您使用 Bindplane,部署及管理 OpenTelemetry 收集器,將遙測資料傳送至 Google Cloud。詳情請參閱「關於 Bindplane」。

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

或者,您也可以使用用戶端程式庫,直接從應用程式將記錄轉送至 Logging。如果是無伺服器運算等臨時環境,則必須使用用戶端程式庫直接呼叫 Logging API。

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

部分 Google Cloud 服務為全代管,因此您不必 使用代理程式,就能將記錄檔傳送至 Google Cloud 專案。在預設支援 stdout 和 stderr 的產品中,您可以使用 Go、Node.js 和 Python 等語言的任何既定記錄架構,將記錄傳送至 Logging。相較於使用用戶端程式庫,依賴 stdout 和 stderr 的優點是,應用程式當機不會中斷將記錄傳送至專案。如要瞭解如何透過 stdout 和 stderr 傳送結構化記錄,請參閱「您的應用程式是否能彈性變更記錄格式?」一節。

您可以使用 Logging 用戶端程式庫,但請注意,這可能會在您不一定需要 Logging 時,為本機測試引入對 Logging 的依附元件。使用用戶端程式庫時,可能也需要更複雜的程式碼,才能明確處理緩衝和重試作業。此外,每次使用 Logging 用戶端程式庫時,都會建立新的 API 連線串流。這些新連線會增加複雜度、使用額外的通訊埠,並傳送僅包含應用程式記錄的個別要求,如果記錄不多,可能會造成浪費。

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

如需在本機環境中存取應用程式記錄,以便偵錯或用於其他用途,您可以使用某些語言的記錄模組,將記錄輸出至 stdout 和 stderr。部分語言的 Logging 用戶端程式庫支援將記錄轉送至 stdout 和 stderr。

在 Google Cloud 服務中執行應用程式時,如果服務不支援自動將寫入 stdout 和 stderr 的記錄傳送至Google Cloud 專案,您可以將 stdout 和 stderr 記錄收集到磁碟檔案中,並設定代理程式擷取這些記錄,然後傳送至 Logging。詳情請參閱 Ops Agent 的設定指南。

代理程式安裝程序是手動還是自動?

部分服務會自動安裝代理程式,或允許您自行安裝。如果您使用的服務不允許安裝代理程式,則必須使用用戶端程式庫才能使用 Logging。

您的系統是否已執行 Fluentd?

如果系統中已執行 Fluentd,且您想使用該 Daemon 將記錄傳送至 Logging,請使用 Google Cloud Logging 外掛程式 for fluentd。

您是否也為 Cloud Monitoring 收集應用程式指標?

在 Compute Engine VM 中,Ops Agent 可以收集記錄和大部分指標。詳情請參閱「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。