疑難排解

如果 Error Reporting 未顯示應用程式錯誤,請按照下列步驟排解問題。

事前準備

  1. 確認 Error Reporting 可以分析記錄項目。

    Error Reporting 是以 Cloud Logging 為基礎建構的全球服務,可在符合下列所有條件時分析記錄檔項目:

    • Assured Workloads 已停用。詳情請參閱「Assured Workloads 總覽」。
    • 所有儲存記錄項目的記錄 bucket 均已停用客戶自行管理的加密金鑰 (CMEK)。如要瞭解如何判斷記錄儲存空間的 CMEK 設定,請參閱驗證金鑰啟用狀態
    • 記錄檔 bucket 符合下列其中一項條件:
      • 記錄 bucket 會儲存在記錄項目來源的專案中。
      • 記錄項目已轉送至專案,然後該專案將這些記錄項目儲存在其擁有的記錄 bucket 中。
    如果您將記錄項目儲存在已啟用 CMEK 的記錄 bucket 中,仍可使用 Error Reporting。不過,您必須使用 Error Reporting 用戶端程式庫或 Error Reporting API。詳情請參閱「Error Reporting API 總覽」和「Error Reporting 用戶端程式庫」。

    如要查看已設定的接收器清單,請執行下列指令:

    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_Requiredlogs-from-samples 接收器轉送的記錄項目,因為記錄 bucket 儲存在轉送記錄項目的同一專案中。
    • Error Reporting 無法分析名為 test-logs 的記錄檔值區中儲存的記錄項目,因為 my-team-project 中的接收器會將記錄項目轉送至其他專案中的記錄檔值區。
  2. 確認您已安裝 Google Cloud CLI

  3. 確認已為 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 時

  1. Enable the required API.

    Enable the API

  2. 傳送測試錯誤

    嘗試將錯誤手動傳送至服務。

    您可以使用下列 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_IDAPI_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
    
  3. 確認已傳送的酬載

    請確認應用程式在傳送例外狀況資料至 API 時使用的是正確的格式,且包含所需的屬性。

系統已記錄堆疊追蹤,但 Error Reporting 無法辨識

您使用 jsonPayloadmessage 欄位記錄錯誤,並預期 Error Reporting 會擷取該錯誤。但系統不會擷取錯誤資料。

如要解決這項問題,請嘗試下列方法:

  • 確認 jsonPayload 不含 stack_traceexception 欄位。如果存在這些欄位,系統就不會評估 message 欄位。

  • 確認堆疊追蹤的結構採用支援的程式設計語言格式。如果使用不支援的格式,Error Reporting 就無法擷取堆疊追蹤。

詳情請參閱「記錄中的格式錯誤」。