トラブルシューティング

Error Reporting にご使用のアプリケーションのエラーが表示されない場合は、次の手順でトラブルシューティングを行います。

始める前に

  1. Error Reporting でログエントリを分析できることを確認します。

    Error Reporting は Cloud Logging 上に構築されたグローバル サービスであり、次の条件をすべて満たす場合にログエントリを分析できます。

    • Assured Workloads が無効になっている。詳細については、Assured Workloads の概要をご覧ください。
    • ログエントリを保存するすべてのログバケットで、顧客管理の暗号鍵(CMEK)が無効になっている。ログバケットの CMEK 構成を確認する方法については、鍵の有効化を確認するをご覧ください。
    • ログバケットが次のいずれかを満たしている。
      • ログバケットがログエントリの元のプロジェクトに保存されている。
      • ログエントリがプロジェクトに転送され、そのプロジェクトがそれらのログエントリを、所有するログバケットに保存した。
    CMEK が有効になっているログバケットにログエントリを保存している場合でも、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 の各シンクによって転送されるログエントリを分析できます。
    • my-team-project のシンクがログエントリを別のプロジェクトのログバケットに転送するため、Error Reporting は test-logs という名前のログバケットに保存されているログエントリを分析できません。
  2. Google Cloud CLI がインストールされていることを確認します。

  3. gcloud CLI で beta コンポーネントが有効になっていることを確認します。

ログの使用時

このセクションでは、エラーデータが Cloud Logging バケットに書き込まれ、Error Reporting を使用してこれらのログバケットを自動的に分析する場合のトラブルシューティング サポートについて説明します。

サンプル ログエントリを生成する

プロジェクト設定を確認するには、次の gcloud コマンドを使用して、Error Reporting によって取得されるログエントリをプログラムで生成します。

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 がエラーをキャプチャすることを想定しています。ただし、エラーデータはキャプチャされません。

この問題を解決するには、次の手順を試してください。

  • jsonPayloadstack_trace フィールドまたは exception フィールドが含まれていないことを確認します。これらのフィールドが存在する場合、message フィールドは評価されません。

  • スタック トレース構造がサポートされているプログラミング言語形式のいずれかであることを確認します。サポートされていない形式が使用されている場合、スタック トレースは Error Reporting によってキャプチャされません。

詳細については、ログの形式設定エラーをご覧ください。