Eventos de la aplicación de almacenamiento de registros con Node.js

En esta parte del tutorial de Bookshelf se muestra cómo una aplicación puede incorporar un almacenamiento de registros detallado para ayudar a detectar, depurar y supervisar posibles problemas. Los eventos de la aplicación de almacenamiento de registros pueden ayudarte a identificar errores y resolver problemas, tanto durante el desarrollo como una vez que la aplicación esté en producción.

Esta página forma parte de un tutorial de varias páginas. Para empezar desde el principio y ver las instrucciones de configuración, consulta Aplicación Bookshelf de Node.js.

Ajustes de configuración

Copia el archivo config.json del apartado Autenticar usuarios de este tutorial al directorio nodejs-getting-started/5-logging.

Instalar dependencias

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

  • Con npm:

    npm install
    
  • Con yarn:

    yarn install
    

Ejecutar la aplicación en tu máquina local

  1. Inicia un servidor web local mediante npm o yarn:

    • Con npm:

      npm start
      
    • Con yarn:

      yarn start
      
  2. En el navegador web, introduce la siguiente dirección.

    http://localhost:8080

Desplegar la aplicación en el entorno flexible de App Engine

  1. Despliega la aplicación de muestra:

    gcloud app deploy
    

  2. En el navegador web, introduce la siguiente dirección. Sustituye [YOUR_PROJECT_ID] por el ID del proyecto:

    https://[YOUR_PROJECT_ID].appspot.com
    

Si actualizas la aplicación, podrás desplegar la versión actualizada con el mismo comando que el utilizado para desplegar la aplicación por primera vez. El nuevo despliegue crea una nueva versión de la aplicación y la establece como la versión predeterminada. Se conservan las versiones anteriores de la aplicación, al igual que las instancias de máquina virtual asociadas. Ten en cuenta que todas estas versiones de aplicaciones e instancias de máquina virtual son recursos facturables.

Si eliminas las versiones no predeterminadas de la aplicación, puedes reducir los costes.

Para eliminar una versión de la aplicación:

  1. En GCP Console, ve a la página Versiones de App Engine.

    Ir a la página Versiones

  2. Selecciona la casilla de verificación de la versión no predeterminada de la app que deseas borrar.
  3. Haz clic en Borrar para borrar la versión de la app.

Si quieres obtener información completa sobre cómo limpiar los recursos facturables, consulta la sección sobre cómo limpiar los recursos en el último paso de este tutorial.

Información sobre el código

Después de desplegar y ejecutar la aplicación, es importante saber si funciona correctamente. Google Cloud Platform proporciona herramientas de seguimiento, almacenamiento de registros y supervisión integradas en la consola de Google Cloud Platform para que obtengas rápidamente una visión detallada de la actividad en la aplicación. De ese modo, podrás identificar problemas o tendencias críticos con mayor facilidad.

La aplicación de muestra de Bookshelf utiliza Google Cloud Trace para rastrear llamadas RPC en la aplicación. Puedes ver los rastros en el Panel de control de Cloud Trace. La aplicación de ejemplo utiliza Google Cloud Debug junto con repositorios fuente de Cloud para ayudarte a depurar la aplicación una vez desplegada. Puedes depurar la aplicación de muestra desplegada mediante el Panel de control 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 aplicación de ejemplo usa Winston, una biblioteca de registro para Node.js, junto con el middleware express-winston para administrar la solicitud y el almacenamiento de registro de errores. El siguiente código configura el almacenamiento de registros de todas las solicitudes realizadas a la aplicación desde 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 almacenamiento de registros de errores importantes que se producen en la aplicación.

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

Una vez configurado el almacenamiento de registros, la aplicación puede usarlo. El siguiente código agrega el middleware request-logging de logging.requestLogger a la aplicación.

app.use(logging.requestLogger);

Para controlar los errores, el siguiente código instala el middleware error-logging de logging.errorLogger a la aplicación. Es importante que se agregue después del resto del middleware, pero antes de cualquier controlador de errores personalizado para que los errores se notifiquen 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!');
});

La aplicación también puede registrar eventos importantes desde cualquier lugar mediante el siguiente código.

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

Información sobre la configuración del almacenamiento de registros

Ejecución en el entorno flexible de App Engine

Cuando la aplicación de muestra se ejecuta en el entorno flexible de App Engine, Cloud Logging recopila automáticamente todo lo registrado en stderr y stdout. Estos datos se pueden ver, buscar y exportar en el visualizador de registros de la consola de GCP.

La configuración de Winston garantiza la escritura en todos los registros en stderr/stdout.

Ver registros

Después de desplegar y ejecutar la aplicación de muestra, comenzarán a recopilarse los datos del almacenamiento de registros. Puedes analizar estos datos con las herramientas de supervisión de registros integradas en la consola de GCP. La siguiente imagen muestra los eventos registrados en la consola de GCP.

Almacenamiento de registros en la consola

Si quieres obtener un análisis más detallado, puedes transmitir o importar los registros de la aplicación en BigQuery o exportarlos a un contenedor de Google Cloud Storage. Puedes realizar ambas acciones desde la consola de GCP.