Pour envoyer vos logs à Datadog, activez la journalisation au sein d’un fichier et suivez ce fichier avec l’Agent Datadog. Utilisez la bibliothèque de journalisation Winston pour effectuer la journalisation depuis votre application Node.js.
Winston est disponible via NPM. Pour démarrer, vous devez ajouter la dépendance à votre code :
npm install --save winston
package.json est mis à jour avec les dépendances correspondantes :
const{createLogger,format,transports}=require('winston');constlogger=createLogger({level:'info',exitOnError:false,format:format.json(),transports:[newtransports.File({filename:`${appRoot}/logs/<NOM_FICHIER>.log`}),],});module.exports=logger;// Exemple de logs
logger.log('info','Voici un log simple');logger.info('Voici un log avec des métadonnées',{color:'blue'});
varwinston=require('winston');varlogger=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'});
Vérifiez le contenu du fichier <NOM_FICHIER>.log pour vous assurer que Winston prend en charge la journalisation en JSON :
{"level":"info","message":"Voici un log simple","timestamp":"2015-04-23T16:52:05.337Z"}{"color":"blue","level":"info","message":"Voici un log avec des métadonnées","timestamp":"2015-04-23T16:52:05.339Z"}
Si l’APM est activé pour cette application, associez vos logs et vos traces en ajoutant automatiquement l’ID des traces, l’ID des spans et les paramètres env, service et version à vos logs. Pour ce faire, suivez les instructions relatives à l’utilisation de Node.js pour l’APM (en anglais).
Remarque : si le traceur de l’APM injecte service dans vos logs, cela remplace la valeur définie dans la configuration de l’Agent.
Vous pouvez transmettre vos logs depuis votre application à Datadog sans installer d’Agent sur votre host. Veuillez cependant noter qu’il est conseillé d’utiliser un Agent pour l’envoi de vos logs, en raison de ses capacités natives de gestion de la connexion.
Utilisez le transport HTTP Winston pour envoyer vos logs directement via l’API Log Datadog.
Dans votre fichier Bootstrap ou dans votre code, déclarez le logger comme suit :
const{createLogger,format,transports}=require('winston');consthttpTransportOptions={host:'http-intake.logs.datadoghq.com',path:'/api/v2/logs?dd-api-key=<DATADOG_API_KEY>&ddsource=nodejs&service=<APPLICATION_NAME>',ssl:true};constlogger=createLogger({level:'info',exitOnError:false,format:format.json(),transports:[newtransports.Http(httpTransportOptions),],});module.exports=logger;// Example logs
logger.log('info','Hello simple log!');logger.info('Hello log with metas',{color:'blue'});
Remarque : vous pouvez également utiliser le transport Datadog créé par la communauté.
Si jamais vous rencontrez des erreurs de correspondance DNS, il se peut que ce problème découle des exceptions logstash non détectées. Un gestionnaire doit être ajouté comme suit :
varlogstash=newwinston.transports.Logstash({...});logstash.on('error',function(err){console.error(err);// remplacer par vos propres fonctionnalités ici
});
Assurez-vous de ne pas définir le paramètre max_connect_retries sur 1 (valeur par défaut : 4).