Melengkapi aplikasi Java untuk Error Reporting

Anda dapat mengirim peristiwa error ke Error Reporting dari aplikasi Java menggunakan paket Error Reporting untuk Java. Gunakan paket Error Reporting untuk Java guna membuat grup error untuk kasus berikut:

  • Bucket log yang berisi entri log Anda memiliki kunci enkripsi yang dikelola pelanggan (CMEK).
  • Bucket log memenuhi salah satu hal berikut:
    • Bucket log disimpan dalam project yang sama dengan tempat asal entri log.
    • Entri log dirutekan ke project, lalu project tersebut menyimpan entri log tersebut dalam bucket log miliknya.
  • Anda ingin melaporkan peristiwa error kustom.

Pelaporan Error terintegrasi dengan beberapa Google Cloud layanan, seperti Cloud Run Functions dan App Engine, Compute Engine, dan Google Kubernetes Engine. Error Reporting menampilkan peristiwa error yang dicatat ke Cloud Logging oleh aplikasi yang berjalan di layanan tersebut. Untuk mengetahui informasi selengkapnya, buka Berjalan di Google Cloud di halaman ini.

Anda juga dapat mengirim peristiwa error ke Error Reporting menggunakan Logging. Untuk mengetahui informasi tentang persyaratan pemformatan data, baca artikel Memformat entri log untuk melaporkan peristiwa error.

Sebelum memulai

  1. Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Error Reporting API .

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Error Reporting API .

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

Menginstal library klien

Paket Error Reporting untuk Java memungkinkan Anda memantau dan melihat peristiwa error yang dilaporkan oleh aplikasi Java yang berjalan di hampir semua tempat.

    Jika Anda menggunakan Maven, tambahkan kode berikut ke file pom.xml Anda: Untuk informasi lebih lanjut tentang BOM, lihat BOM Library Google Cloud Platform.

    <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>com.google.cloud</groupId>
          <artifactId>libraries-bom</artifactId>
          <version>26.78.0</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>
    
    <dependencies>
      <dependency>
        <groupId>com.google.cloud</groupId>
        <artifactId>google-cloud-errorreporting</artifactId>
      </dependency>
    </dependencies>

    Jika menggunakan Gradle, tambahkan kode berikut ke dependensi Anda:

    implementation 'com.google.cloud:google-cloud-errorreporting:0.208.0-beta'

    Jika Anda menggunakan sbt, tambahkan kode berikut ke dependensi Anda:

    libraryDependencies += "com.google.cloud" % "google-cloud-errorreporting" % "0.208.0-beta"

    Jika menggunakan Visual Studio Code atau IntelliJ, Anda dapat menambahkan library klien ke project menggunakan plugin IDE berikut:

    Plugin menyediakan fungsi tambahan, seperti pengelolaan kunci untuk akun layanan. Lihat dokumentasi setiap plugin untuk mengetahui detailnya.

Untuk mengetahui informasi selengkapnya tentang penginstalan, baca dokumentasi untuk paket Pelaporan Error untuk Java. Anda juga dapat melaporkan masalah menggunakan issue tracker.

Mengonfigurasi library klien

Anda dapat menyesuaikan perilaku paket Pelaporan Error untuk Java. Lihat dokumentasi referensi Java API.

Menjalankan aplikasi di Google Cloud

Untuk membuat grup error menggunakan projects.events.report, akun layanan Anda memerlukan peran Error Reporting Writer (roles/errorreporting.writer).

Beberapa layanan Google Cloud secara otomatis memberikan peran Error Reporting Writer (roles/errorreporting.writer) kepada akun layanan yang sesuai. Namun, Anda harus memberikan peran ini ke akun layanan yang sesuai untuk beberapa layanan.

Cloud Run dan Cloud Run Functions

Akun layanan default yang digunakan oleh Cloud Run memiliki izin peran Error Reporting Writer (roles/errorreporting.writer).

Paket Pelaporan Error untuk Java dapat digunakan tanpa perlu memberikan kredensial secara eksplisit.

Cloud Run dikonfigurasi untuk menggunakan Error Reporting secara otomatis. Pengecualian JavaScript yang tidak tertangani akan muncul di Logging dan diproses oleh Error Reporting tanpa perlu menggunakan paket Error Reporting untuk Java.

Lingkungan fleksibel App Engine

App Engine memberikan peran Error Reporting Writer (roles/errorreporting.writer) ke akun layanan default Anda secara otomatis.

Paket Pelaporan Error untuk Java dapat digunakan tanpa perlu memberikan kredensial secara eksplisit.

Error Reporting diaktifkan secara otomatis untuk aplikasi lingkungan fleksibel App Engine. Tidak diperlukan penyiapan tambahan.

@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

Untuk menggunakan Error Reporting dengan Google Kubernetes Engine, lakukan hal berikut:

  1. Pastikan akun layanan yang akan digunakan oleh penampung Anda telah diberi peran Error Reporting Writer (roles/errorreporting.writer).

    Anda dapat menggunakan akun layanan default Compute Engine atau akun layanan kustom.

    Untuk mengetahui informasi tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.

  2. Buat cluster Anda dan berikan cloud-platform cakupan akses ke cluster.

    Misalnya, perintah pembuatan berikut menentukan cakupan akses cloud-platform dan akun layanan:

    gcloud container clusters create CLUSTER_NAME --service-account  SERVICE_ACCT_NAME --scopes=cloud-platform
    

Compute Engine

Untuk menggunakan Error Reporting dengan instance VM Compute Engine, lakukan langkah-langkah berikut:

  1. Pastikan akun layanan yang akan digunakan oleh instance VM Anda telah diberi peran Error Reporting Writer (roles/errorreporting.writer).

    Anda dapat menggunakan akun layanan default Compute Engine atau akun layanan kustom.

    Untuk mengetahui informasi tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.

  2. Di konsol Google Cloud , buka halaman VM instances.

    Buka instance VM

    Jika Anda menggunakan kotak penelusuran untuk menemukan halaman ini, pilih hasil yang subjudulnya adalah Compute Engine.

  3. Pilih instance VM yang ingin Anda beri cloud-platform cakupan akses.

  4. Klik Hentikan, lalu klik Edit.

  5. Di bagian Identity and API access, pilih akun layanan yang memiliki peran Error Reporting Writer (roles/errorreporting.writer).

  6. Di bagian Access scopes, pilih Allow full access to all Cloud APIs, lalu simpan perubahan Anda.

  7. Klik Start/Resume.

Contoh

Pengecualian yang dicatat menggunakan Cloud Logging Logback Appender atau java.util.logging Handler secara otomatis dilaporkan ke konsol Error Reporting.

Contoh berikut menunjukkan penggunaan library klien Java untuk melaporkan peristiwa error kustom:

import com.google.cloud.ServiceOptions;
import com.google.devtools.clouderrorreporting.v1beta1.ProjectName;
import com.google.devtools.clouderrorreporting.v1beta1.ReportErrorsServiceClient;
import com.google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;

/**
 * Snippet demonstrates using the Error Reporting API to report an exception.
 * <p>
 * When the workload runs on App Engine, GKE, Cloud Functions or another managed environment,
 * printing the exception's stack trace to stderr will automatically report the error
 * to Error Reporting.
 */
public class QuickStart {

  static String projectId;

  public static void main(String[] args) throws Exception {
    // Set your Google Cloud Platform project ID via environment or explicitly
    projectId = ServiceOptions.getDefaultProjectId();
    if (args.length > 0) {
      projectId = args[0];
    } else {
      String value = System.getenv("GOOGLE_CLOUD_PROJECT");
      if (value != null && value.isEmpty()) {
        projectId = value;
      }
    }

    try {
      throw new Exception("Something went wrong");
    } catch (Exception ex) {
      reportError(ex);
    }
  }

  /**
   * Sends formatted error report to Google Cloud including the error context.
   *
   * @param ex Exception containing the error and the context.
   * @throws IOException if fails to communicate with Google Cloud
   */
  private static void reportError(Exception ex) throws IOException {
    try (ReportErrorsServiceClient serviceClient = ReportErrorsServiceClient.create()) {
      StringWriter sw = new StringWriter();
      PrintWriter pw = new PrintWriter(sw);
      ex.printStackTrace(pw);

      ReportedErrorEvent errorEvent = ReportedErrorEvent.getDefaultInstance()
          .toBuilder()
          .setMessage(sw.toString())
          .build();
      // If you need to report an error asynchronously, use reportErrorEventCallable()
      // method
      serviceClient.reportErrorEvent(ProjectName.of(projectId), errorEvent);
    }
  }
}

Lihat Dokumentasi Referensi Java API tentang cara mengambil dan mengelola statistik error serta data untuk setiap peristiwa.

Menjalankan aplikasi di lingkungan pengembangan lokal

Untuk menggunakan paket Error Reporting untuk Java di lingkungan pengembangan lokal, seperti menjalankan library di workstation Anda sendiri, Anda harus memberikan kredensial default aplikasi lokal ke paket Error Reporting untuk Java. Untuk mengetahui informasi selengkapnya, lihat Mengautentikasi ke Error Reporting.

Untuk menggunakan contoh Java di halaman ini dalam lingkungan pengembangan lokal, instal dan lakukan inisialisasi gcloud CLI, lalu siapkan Kredensial Default Aplikasi dengan kredensial pengguna Anda.

  1. Instal Google Cloud CLI.

  2. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

  3. Jika Anda menggunakan shell lokal, buat kredensial autentikasi lokal untuk akun pengguna Anda:

    gcloud auth application-default login

    Anda tidak perlu melakukan langkah ini jika menggunakan Cloud Shell.

    Jika error autentikasi ditampilkan, dan Anda menggunakan penyedia identitas (IdP) eksternal, konfirmasi bahwa Anda telah login ke gcloud CLI dengan identitas gabungan Anda.

Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

Metode projects.events.report juga mendukung kunci API. Jika ingin menggunakan kunci API untuk autentikasi, Anda tidak perlu menyiapkan file Kredensial Default Aplikasi lokal. Untuk mengetahui informasi selengkapnya, lihat Membuat kunci API di dokumentasi autentikasi Google Cloud .

Melihat grup error

Di konsol Google Cloud , buka halaman Error Reporting:

Buka Error Reporting

Anda juga dapat menemukan halaman ini dengan menggunakan kotak penelusuran.

Untuk mengetahui informasi selengkapnya, lihat Melihat dan memfilter grup error.