Cloud Run 會將工作負載記錄傳送至 Cloud Logging,方便您監控健康狀態、檢查流量,以及排解應用程式錯誤。查看及寫入結構化記錄,有助於診斷 Cloud Run 資源的執行階段問題。
Cloud Run 會收集三種類型的記錄。要求記錄會記錄傳入的服務要求。容器記錄會擷取程式碼在所有資源中的輸出內容,並寫入寫入容器記錄中所述的支援位置。系統記錄會記錄 varlog/system 中所有資源的平台事件。
查看記錄
您可以透過多種方式查看 Cloud Run 資源的記錄:
- 使用 Google Cloud 控制台中的「Cloud Run」頁面
- 使用 Cloud Logging
- 使用 Google Cloud CLI 透過 gcloud 查看記錄 (僅限服務)
- 使用 Cloud Code (僅限服務)
這兩種控制台查看記錄的方法,都是檢查儲存在 Cloud Logging 中的相同記錄,但 Cloud Logging Logs Explorer 提供更多詳細資料和篩選功能。
在 Cloud Run 查看記錄
您可以在 Cloud Run 頁面查看下列資源的記錄:
服務
在 Google Cloud 控制台中,前往 Cloud Run 的「Services」(服務) 頁面:
在顯示的清單中,點按所需服務。
點按「Logs」(記錄) 分頁標籤,取得這項服務所有修訂版本的要求和容器記錄。您可以依記錄的嚴重性等級進行篩選。
工作
如要在 Cloud Run 頁面查看工作記錄,請按照下列步驟操作:
前往 Google Cloud 控制台的 Cloud Run「Jobs」(工作) 頁面:
在工作清單中找到該工作,然後點選。
點按「Logs」(記錄) 分頁標籤,取得這項工作所有執行作業的容器記錄。您可以依記錄的嚴重性等級進行篩選。
或者,如要查看特定工作執行作業預先篩選的記錄,請按一下工作執行作業,然後按一下「Logs」(記錄) 分頁標籤。
worker 集區
如要在 Cloud Run 頁面查看 worker 集區記錄,請按照下列步驟操作:
前往 Google Cloud 控制台的 Cloud Run「Worker pools」(工作站集區) 頁面:
在顯示的清單中,點選 worker 集區。
點按「Logs」(記錄) 分頁標籤,取得這個 worker 集區所有修訂版本的要求和容器記錄。您可以依記錄的嚴重性等級進行篩選。
執行個體
如要查看執行個體記錄,請參閱「在 Cloud Logging 查看記錄」和「Cloud Run 稽核記錄」的操作說明。
在 Cloud Logging 查看記錄
如要在 Cloud Logging 的 Logs Explorer 中查看 Cloud Run 記錄,請按照下列步驟操作:
前往Google Cloud 控制台的「Logs Explorer」頁面:
在頁面頂端選取現有的 Google Cloud 專案,或建立新專案。
使用下拉式選單選取資源:
- 服務的 Cloud Run 修訂版本
- Cloud Run 工作:適用於工作
- Cloud Run Worker Pool:適用於 worker 集區
- 執行個體的Cloud Run 執行個體
詳情請參閱「使用記錄檔探索工具」。
使用 Google Cloud CLI 查看服務記錄
您可以使用 Google Cloud CLI,在指令列中查看 Cloud Run 服務的結尾記錄或讀取現有記錄。根據預設,記錄會採用單行格式,並針對控制台進行最佳化。
如要追蹤記錄,您必須在 Google Cloud CLI 中安裝 log-streaming 元件。如果未安裝元件,系統會在需要時提示您安裝。
在指令列中查看結尾記錄
如果是 Cloud Run 服務,您可以直接在指令列中即時追蹤 Cloud Run 服務的記錄:
gcloud beta run services logs tail SERVICE --project PROJECT-ID
更改下列內容:
- SERVICE:Cloud Run 服務的名稱。
- PROJECT-ID: Google Cloud 專案 ID。您可以執行
gcloud config get-value project指令,查看專案 ID。
在指令列中讀取記錄
如要查看 Cloud Run 服務的現有記錄,可以採用下列任一方式:
- 以適合遊戲主機的格式:
gcloud run services logs read SERVICE --limit=10 --project PROJECT-ID
- 直接從 Cloud Logging 匯出:
gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=SERVICE" --project PROJECT-ID --limit 10
更改下列內容:
- SERVICE:Cloud Run 服務的名稱。
- PROJECT-ID: Google Cloud 專案 ID。您可以執行
gcloud config get-value project指令,查看專案 ID。
在 Cloud Code 查看服務記錄
如要在 Cloud Code 中查看記錄,請參閱 IntelliJ 和 Visual Studio Code 指南。
以程式輔助方式讀取記錄
如要透過程式輔助方式讀取記錄,可以使用下列任一方法:
- 使用記錄檔接收器將記錄檔傳送至 Pub/Sub,並使用指令碼從 Pub/Sub 提取記錄檔。
- 透過程式設計語言的用戶端程式庫呼叫 Logging API。
- 直接呼叫 Logging API REST 端點。
執行個體調度資源記錄格式和內容
當 Cloud Run 服務啟動新執行個體時,Cloud Logging 會在 varlog/system 記錄檔名稱下加入記錄項目,說明建立各個執行個體的原因。記錄項目格式如下:
Starting new instance. Reason: REASON - DESCRIPTION
下表提供執行個體說明的詳細資料:
| 原因 | 說明 |
|---|---|
MANUAL_OR_CUSTOMER_MIN_INSTANCE |
執行個體已啟動,因為客戶設定了執行個體數量下限或手動調度資源。 |
AUTOSCALING |
執行個體啟動的原因,可能是設定的縮放比例係數 (例如 CPU 使用率、要求處理量等),或是現有容量不足以因應目前流量。 |
DEPLOYMENT_ROLLOUT |
因部署、流量拆分調整或部署健康狀態檢查,導致流量在修訂版本之間轉移,因此啟動執行個體。 |
寫入容器記錄檔
從服務、工作或 worker 集區寫入記錄時,只要記錄寫入下列任一位置,Cloud Logging 就會自動擷取記錄:
- 標準輸出內容 (
stdout) 或標準錯誤 (stderr) 串流 /var/log目錄下的任何檔案- syslog (
/dev/log) - 使用 Cloud Logging 用戶端程式庫寫入的記錄,支援多種常用語言
大多數開發人員應使用標準輸出內容和標準錯誤寫入記錄。
寫入這些支援位置的容器記錄會自動與 Cloud Run 服務、修訂版本和位置、Cloud Run worker 集區、修訂版本和位置,或 Cloud Run 工作建立關聯。Error Reporting 會擷取並回報這些記錄中的例外狀況。
整合式記錄功能可平衡可靠性和資源用量,適用於大多數應用程式。使用整合式記錄功能寫入記錄項目,不會耗用 Cloud Logging API 每分鐘 entries.write 要求數的配額。
如果應用程式需要更高的磁碟區或可靠性,建議您直接使用 Cloud Logging API,可以在應用程式中做為程式庫,或做為獨立的邊車容器。
在記錄中使用簡單文字與結構化 JSON
當您寫入記錄時,您可以傳送簡易文字字串或傳送一行序列化 JSON (又稱為「結構化」資料)。Cloud Logging 會擷取並剖析這項資訊,然後放入 jsonPayload。相較之下,簡單的文字訊息會放在 textPayload 中。
寫入結構化記錄檔
下列程式碼片段說明如何寫入結構化記錄項目。此外,也會說明如何將記錄訊息與對應的要求記錄建立關聯。
Node.js
Python
Go
每個記錄項目的結構都由 Entry 類型提供:
記錄 Entry struct 時,系統會呼叫 String 方法,將其封送至 Cloud Logging 預期的 JSON 格式:
Java
在 logback.xml 設定中設定 Logging Logback 附加程式,即可啟用 JSON 記錄功能,並搭配 Logback 和 SLF4J 使用:
設定 LoggingAppender,將記錄以結構化 JSON 格式重新導向至標準輸出內容 (stdout),以便 Cloud Run 擷取。詳情請參閱 Logback 設定。
這會產生下列輸出記錄結構:
訊息中的特殊 JSON 欄位
以 JSON 字典形式提供結構化記錄時,某些特殊欄位會從 jsonPayload 中移除,並如特殊欄位說明文件所述,寫入系統所產生 LogEntry 的對應欄位。
例如,若 JSON 含有 severity 屬性,系統會從 jsonPayload 將其移除,並改以記錄項目的 severity 形式顯示。如果存在 message 屬性,則會用作記錄項目的主要顯示文字。如要進一步瞭解特殊屬性,請參閱下方的「記錄資源」一節。
將容器記錄與要求記錄建立關聯 (僅限服務)
在 Logs Explorer 中,由相同 trace 關聯的記錄檔會以「父項-子項」格式顯示:點選要求記錄項目左側的三角形圖示時,與該要求相關的容器記錄檔會顯示在要求記錄檔下方。
除非您使用 Cloud Logging 用戶端程式庫,否則容器記錄不會自動與要求記錄建立關聯。如要在不使用用戶端程式庫的情況下,將容器記錄與要求記錄建立關聯,您可以使用結構化 JSON 記錄行,其中包含 logging.googleapis.com/trace 欄位,以及從 X-Cloud-Trace-Context 標頭擷取的追蹤 ID,如上述結構化記錄範例所示。
控管要求記錄資源用量 (僅限服務)
要求記錄會自動建立。雖然您無法直接從 Cloud Run 控制要求記錄的數量,但可以使用 Cloud Logging 的記錄排除功能。
Logging 代理程式注意事項
如果您曾搭配特定 Google Cloud 產品 (例如 Compute Engine) 使用 Cloud Logging,可能也用過 Cloud Logging Logging 代理程式。Cloud Run 內建記錄收集功能,因此不使用 Logging 代理程式。
Logging 資源名稱
Cloud Run 的記錄資源名稱如下:
- Cloud Run 修訂版本 (
cloud_run_revision)。 - Cloud Run 工作 (
cloud_run_job)。
- Cloud Run 工作站集區 (
cloud_run_workerpool)。 - Cloud Run 執行個體 (
cloud_run_instance)。
記錄資源
在 Logs Explorer 中點選記錄項目,即可開啟 JSON 格式的記錄項目,進一步查看所需詳細資料。
記錄項目中的所有欄位 (例如時間戳記、嚴重性和 httpRequest) 均為標準欄位,詳情請參閱記錄項目說明文件。
Cloud Run 會新增額外的中繼資料,方便您識別記錄來源。包括(您在 Cloud Run 服務上設定的標籤)和 Cloud Run 專屬的資源標籤。
服務的記錄項目欄位
以下是 Cloud Run 服務記錄項目中的欄位清單:
| 欄位 | 值和備註 |
|---|---|
LogEntry.labels.instanceId |
這個 ID 會對應至這項服務中的特定執行個體,並隨著服務規模調整。 |
LogEntry.labels.run.googleapis.com/base_image_versions |
服務使用的基本映像檔版本。只有從來源部署的服務,且已啟用自動安全性更新時,才會顯示這個選項。 |
LogEntry.labels.run.googleapis.com/cloud_event_id |
CloudEvent ID。只有從 Eventarc 接收事件的服務才會顯示。 |
LogEntry.labels.run.googleapis.com/cloud_event_source |
CloudEvent 來源。只有從 Eventarc 接收事件的服務才會顯示。 |
LogEntry.labels.mylabel,LogEntry.labels.mysecondlabel |
您在服務上設定的標籤。 |
LogEntry.logName |
識別記錄,例如要求記錄、標準錯誤、標準輸出內容等。 |
LogEntry.resource.labels.location |
識別服務的 Google Cloud 位置。 |
LogEntry.resource.labels.project_id |
部署服務的專案。 |
LogEntry.resource.labels.revision_name |
處理要求的修訂版本。 |
LogEntry.resource.labels.service_name |
處理要求的服務。 |
LogEntry.resource.type |
cloud_run_revision:Cloud Run 資源類型。 |
以下是 Cloud Run 服務的要求記錄項目範例:
{
httpRequest: {…}
insertId: "5c82b3d1000ece0000000000"
labels: {
instanceId: "00bf4bf00000fb59c906a00000c9e29c2c4e06dce91500000000056008d2b6460f163c0057b97b2345f2725fb2423ee5f0bafd36df887fdb1122371563cf1ff453717282afe000001"
mylabel: "mylabelvalue"
mysecondlabel: "mysecondlabelvalue"
}
logName: "projects/my-project/logs/run.googleapis.com%2Frequests"
receiveTimestamp: "2019-03-08T18:26:25.981686167Z"
resource: {
labels: {
configuration_name: "myservice"
location: "europe-west1"
project_id: "my-project"
revision_name: "myservice-00002"
service_name: "myservice"
}
type: "cloud_run_revision"
}
severity: "INFO"
timestamp: "2019-03-08T18:26:25.970397Z"
}
工作的記錄項目欄位
以下是 Cloud Run 工作的記錄項目中可能包含的欄位清單:
| 欄位 | 值和備註 |
|---|---|
LogEntry.labels.instanceId |
這個 ID 會對應至用於特定工作執行作業或任務執行作業的特定執行個體。 |
LogEntry.labels.mylabel、LogEntry.labels.mysecondlabel |
您為工作設定的標籤。 |
LogEntry.logName |
識別記錄,例如標準錯誤、標準輸出內容等。 |
LogEntry.resource.labels.location |
識別 Google Cloud 工作的位置。 |
LogEntry.resource.labels.project_id |
部署工作的專案。 |
LogEntry.resource.labels.job_name |
工作名稱。 |
LogEntry.labels.execution_name |
工作執行的名稱。 |
LogEntry.labels.task_index |
工作索引。 |
LogEntry.labels.task_attempt |
這項工作的嘗試次數。 |
LogEntry.resource.type |
cloud_run_job:Cloud Run 資源類型。 |
worker 集區的記錄項目欄位
以下是 Cloud Run worker 集區記錄項目中的欄位清單:
| 欄位 | 值和備註 |
|---|---|
LogEntry.labels.instanceId |
這個 ID 會對應至這個 worker 集區中的特定執行個體,並隨著集區擴充和縮減。 |
LogEntry.labels.mylabel、LogEntry.labels.mysecondlabel |
您在 worker 集區設定的標籤。 |
LogEntry.logName |
識別記錄,例如標準錯誤、標準輸出內容等。 |
LogEntry.resource.labels.location |
worker 集區的 Google Cloud 位置。 |
LogEntry.resource.labels.project_id |
部署 worker 集區的專案。 |
LogEntry.resource.labels.workerpool_name |
worker 集區的名稱。 |
LogEntry.resource.type |
cloud_run_workerpool:Cloud Run 資源類型。 |
執行個體的記錄項目欄位
以下是 Cloud Run 執行個體記錄項目中的欄位清單:
| 欄位 | 值和備註 |
|---|---|
LogEntry.labels.instance_name |
執行個體名稱。 |
LogEntry.labels.instanceId |
這個 ID 會對應至特定版本的 Cloud Run 執行個體,並在每次重新啟動執行個體時變更。 |
LogEntry.labels.mylabel、LogEntry.labels.mysecondlabel |
您在執行個體上設定的標籤。 |
LogEntry.logName |
識別記錄,例如標準錯誤、標準輸出內容等。 |
LogEntry.resource.labels.location |
執行個體的 Google Cloud 位置。 |
LogEntry.resource.labels.project_id |
部署執行個體的專案。 |
後續步驟
- 使用 Gemini Cloud Assist 調查功能診斷問題、收集可做為行動依據的洞察資料,以及解決問題。如要進一步瞭解如何使用 Logs Explorer 啟動調查,請參閱 Gemini 說明文件中的「使用 Gemini Cloud Assist 調查功能排解問題」。