寫入和檢視記錄

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

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

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

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

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

寫入應用程式記錄檔

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

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

與 Cloud Logging 整合

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

將結構化記錄檔寫入 stdoutstderr

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

如要從記錄檔中取得更多價值,您可以在 Logs Explorer 中依嚴重性等級篩選這些字串。如要篩選這些字串,您必須將字串格式化為結構化資料。如要這麼做,您必須以單行序列化 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 標頭,請參閱「強制追蹤要求」。

如要查看相關聯的記錄,請參閱「在 Logs Explorer 中查看相關聯的記錄項目」。

查看記錄

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

使用記錄檔探索工具

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

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

    前往「Logs Explorer」

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

  3. 在「Resource Type」(資源類型) 中,選取「GAE Application」(GAE 應用程式)

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

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

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

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

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

  1. 在 Google Cloud 控制台的導覽面板中,依序選取「Logging」和「Logs Explorer」

    前往「Logs Explorer」

  2. 在「Resource Type」(資源類型) 中,選取「GAE Application」(GAE 應用程式)

  3. 如要查看並關聯要求記錄,請在「記錄名稱」中選取「request_log」。或者,如要依據要求記錄建立關聯,請按一下「依據」,然後選取「request_log」

    關聯記錄檔

  4. 如要展開記錄項目,請在「查詢結果」窗格中按一下「展開」。展開後,每個要求記錄都會顯示相關聯的應用程式記錄。

為記錄檔建立篩選器後,每個要求記錄都會顯示對應的應用程式記錄檔做為子項記錄檔。假設應用程式使用 google-cloud-logging 程式庫,Logs Explorer 會透過關聯應用程式記錄檔和指定要求記錄檔中的 trace 欄位來達成這項目標。

下圖顯示按 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 瞭解應用程式的延遲時間。