Cómo registrar eventos de la aplicación con Node.js

Esta parte del instructivo de Bookshelf muestra cómo una app puede incorporar registros detallados para ayudar a detectar, depurar y supervisar los posibles problemas. El registro de eventos puede ayudarte a identificar y resolver problemas, durante el desarrollo y en la etapa de producción de la app.

Esta página forma parte de un instructivo de varias páginas. Ve a la aplicación Bookshelf en Node.js para comenzar desde el principio y leer las instrucciones de configuración.

Configuraciones

Copia el archivo config.json de la sección Autenticación de usuarios de este instructivo al directorio nodejs-getting-started/5-logging.

Instalar dependencias

Instala las dependencias en el directorio nodejs-getting-started/5-logging mediante npm:

    npm install

Ejecutar la aplicación en la máquina local

  1. Usa npm para iniciar un servidor web local:

        npm start
    
  1. En el navegador web, ingresa la siguiente dirección:

    http://localhost:8080

Implementar la aplicación en el entorno estándar de App Engine

  1. Implementa la app de muestra desde el directorio nodejs-getting-started/5-logging:

    gcloud app deploy
    
  2. En el navegador web, ingresa la siguiente dirección. Reemplaza [YOUR_PROJECT_ID] por el ID del proyecto:

    https://[YOUR_PROJECT_ID].appspot.com
    

Si actualizas tu app, podrás implementar la versión actualizada mediante el mismo comando que usaste para implementar la app por primera vez. La implementación nueva crea una versión nueva de la app y la convierte a la versión predeterminada. Se conservan las versiones anteriores de la aplicación. De forma predeterminada, el entorno estándar de App Engine escala a 0 instancias cuando no hay tráfico entrante a una versión, por lo que las versiones sin usar no deben tener costo. Sin embargo, todas estas versiones de la aplicación son recursos facturables.

Consulta la sección Limpiar en el paso final de este instructivo para obtener más información sobre la limpieza de recursos facturables, incluidas las versiones de la aplicación no predeterminadas.

Comprender el código

Después de implementar la app, es importante saber cuán está funcionando. Google Cloud Platform proporciona herramientas de seguimiento, registro, depuración y supervisión integradas en Google Cloud Platform Console para que puedas obtener información detallada de la actividad de tu app, lo que te permite identificar las tendencias o los problemas fundamentales.

La aplicación de Bookshelf de muestra usa Google Cloud Trace para realizar un seguimiento de las llamadas de RPC en la aplicación. Puedes ver estos seguimientos en Cloud Trace Dashboard. La aplicación de muestra usa Google Cloud Debug en conjunto con Cloud Source Repositories para ayudarte a depurar la aplicación cuando esté implementada. Para depurar la app de muestra, puedes usar el Panel de Cloud Debug.

// Activate Google Cloud Trace and Debug when in production
if (process.env.NODE_ENV === 'production') {
  require('@google-cloud/trace-agent').start();
  require('@google-cloud/debug-agent').start();
}

La app de muestra usa Winston, una biblioteca de registro para Node.js, junto con el middleware express-winston para administrar los registros de errores y solicitudes. El siguiente código configura el registro de todas las solicitudes que se envían a la app en la consola.

const requestLogger = expressWinston.logger({
  transports: [
    new StackdriverTransport(),
    new winston.transports.Console({
      json: false,
      colorize: colorize
    })
  ],
  expressFormat: true,
  meta: false
});

El siguiente bloque de código configura el registro de errores importantes que ocurren dentro de la app.

const errorLogger = expressWinston.errorLogger({
  transports: [
    new StackdriverTransport(),
    new winston.transports.Console({
      json: true,
      colorize: colorize
    })
  ]
});

Ahora que el registro se configuró, la app puede usarlo. El siguiente código agrega el middleware request-logging de logging.requestLogger a la aplicación.

app.use(logging.requestLogger);

Para administrar errores, el siguiente código instala el middleware error-logging de logging.errorLogger a la aplicación. Es importante agregar esto después de todos los otros elementos de middleware, pero antes de cualquier controlador de errores personalizado, de manera que los errores se informen con precisión.

app.use(logging.errorLogger);

// Basic 404 handler
app.use((req, res) => {
  res.status(404).send('Not Found');
});

// Basic error handler
app.use((err, req, res, next) => {
  /* jshint unused:false */
  // If our routes specified a specific response, then send that. Otherwise,
  // send a generic message so as not to leak anything.
  res.status(500).send(err.response || 'Something broke!');
});

Además, la app puede registrar eventos importantes desde cualquier parte con el siguiente código.

logging.info("Something happened");
logging.error("Something bad happened");

Usa el siguiente código para registrar un objeto:

logging.info(JSON.stringify(someObject));

Comprender la configuración de registro

Ejecutar el entorno estándar de App Engine

Cuando la aplicación de muestra se ejecuta en el entorno estándar de App Engine, Google Cloud Logging recopila todos los registros de stderr y stdout automáticamente y permite su lectura, búsqueda y exportación en el visor de registros de GCP Console.

La configuración de Winston garantiza que todos los registros se escriban en stderr/stdout.

Cómo ver registros

Después de implementar y ejecutar la app de muestra, los datos de registros se comenzarán a recopilar. El análisis de los datos de registro se puede realizar con las herramientas de supervisión de registros incorporadas a GCP Console. La siguiente imagen muestra los eventos registrados en GCP Console.

Cómo registrar en la consola

Si quieres realizar un análisis incluso más detallado, puedes transmitir o importar los registros de la app a BigQuery o exportarlos a un depósito de Google Cloud Storage. Puedes hacerlo de ambas formas directamente desde GCP Console.