本文說明錯誤報告的常見疑難排解情境。
傳送至 Error Reporting API 的錯誤事件不會顯示
您可以使用 Error Reporting API,將錯誤事件傳送至 Google Cloud 專案。不過,這些事件不會顯示在「Error Reporting」頁面上。
如要解決這個問題,請按照下列步驟操作:
確認已啟用 Error Reporting API。
Enable the required API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.開啟 Cloud Shell,並使用 Google Cloud CLI 驗證是否能將錯誤事件傳送至專案:
執行下列指令:
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)"前往「錯誤報告」頁面,確認頁面是否顯示名為
TestError: msg的錯誤。前往「Logs Explorer」(記錄檔探索工具) 頁面,並搜尋記錄項目中的
TestError。系統會自動建立記錄項目。
確認應用程式是否將錯誤事件傳送至
report端點,以及應用程式是否將要求主體格式化為ReportedErrorEvent物件。您也應確認是否正在建立記錄項目。 使用 Error Reporting API 時,系統會自動產生含有格式正確錯誤訊息的記錄項目,並寫入 Cloud Logging。這些記錄項目會寫入logName格式如下的記錄:projects/PROJECT_ID/clouderrorreporting.googleapis.com%2Freported_errors
顯示錯誤事件,但 Error Reporting API 已停用
您已停用 Error Reporting API。但 Google Cloud 控制台的「Error Reporting」頁面會顯示錯誤事件。
請放心,這是正常情況。 系統會回應對 report 端點發出的 Error Reporting API 呼叫,建立錯誤事件。不過,當 Error Reporting 可以分析記錄資料時,也會推斷出錯誤事件。
系統不會從記錄資料推斷錯誤事件
您希望 Error Reporting 掃描記錄檔資料,並推斷錯誤事件。不過,即使記錄項目記錄了錯誤資料,Error Reporting 頁面也不會顯示任何錯誤事件。
如要解決這個問題,請按照下列步驟操作:
確認 Error Reporting 可以分析記錄項目。
Error Reporting 是以 Cloud Logging 為基礎建構的全球服務,可分析記錄檔項目,但前提是必須符合下列所有條件:
- Assured Workloads 已停用。詳情請參閱「Assured Workloads 總覽」。
- 客戶自行管理的加密金鑰 (CMEK) 已在儲存記錄項目的所有記錄值區中停用。Error Reporting 無法將記錄項目儲存在已啟用 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 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}}}'前往「Logs Explorer」(記錄檔探索工具) 頁面,並搜尋記錄項目中的
Test Error。這個記錄項目是由 gcloud CLI 產生。如果記錄項目未連結至錯誤群組,請稍候約一分鐘,然後重新整理頁面。系統會在擷取記錄檔項目後偵測錯誤事件。
前往「Error Reporting」頁面,確認頁面顯示標題為
Test Error的錯誤。
前往「記錄檔探索工具」頁面,確認應用程式正在寫入格式正確的記錄檔項目。
找出包含應用程式傳送例外狀況資料的記錄項目,並驗證格式。如果格式不正確,請更新應用程式。
記錄項目包含堆疊追蹤,但未建立任何錯誤事件
您產生記錄項目,其中的 message 欄位包含堆疊追蹤。不過,「Error Reporting」頁面並未列出對應的錯誤事件。
如要解決這項問題,請嘗試下列方法:
確認
jsonPayload不含stack_trace或exception欄位。如果存在這些欄位,系統就不會評估message欄位。確認堆疊追蹤的結構採用支援的程式設計語言格式。如果使用不支援的格式,Error Reporting 就無法擷取堆疊追蹤。
詳情請參閱「格式化記錄項目以回報錯誤事件」。