Configurar tu logger

Para enviar tus logs a Datadog, loguea un archivo y supervisa ese archivo con tu Datadog Agent. Utiliza la biblioteca de registro de Winston al log desde tu aplicación Node.js.

Winston está disponible a través de NPM, para empezar, debes añadir la dependencia a tu código:

npm install --save winston

package.json se actualiza con las dependencias correspondientes:

{
  "name": "...",

  //...
  "dependencies": {
    //...
    "winston": "x.y.z",
    //...
  }
}

Loguear a un archivo

En tu archivo de arranque o en tu código, declara el registrador de la siguiente manera:


const { createLogger, format, transports } = require('winston');

const logger = createLogger({
  level: 'info',
  exitOnError: false,
  format: format.json(),
  transports: [
    new transports.File({ filename: `${appRoot}/logs/<FILE_NAME>.log` }),
  ],
});

module.exports = logger;

// Example logs
logger.log('info', 'Hello simple log!');
logger.info('Hello log with metas',{color: 'blue' });
var winston = require('winston');

var logger = new (winston.Logger)({
    transports: [
        new (winston.transports.File)({
            name: '<LOGGER_NAME>',
            filename: '<FILE_NAME>.log',
            json: true,
            level: 'info'
        })
    ]
});

// Example logs
logger.log('info', 'Hello simple log!');
logger.info('Hello log with metas',{color: 'blue' });

Comprueba el contenido del archivo <FILE_NAME>.log para confirmar que Winston está registrando en JSON:

{"level":"info","message":"Hello simple log!","timestamp":"2015-04-23T16:52:05.337Z"}
{"color":"blue","level":"info","message":"Hello log with metas","timestamp":"2015-04-23T16:52:05.339Z"}

Configura tu Datadog Agent

Una vez que la recopilación de log está habilitada, configura la recopilación de log personalizada para supervisar tus archivos de log y enviar nuevos logs a Datadog.

  1. Crea una carpeta nodejs.d/ en el directorio de configuración del Agent conf.d/.
  2. Crea un archivo conf.yaml en nodejs.d/ con el siguiente contenido:
init_config:

instances:

##Log section
logs:

  - type: file
    path: "<FILE_NAME_PATH>.log"
    service: <SERVICE_NAME>
    source: nodejs
    sourcecategory: sourcecode
  1. Reinicia el Agent.
  2. Ejecuta el subcomando de estado del Agent y busca nodejs en la sección Checks para confirmar que los logs se han enviado correctamente a Datadog.

Si los logs están en formato JSON, Datadog parsea los mensajes del log de forma automática para extraer sus atributos. Utiliza el Log Explorer para ver tus logs y solucionar problemas relacionados.

Conectar tus servicios al conjunto de logs y trazas (traces)

Si tienes APM activado para esta aplicación, conecta tus logs y trazas añadiendo automáticamente los ID de traza (trace) y los ID de tramo (span), env, service y version a tus logs mediante las siguientes instrucciones de APM para Node.js

Nota: Si el rastreador APM inyecta service en tus logs, este reemplazará al valor definido en la configuración del Agent.

Registro de logs sin Agent

Puedes poner en el flujo (stream) tus logs desde tu aplicación a Datadog sin instalar un Agent en tu host. Sin embargo, es recomendado que utilices un Agent para reenviar tus logs, ya que proporciona una gestión de conexión nativa.

Utiliza el transporte de HTTP Winston para enviar tus logs directamente a través de la API de log de Datadog. En tu archivo de arranque o en tu código, declara el registrador de la siguiente manera:

const { createLogger, format, transports } = require('winston');

const httpTransportOptions = {
  host: 'http-intake.logs.',
  path: '/api/v2/logs?dd-api-key=<DATADOG_API_KEY>&ddsource=nodejs&service=<APPLICATION_NAME>',
  ssl: true
};

const logger = createLogger({
  level: 'info',
  exitOnError: false,
  format: format.json(),
  transports: [
    new transports.Http(httpTransportOptions),
  ],
});

module.exports = logger;

// Example logs
logger.log('info', 'Hello simple log!');
logger.info('Hello log with metas',{color: 'blue' });

Nota: También puedes utilizar el Transporte de Datadog avalado por la comunidad.

Solucionar problemas

Si tienes errores de búsqueda de DNS en tu aplicación, esto podría ser debido a excepciones logstash no capturadas. Debe añadirse un identificador como el siguiente:

var logstash = new winston.transports.Logstash({ ... });
logstash.on('error', function(err) {
    console.error(err); // replace with your own functionality here
});

Asegúrate de que el parámetro max_connect_retries no está configurado en 1 (por defecto es 4).

Leer más