Java 用 Error Reporting の設定

Java アプリケーションから Error Reporting にエラーレポートを送信するには、Java 用 Error Reporting パッケージを使用します。

Error Reporting は、App EngineCompute EngineGoogle Kubernetes Engine などの一部の Google Cloud サービスに統合されています。Error Reporting は、こうしたサービスで実行されるアプリケーションによって Cloud Logging に記録されたエラーを表示します。詳細については、このページの Google Cloud Platform での実行をご覧ください。

Logging を使用して、エラーデータを Error Reporting に送信することもできます。データ形式の要件については、Logging のエラー メッセージの形式設定をご覧ください。

始める前に

  1. Google アカウントにログインします。

    Google アカウントをまだお持ちでない場合は、新しいアカウントを登録します。

  2. Cloud Console のプロジェクト セレクタページで、Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタのページに移動

  3. Google Cloud プロジェクトに対して課金が有効になっていることを確認します。プロジェクトに対して課金が有効になっていることを確認する方法を学習する

  4. Error Reporting API を有効にします。

    API を有効にする

クライアント ライブラリのインストール

Java 用 Error Reporting パッケージを使用すると、ほぼすべての場所で動作している Java アプリケーションから報告されるエラーをモニタリングして表示できます。

インストールの詳細については、Java 用 Error Reporting パッケージのドキュメントをご覧ください。公開バグトラッカーを使用して問題を報告することもできます。

クライアント ライブラリの構成

Java 用 Error Reporting パッケージの動作をカスタマイズできます。Java API リファレンス ドキュメントをご覧ください。

エラーの報告

Java 用 Error Reporting パッケージは、カスタム エラーイベントを報告する必要がある場合にのみ使用します。

Cloud Logging Logback Appenderjava.util.logging Stackdriver Handler を使用して記録された例外は、Error Reporting Console に自動的に報告されます。

次のサンプルは、API を使用してカスタム エラーイベントを報告する方法を示しています。


import com.google.cloud.ServiceOptions;
import com.google.cloud.errorreporting.v1beta1.ReportErrorsServiceClient;
import com.google.devtools.clouderrorreporting.v1beta1.ErrorContext;
import com.google.devtools.clouderrorreporting.v1beta1.ProjectName;
import com.google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent;
import com.google.devtools.clouderrorreporting.v1beta1.SourceLocation;

/**
 * Snippet demonstrates using the Stackdriver Error Reporting API to report a custom error event.
 * <p>
 * This library is not required on App Engine, errors written to stderr are automatically written
 * to Stackdriver Error Reporting.
 * It is also not required if you are writing logs to Stackdriver Logging.
 * Errors written to Stackdriver Logging that contain an exception or stack trace
 * are automatically written out to Stackdriver Error Reporting.
 */
public class QuickStart {
  public static void main(String[] args) throws Exception {

    // Google Cloud Platform Project ID
    String projectId = (args.length > 0) ? args[0] : ServiceOptions.getDefaultProjectId();
    ProjectName projectName = ProjectName.of(projectId);

    // Instantiate an Error Reporting Client
    try (ReportErrorsServiceClient reportErrorsServiceClient = ReportErrorsServiceClient.create()) {

      // Custom error events require an error reporting location as well.
      ErrorContext errorContext = ErrorContext.newBuilder()
          .setReportLocation(SourceLocation.newBuilder()
              .setFilePath("Test.java")
              .setLineNumber(10)
              .setFunctionName("myMethod")
              .build())
          .build();

      //Report a custom error event
      ReportedErrorEvent customErrorEvent = ReportedErrorEvent.getDefaultInstance()
          .toBuilder()
          .setMessage("custom error event")
          .setContext(errorContext)
          .build();
      // Report an event synchronously, use .reportErrorEventCallable for asynchronous reporting.
      reportErrorsServiceClient.reportErrorEvent(projectName, customErrorEvent);
    }
  }
}
エラー統計情報と個々のイベントに関するデータを取得して管理する方法については、Java API リファレンス ドキュメントをご覧ください。

Google Cloud での実行

Go 用 Error Reporting パッケージを使用するには、Identity and Access Management Error Reporting Writer ロールが必要です。ほとんどの Google Cloud コンピューティング プラットフォームでは、デフォルトでこの役割が付与されます。

次の Google Cloud 環境で、Java の Error Reporting を構成できます。

App Engine フレキシブル環境

App Engine は、デフォルトで Error Reporting Writer ロールを付与します。

Java 用 Error Reporting パッケージは、明示的に認証情報を提示しなくても使用できます。

App Engine のフレキシブル環境のアプリケーションでは、Error Reporting が自動的に有効になります。特別な設定は必要ありません。

@WebServlet(name = "Error reporting", value = "/error")
public class ErrorReportingExample extends HttpServlet {

  private Logger logger = Logger.getLogger(ErrorReportingExample.class.getName());

  @Override
  public void doGet(HttpServletRequest req, HttpServletResponse resp)
      throws IOException, ServletException {

    // errors logged to stderr / Cloud logging with exceptions are automatically reported.
    logger.log(Level.SEVERE, "exception using log framework", new IllegalArgumentException());

    // use the error-reporting client library only if you require logging custom error events.
    logCustomErrorEvent();

    // runtime exceptions are also automatically reported.
    throw new RuntimeException("this is a runtime exception");
  }

  private void logCustomErrorEvent() {
    try (ReportErrorsServiceClient reportErrorsServiceClient = ReportErrorsServiceClient.create()) {
      // Custom error events require an error reporting location as well.
      ErrorContext errorContext =
          ErrorContext.newBuilder()
              .setReportLocation(
                  SourceLocation.newBuilder()
                      .setFilePath("Test.java")
                      .setLineNumber(10)
                      .setFunctionName("myMethod")
                      .build())
              .build();
      // Report a custom error event
      ReportedErrorEvent customErrorEvent =
          ReportedErrorEvent.getDefaultInstance()
              .toBuilder()
              .setMessage("custom error event")
              .setContext(errorContext)
              .build();

      // default project id
      ProjectName projectName = ProjectName.of(ServiceOptions.getDefaultProjectId());
      reportErrorsServiceClient.reportErrorEvent(projectName, customErrorEvent);
    } catch (Exception e) {
      logger.log(Level.SEVERE, "Exception encountered logging custom event", e);
    }
  }
}

Google Kubernetes Engine

GKE では、次のサンプル コマンドのように、クラスタの作成時に cloud-platform アクセス スコープを追加する必要があります。

gcloud container clusters create example-cluster-name --scopes https://www.googleapis.com/auth/cloud-platform

Compute Engine

Compute Engine VM インスタンスを使用する場合は、各インスタンスに cloud-platform アクセス スコープを追加します。Google Cloud Console から新しいインスタンスを作成する場合は、[インスタンスの作成] パネルの [ID と API へのアクセス] のセクションで行います。Compute Engine のデフォルト サービス アカウントまたは別のサービス アカウントを使用し、[ID と API へのアクセス] セクションの [すべての Cloud API に完全アクセス権を許可] を選択します。どのサービス アカウントを選択する場合でも、Cloud Console の [IAM と管理] セクションで Error Reporting Writer ロールが付与されていることを確認してください。

ローカルやその他の場所での実行

自分のワークステーション、データセンターのコンピュータ、別のクラウド プロバイダの VM インスタンスでライブラリを実行するなど、Google Cloud の外部で Java 用 Error Reporting パッケージを使用するには、Google Cloud プロジェクト ID と適切なサービス アカウント認証情報を Java 用 Error Reporting パッケージに直接提供する必要があります。

手動でサービス アカウントの認証情報を作成して取得できます。[ロール] フィールドを指定する場合は、Error Reporting Writer ロールを使用します。Identity and Access Management のロールの詳細については、アクセス制御ガイドをご覧ください。

エラーレポートの表示

デプロイ後は、Cloud Console Error Reporting ダッシュボードでエラーレポートを表示できます。

Error Reporting ダッシュボードに移動

詳細については、エラーの表示をご覧ください。