Configura Error Reporting en Amazon EC2

Error Reporting te permite agregar fallas y diagnosticar excepciones de tiempo de ejecución de tus aplicaciones de EC2. Puedes enviar datos de errores transmitiendo registros a Cloud Logging o llamando directamente a la API de Error Reporting. Si usas Logging, tus entradas de registro deben cumplir con los requisitos de formato.

Usa Logging para informar sobre errores

Para conectar tus aplicaciones EC2 a Error Reporting, envía tus excepciones, o bien otros errores a Logging.

Por ejemplo:

  1. Conecta el sistema de Amazon Web Services (AWS) a Google Cloud. Para obtener más información, consulta Instala el agente de Logging en VMs individuales.
  2. Instala el agente de Logging google-fluentd según corresponda a tu entorno. Para obtener instrucciones, consulta Instala el agente de Logging.
  3. Modifica tu aplicación para que registre las excepciones y sus seguimientos de pila en Logging.

    Debes incluir toda la información de un solo error o excepción en la misma entrada de registro, incluidos todos los marcos de cualquier registro de seguimiento de pila. Si no se incluye toda la información, es posible que Error Reporting no detecte el error. Puedes usar el formato JSON estructurado para las cargas útiles de las entrada de registro y, así, incluir diferentes tipos de información para cada error.

Java

Agrega lo siguiente a tu archivo pom.xml:

<dependency>
  <groupId>org.fluentd</groupId>
  <artifactId>fluent-logger</artifactId>
  <version>0.3.4</version>
</dependency>

Luego, usa un código como el siguiente para enviar los datos de excepción:

public class ExceptionUtil {
  private static FluentLogger ERRORS = FluentLogger.getLogger("myapp");

  public static void main(String[] args) {
    try {
      throw new Exception("Generic exception for testing Stackdriver");
    } catch (Exception e) {
      report(e);
    }
  }

  public static void report(Throwable ex) {
    StringWriter exceptionWriter = new StringWriter();
    ex.printStackTrace(new PrintWriter(exceptionWriter));
    Map<String, Object> data = new HashMap<>();
    data.put("message", exceptionWriter.toString());
    Map<String, String> serviceContextData = new HashMap<>();
    serviceContextData.put("service", "myapp");
    data.put("serviceContext", serviceContextData);
    // ... add more metadata
    ERRORS.log("errors", data);
  }
}

Python

Primero, instala la biblioteca fluent-logger-python:

sudo pip install fluent-logger

Luego, usa un código como el siguiente para enviar los datos de excepción:

import traceback

import fluent.event
import fluent.sender


def simulate_error():
    fluent.sender.setup("myapp", host="localhost", port=24224)

    def report(ex):
        data = {}
        data["message"] = "{0}".format(ex)
        data["serviceContext"] = {"service": "myapp"}
        # ... add more metadata
        fluent.event.Event("errors", data)

    # report exception data using:
    try:
        # simulate calling a method that's not defined
        raise NameError
    except Exception:
        report(traceback.format_exc())

Node.js

Primero, instala la biblioteca