Recopilación de logs de Node.js
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.
- Crea una carpeta
nodejs.d/
en el directorio de configuración del Agent conf.d/
. - 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
- Reinicia el Agent.
- 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
Additional helpful documentation, links, and articles: