寫入和檢視記錄

本頁說明 App Engine 應用程式可用的記錄,以及如何寫入、關聯和查看記錄項目。

App Engine 會收集兩種類型的記錄:

  • 要求記錄:傳送至應用程式的要求記錄。根據預設,App Engine 會針對應用程式收到的每個 HTTP 要求,自動發出記錄項目。

  • 應用程式記錄:App Engine 應用程式根據您寫入支援的架構或檔案的記錄項目發出的記錄項目。

App Engine 會自動將要求記錄和應用程式記錄傳送至 Cloud Logging 代理程式。

寫入應用程式記錄檔

App Engine 會自動發出傳送至應用程式的要求記錄,因此您不需要編寫要求記錄。本節說明如何寫入應用程式記錄。

只要使用下列方法寫入記錄,Cloud Logging 就會自動收集您從 App Engine 應用程式寫入的應用程式記錄:

與 Cloud Logging 整合

您可以將 App Engine 應用程式與 Cloud Logging 整合。這種做法可讓您使用 Cloud Logging 提供的所有功能,而且只需要幾行 Google 專屬程式碼。

將結構化記錄檔寫入 stdoutstderr

根據預設,App Engine 會使用 Cloud Logging 用戶端程式庫傳送記錄。不過,這個方法不支援結構化記錄。您只能使用 stdout/stderr 寫入結構化記錄。此外,您也可以將文字字串傳送至 stdoutstderr。根據預設,記錄檔酬載是儲存在記錄項目 textPayload 欄位中的文字字串。這些字串會以訊息形式顯示在記錄檔總管、指令列和 Cloud Logging API 中,並與發出這些字串的 App Engine 服務和版本建立關聯。

如要從記錄檔取得更多價值,您可以在記錄檔總管中依嚴重性等級篩選這些字串。如要篩選這些字串,請將字串格式設為結構化資料。如要這麼做,請以單行序列化 JSON 的形式撰寫記錄。App Engine 會擷取並剖析這個序列化 JSON 行,然後置於記錄項目的 jsonPayload 欄位,而非 textPayload

在 App Engine 標準環境中,將結構化記錄寫入 stdoutstderr 時,不會計入 Cloud Logging API 的每分鐘記錄擷取要求配額。

訊息中的特殊 JSON 欄位

特殊欄位的說明文件所述,當您以 JSON 目錄的形式提供結構化記錄時,系統會從 jsonPayload 去除某些特殊欄位,然後寫入產生的 LogEntry 中的對應欄位。

舉例來說,如果您的 JSON 含有 severity 屬性,系統會從 jsonPayload 移除這個屬性,並改以記錄項目的 severity 形式顯示。如果存在 message 屬性,則會做為記錄項目的主要顯示文字。

將要求記錄與應用程式記錄建立關聯

將項目格式設為 JSON 物件並提供特定中繼資料後,您就能啟用篩選功能,並與要求記錄建立關聯。如要將要求記錄項目與應用程式記錄項目建立關聯,您需要要求的追蹤 ID。請按照下列操作說明,將記錄訊息建立關聯:

  1. X-Cloud-Trace-Context 要求標頭中擷取追蹤記錄 ID。
  2. 在結構化記錄項目中,將 ID 寫入名為 logging.googleapis.com/trace 的欄位。 如要進一步瞭解 X-Cloud-Trace-Context 標頭,請參閱「強制追蹤要求」。

如要查看相關聯的記錄,請參閱「在記錄檔探索工具中查看相關聯的記錄項目」。

查看記錄

您可以透過下列幾種方式查看應用程式記錄和要求記錄:

使用記錄檔探索工具

您可以使用記錄檔探索工具查看應用程式和要求記錄:

  1. 前往 Google Cloud 控制台的「Logs Explorer」頁面:

    前往記錄檔探索工具

  2. 在頁面頂端選取現有的 Google Cloud 專案。

  3. 在「資源類型」中,選取「GAE 應用程式」

您可以依 App Engine 服務、版本和其他條件篩選記錄檢視器。您也可以在記錄中搜尋特定項目。 詳情請參閱使用記錄檔探索工具

如果將簡單的文字項目傳送至標準輸出,您就無法使用記錄檢視器依嚴重程度篩選應用程式項目,也無法查看哪些應用程式記錄對應特定要求。您仍可在記錄探索器中使用其他類型的篩選器,例如文字和時間戳記。

在 Logs Explorer 中查看相關聯的記錄項目

在 Logs Explorer 中,如要查看與父項記錄項目相關聯的子項記錄項目,請展開該記錄項目。

舉例來說,如要顯示 App Engine 要求記錄項目和應用程式記錄項目,請執行下列操作:

  1. 在 Google Cloud 控制台的導覽面板中,依序選取「Logging」(記錄)和「Logs Explorer」(記錄檔探索工具)

    前往記錄檔探索工具

  2. 在「資源類型」中,選取「GAE 應用程式」

  3. 如要查看及關聯要求記錄,請在「記錄名稱」中選取「request_log」。如要改用要求記錄檔建立關聯,請按一下「依據下列項目建立關聯」,然後選取「request_log」

    關聯記錄

  4. 在「Query results」(查詢結果) 窗格中,按一下「Expand」(展開) 即可展開記錄項目。展開後,每筆要求記錄都會顯示相關聯的應用程式記錄。

為記錄檔建立篩選器後,每個要求記錄都會顯示對應的應用程式記錄做為子項記錄。記錄檔探索工具會關聯應用程式記錄檔和指定要求記錄檔中的 trace 欄位,前提是應用程式使用 google-cloud-logging 程式庫。

下圖顯示按 trace 欄位分組的應用程式記錄:

應用程式記錄項目會巢狀內嵌在要求記錄項目中。

使用 Google Cloud CLI

如要透過指令列查看 App Engine 記錄,請使用下列指令:

gcloud app logs tail

詳情請參閱 gcloud app logs tail

以程式輔助方式讀取記錄

如要以程式輔助方式讀取記錄,可以使用下列其中一種方法:

定價、配額和記錄檔保留政策

如要瞭解要求記錄和應用程式記錄的適用定價,請參閱 Cloud Logging 定價

如要瞭解記錄保留政策和記錄項目的大小上限,請參閱「配額與限制」。如要將記錄檔保留較長的時間,您可以將記錄檔匯出至 Cloud Storage。您也可以將記錄檔匯出至 BigQuery 和 Pub/Sub,以便進行後續的處理作業。

管理記錄資源用量

您可以從應用程式的程式碼中寫入更多或更少的項目,藉此控管應用程式記錄的記錄活動量。系統會自動建立要求記錄,因此如要管理與應用程式相關聯的要求記錄項目數量,請使用 Cloud Logging 的排除記錄功能。

已知問題

以下是第二代執行階段的一些記錄問題:

  • 有時應用程式記錄項目不會與要求記錄建立關聯。應用程式第一次收到要求時,以及 App Engine 將狀態訊息寫入應用程式記錄時,都會發生這種情況。詳情請參閱 https://issuetracker.google.com/issues/138365527

  • 將記錄從記錄接收器轉送至 Cloud Storage 時,Cloud Storage 目的地只會包含要求記錄。App Engine 會將應用程式記錄寫入不同資料夾。

  • 由於要求記錄中的「@type」欄位,BigQuery 無法擷取記錄。這會中斷自動結構定義偵測功能,因為 BigQuery 不允許在欄位名稱中使用 @type。如要解決這個問題,您必須手動定義結構定義,並從要求記錄中移除 @type 欄位。

  • 如果您使用記錄 REST API,背景執行緒會將記錄檔寫入 Cloud Logging。如果主執行緒未處於活動狀態,執行個體就不會取得 CPU 時間,導致背景執行緒停止。記錄處理時間延遲。在某個時間點,執行個體會遭到移除,且所有未傳送的記錄都會遺失。為避免記錄遺失,請採取下列任一做法:

    • 設定 Cloud Logging SDK 以使用 gRPC。使用 gRPC 時,記錄檔會立即傳送至 Cloud Logging。但這可能會提高 CPU 限制。
    • 使用 stdout/stderr 將記錄訊息傳送至 Cloud Logging。這個管道位於 App Engine 執行個體外部,因此不會受到節流。

後續步驟

  • 請參閱「監控及警示延遲時間」,瞭解如何使用 Cloud Logging 查看記錄來偵錯,以及如何使用 Cloud Trace 瞭解應用程式延遲時間。