For AI agents: the complete documentation index is available at https://docs.ovhcloud.com/fr/llms.txt, the full documentation bundle is available at https://docs.ovhcloud.com/fr/llms-full.txt, and this page is available as Markdown at https://docs.ovhcloud.com/fr/guides/manage-and-operate/observability/logs-data-platform/nodejs.md.

Logs Data Platform - Prise en main avec Node.js

Voir en Markdown

Comment envoyer les logs d'une application Node.js vers Logs Data Platform

Objectif

Ce guide vous permet d'envoyer des logs depuis une application Node.js vers Logs Data Platform (LDP). Nous utiliserons le logger Pino, un logger rapide et léger pour Node.js, associé à un transport GELF (Graylog Extended Log Format). Il est également possible d'utiliser le logger Winston avec un transport GELF ; les instructions correspondantes sont fournies à la fin de ce guide.

Prérequis

  • Un compte Logs Data Platform.
  • Un flux créé et son jeton (X-OVH-TOKEN).
  • L'adresse de votre cluster LDP (par exemple gra1.logs.ovh.com) et le port GELF (généralement 12202 pour TLS).
  • Node.js installé sur votre environnement (version >= 20 recommandée).

Journalisation avec Pino

Installer les dépendances

Nous avons besoin de deux paquets :

  • pino : encode les logs au format JSON.
  • @alex-michaud/pino-graylog-transport : envoie les logs vers l'endpoint LDP au format GELF.

Installez-les via npm :

npm install pino @alex-michaud/pino-graylog-transport

Configurer le logger

Créez un fichier nommé logger.js (ou index.js) et configurez le logger.

Vous devez :

  1. Configurer le transport pour qu'il pointe vers votre cluster LDP.
  2. Ajouter votre X-OVH-TOKEN à chaque message de log afin que LDP les accepte et les route. Dans GELF, les champs personnalisés commencent généralement par un underscore _.
import { pino } from 'pino'
import { PinoGraylogTransport } from '@alex-michaud/pino-graylog-transport'

// Remplacez ces valeurs par celles de votre configuration
const LDP_CLUSTER = 'gra1.logs.ovh.com'; // Your cluster address
const LDP_PORT = 12202;                  // GELF TLS port
const LDP_TOKEN = 'your-data-stream-write-token';   // X-OVH-TOKEN

// Créer une promesse pour attendre que le transport soit prêt
let resolveReady, rejectReady;
const isReady = new Promise((resolve, reject) => {
    resolveReady = resolve;
    rejectReady = reject;
});

const pinoGraylogTransportOptions = {
    host: LDP_CLUSTER,
    port: LDP_PORT,
    protocol: 'tls',
    staticMeta: { 'X-OVH-TOKEN': LDP_TOKEN, }, // Note: no underscore - GELF formatter adds it
    onReady: (success, err) => {
        if (success) {
            console.log('Graylog transport connected successfully');
            resolveReady();
            return;
        }
        console.error('Graylog transport failed to connect:', err);
        rejectReady(err);
    },
}

const pinoGraylogTransport = new PinoGraylogTransport(pinoGraylogTransportOptions);

const logger = pino({ level: 'info' }, pinoGraylogTransport);

(async () => {
    try {
        // Attendre que le logger soit prêt
        await isReady;
        console.log('Logger is ready to send logs');

        // Usage examples
        logger.info('Hello! This is a test log from Node.js');
        logger.warn({ user_id: 42 }, 'User performed a restricted action');
        logger.error(new Error('Something went wrong'), 'An error occurred');

        await pinoGraylogTransport.flush();

        console.log('Logger has terminated');
    } catch (err) {
        console.error('Logger error:', err);
        process.exit(1);
    }
})();
Info
  • Remarque : pour des raisons de sécurité, nous vous recommandons d'utiliser des variables d'environnement pour stocker votre jeton et l'adresse du cluster plutôt que de les coder en dur.

  • Remarque : dans votre package.json, veillez à définir "type": "module" pour utiliser la syntaxe des modules ES.

Exécuter et vérifier

Exécutez votre application :

node logger.js

Ensuite, rendez-vous dans votre interface Graylog (accessible depuis l'espace client OVHcloud) et définissez une plage de recherche relative (par exemple « Last 5 minutes »). Vous devriez voir vos messages apparaître dans le flux.

Aller plus loin

Journalisation avec Winston

Installer les dépendances

Nous avons besoin de deux paquets :

  • winston : une bibliothèque de journalisation polyvalente pour Node.js.
  • winston-log2gelf : un transport pour Winston permettant d'envoyer les logs au format GELF.

Installez-les via npm :

npm install winston winston-log2gelf

Configurer le logger

Créez un fichier nommé logger.js (ou index.js) et configurez le logger.

Vous devez :

  1. Configurer le transport pour qu'il pointe vers votre cluster LDP.
  2. Ajouter votre X-OVH-TOKEN à chaque message de log afin que LDP les accepte et les route. Dans GELF, les champs personnalisés commencent généralement par un underscore _.
  3. Définir le niveau de log souhaité.
import { createLogger } from 'winston';
import Log2gelf from 'winston-log2gelf';

// Remplacez ces valeurs par celles de votre configuration
const LDP_CLUSTER = 'gra1.logs.ovh.com'; // Your cluster address
const LDP_PORT = 12202;                  // GELF TLS port
const LDP_TOKEN = 'your-data-stream-write-token';   // X-OVH-TOKEN

const gelfTransport = new Log2gelf({
    level: "info",
    host: LDP_CLUSTER,
    port: LDP_PORT,
    protocol: "tls",
});

const logger = createLogger({
    exitOnError: false,
    level: 'info',
    transports: [
        gelfTransport
    ],
    defaultMeta: { 'X-OVH-TOKEN': LDP_TOKEN },
});

// Listen for errors
logger.on('error', (error) => {
    console.error('Logger error event:', error);
});

(async () => {
    try {
        console.log('Sending logs...');

        // Usage examples
        logger.info('Hello! This is a test log from Node.js with Winston');
        logger.warn('User performed a restricted action', { user_id: 42 });
        logger.error('An error occurred', new Error('Something went wrong'));

        // Attendre l'envoi des logs - Log2gelf a besoin de temps pour les traiter
        await new Promise(resolve => setTimeout(resolve, 1000));

        console.log('All logs sent successfully');
        process.exit(0);
    } catch (err) {
        console.error('Logger error:', err);
        process.exit(1);
    }
})();
Info

Remarque : pour des raisons de sécurité, nous vous recommandons d'utiliser des variables d'environnement pour stocker votre jeton et l'adresse du cluster plutôt que de les coder en dur.

Exécuter et vérifier

Exécutez votre application :

node logger.js

Ensuite, rendez-vous dans votre interface Graylog (accessible depuis l'espace client OVHcloud) et définissez une plage de recherche relative (par exemple « Last 5 minutes »). Vous devriez voir vos messages apparaître dans le flux.

Aller plus loin

Rejoignez notre communauté d'utilisateurs.

Cette page vous a-t-elle aidé ?