Graylog: Utilisation avec Node.js

Comment envoyer des logs de Node.js vers Graylog

👋 Bienvenue sur la documentation de Stackhero !

Stackhero propose une solution Graylog cloud prête à l'emploi qui offre de nombreux avantages, notamment :

  • Serveur e-mail SMTP illimité et dédié inclus.
  • Mises à jour sans effort en un clic.
  • Nom de domaine personnalisable sécurisé avec HTTPS (par exemple, https://logs.votre-entreprise.com).
  • Performance optimale et sécurité robuste grâce à une VM privée et dédiée.

Gagnez du temps et simplifiez-vous la vie : il suffit de 5 minutes pour essayer la solution Graylog cloud hosting de Stackhero !

Envoyer des logs de Node.js vers Graylog est très simple. Dans cet exemple, vous verrez comment utiliser le package graylog2 pour rendre ce processus transparent.

Pour commencer, vous pouvez installer le package en exécutant la commande suivante :

npm install graylog2

Voici comment l'utiliser pour enregistrer des messages :

const graylog2 = require('graylog2');
const crypto = require('crypto');

const logger = new graylog2.graylog({
  servers: [{ host: '<XXXXXX>.stackhero-network.com', port: 12201 }] // Assurez-vous de remplacer "host" par votre domaine Graylog
});

// Envoyer un message simple à Graylog
logger.log('Simple message example');

// Ajouter des données à un message
logger.log(
  'Password recovery email', // Message
  // Un objet JSON avec des détails additionnels
  {
    subject: 'Password recovery',
    language: 'en_US',
    domain: 'gmail.com'
  }
);

// Exemple avancé
const ip = '1.2.3.4';
const ipHash = crypto.createHash('md5').update(ip).digest('hex');

const userId = '1234';
const userIdHash = crypto.createHash('md5').update(userId).digest('hex');

logger.log(
  'API request', // Message
  // Un objet JSON avec plus de détails
  {
    route: '/v1/messages/1234/',
    method: 'POST',

    responseTime: 12, // ms
    responseCode: 200,

    ipHash,
    userIdHash
  }
);

// Logger les exceptions non interceptées dans Node.js
process.on(
  'uncaughtException',
  err => {
    logger.log(
      err,
      { type: 'uncaughtException' }
    );
  }
);

Pour plus d'exemples, vous pouvez consulter ce dépôt GitHub.

warning N'oubliez pas de configurer votre input Graylog (voir détails ci-dessous).

warning Il est préférable d'utiliser le package graylog2 sauf si Winston fait déjà partie de votre projet. Dans ce cas, vous pouvez le remplacer par winston-gelf.

Pour installer le package Winston GELF, exécutez :

npm install winston-gelf

Si Winston n'est pas déjà dans votre projet, vous pouvez l'ajouter avec :

npm install winston

Voici une configuration de base :

const winston = require('winston');
const winstonGelf = require('winston-gelf');
const process = require('process');

const logger = winston.createLogger({
  transports: [
    new winston.transports.Console(),
    new winstonGelf({
      // Consultez toutes les options gelfPro ici : https://www.npmjs.com/package/gelf-pro
      gelfPro: {
        fields: {
          env: process.env.NODE_ENV || 'development'
        },
        adapterName: 'udp',
        adapterOptions: {
          host: '<XXXXXX>.stackhero-network.com', // Remplacez par votre domaine Graylog
          port: 12201,
        }
      }
    })
  ]
});

// Exemple de log informatif
logger.info('This is a log information');

// Exemple de log d'erreur
try {
  throw Error('This is an example error');
}
catch(error) {
  logger.warn({ message: 'Error triggered', error });
}

N'oubliez pas de configurer votre input Graylog (voir détails ci-dessous).

Sur l'interface Graylog, allez dans System/Inputs, créez un nouvel input de type "GELF UDP" et cliquez sur "Launch new input". Dans la fenêtre qui s'affiche, cochez "Global", ajoutez un titre et confirmez sans modifier les autres paramètres.

C'est tout ! Votre Graylog est maintenant prêt à recevoir les logs de votre application Node.js.

Pour renforcer la sécurité, pensez à filtrer les IP autorisées à envoyer des données sur le port 12201. Pour ce faire, rendez-vous sur le tableau de bord Stackhero, sélectionnez votre service Graylog et configurez le "Firewall" pour n'autoriser que vos IP.