如果 Error Reporting 未顯示應用程式錯誤,請按照下列步驟排解問題。
事前準備
確認 Error Reporting 可以分析記錄項目。
Error Reporting 是以 Cloud Logging 為基礎建構的全球服務,可在符合下列所有條件時分析記錄檔項目:
- Assured Workloads 已停用。詳情請參閱「Assured Workloads 總覽」。
- 所有儲存記錄項目的記錄 bucket 均已停用客戶自行管理的加密金鑰 (CMEK)。如要瞭解如何判斷記錄儲存空間的 CMEK 設定,請參閱驗證金鑰啟用狀態。
- 記錄檔 bucket 符合下列其中一項條件:
- 記錄 bucket 會儲存在記錄項目來源的專案中。
- 記錄項目已轉送至專案,然後該專案將這些記錄項目儲存在其擁有的記錄 bucket 中。
如要查看已設定的接收器清單,請執行下列指令:
gcloud logging sinks list
指令會傳回類似以下的輸出內容:
NAME DESTINATION FILTER _Default logging.googleapis.com/projects/my-team-project/locations/global/buckets/_Default NOT LOG_ID("cloudaudit.googleapis.com/activity") AND NOT LOG_ID("externalaudit.googleapis.com/activity") AND NOT LOG_ID("cloudaudit.googleapis.com/system_event") AND NOT LOG_ID("externalaudit.googleapis.com/system_event") AND NOT LOG_ID("cloudaudit.googleapis.com/access_transparency") AND NOT LOG_ID("externalaudit.googleapis.com/access_transparency") _Required logging.googleapis.com/projects/my-team-project/locations/global/buckets/_Required LOG_ID("cloudaudit.googleapis.com/activity") OR LOG_ID("externalaudit.googleapis.com/activity") OR LOG_ID("cloudaudit.googleapis.com/system_event") OR LOG_ID("externalaudit.googleapis.com/system_event") OR LOG_ID("cloudaudit.googleapis.com/access_transparency") OR LOG_ID("externalaudit.googleapis.com/access_transparency") logs-from-samples logging.googleapis.com/projects/my-team-project/locations/global/buckets/sample-bucket (empty filter) regional_logs logging.googleapis.com/projects/my-team-project/locations/europe-west1/buckets/bucket_for_regional_logs (empty filter) test-logs logging.googleapis.com/projects/team-b-project/locations/global/buckets/test-bucket (empty filter)
在本範例中,記錄檔項目的來源 Google Cloud 專案為
my-team-project
。因此:- Error Reporting 可以分析由
_Default
、_Required
和logs-from-samples
接收器轉送的記錄項目,因為記錄 bucket 儲存在轉送記錄項目的同一專案中。 - Error Reporting 無法分析名為
test-logs
的記錄檔值區中儲存的記錄項目,因為my-team-project
中的接收器會將記錄項目轉送至其他專案中的記錄檔值區。
確認您已安裝 Google Cloud CLI。
確認已為 gcloud CLI 啟用
beta
元件。
使用記錄時
如果錯誤資料寫入 Cloud Logging 值區,且您依賴 Error Reporting 自動分析這些記錄檔值區,請參閱本節的疑難排解支援。
產生記錄項目樣本
如要確認專案設定,您可以透過程式輔助方式產生記錄項目,並使用下列 gcloud
指令,讓錯誤報表擷取該項目:
gcloud logging write --payload-type=json test-errors-log \
'{"serviceContext":
{"service": "manual-testing"},
"message": "Test Error\n at /test.js:42:42",
"context": {"httpRequest":
{"url": "/test","method": "GET","responseStatusCode": 500}}}'
接著開啟 Error Reporting,確認您看到新建立的錯誤。
確認記錄項目格式
前往 Cloud Logging 頁面,找出包含應用程式傳送例外狀況資料的記錄項目。
確認該記錄項目使用符合的格式。
使用 Error Reporting API 時
-
Enable the required API.
傳送測試錯誤
嘗試將錯誤手動傳送至服務。
您可以使用下列
gcloud
指令,向 Error Reporting 回報測試錯誤:gcloud beta error-reporting events report --service Manual --service-version test1 \ --message "java.lang.TestError: msg at com.example.TestClass.test(TestClass.java:51) at com.example.AnotherClass(AnotherClass.java:25)"
您可以使用 cURL 指令來測試 REST API 呼叫。在傳送下列指令前,使用有效的值取代
PROJECT_ID
與API_KEY
:curl -X POST -H "Content-Type: application/json" \ -d '{"message":"java.lang.TestError: msg\n\tat com.example.TestClass.test(TestClass.java:51)\n\tat com.example.AnotherClass(AnotherClass.java:25)","serviceContext":{"service":"manual-testing"}}' \ https://clouderrorreporting.googleapis.com/v1beta1/projects/PROJECT_ID/events:report?key=API_KEY
確認已傳送的酬載
請確認應用程式在傳送例外狀況資料至 API 時使用的是正確的格式,且包含所需的屬性。
系統已記錄堆疊追蹤,但 Error Reporting 無法辨識
您使用 jsonPayload
的 message
欄位記錄錯誤,並預期 Error Reporting 會擷取該錯誤。但系統不會擷取錯誤資料。
如要解決這項問題,請嘗試下列方法:
確認
jsonPayload
不含stack_trace
或exception
欄位。如果存在這些欄位,系統就不會評估message
欄位。確認堆疊追蹤的結構採用支援的程式設計語言格式。如果使用不支援的格式,Error Reporting 就無法擷取堆疊追蹤。
詳情請參閱「記錄中的格式錯誤」。