Graylog: Utilizzo con Node.js

Come inviare i log da Node.js a Graylog

👋 Benvenuti nella documentazione di Stackhero!

Stackhero offre una soluzione Graylog cloud pronta all'uso che fornisce numerosi vantaggi, tra cui:

  • Server email SMTP illimitato e dedicato incluso.
  • Aggiornamenti senza sforzo con un solo clic.
  • Nome di dominio personalizzabile sicuro con HTTPS (ad esempio, https://logs.tua-azienda.com).
  • Prestazioni ottimali e sicurezza robusta grazie a una VM privata e dedicata.

Risparmia tempo e semplifica la tua vita: bastano 5 minuti per provare la soluzione Graylog cloud hosting di Stackhero!

Inviare i log da Node.js a Graylog è piuttosto semplice. In questo esempio, vedrai come utilizzare il pacchetto graylog2 per rendere questo processo fluido.

Per iniziare, puoi installare il pacchetto eseguendo il seguente comando:

npm install graylog2

Ecco come puoi usarlo per registrare i messaggi:

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

const logger = new graylog2.graylog({
  servers: [{ host: '<XXXXXX>.stackhero-network.com', port: 12201 }] // Assicurati di sostituire "host" con il tuo dominio Graylog
});

// Invia un messaggio semplice a Graylog
logger.log('Esempio di messaggio semplice');

// Aggiungi dati a un messaggio
logger.log(
  'Email di recupero password', // Messaggio
  // Un oggetto JSON con dettagli aggiuntivi
  {
    subject: 'Recupero password',
    language: 'en_US',
    domain: 'gmail.com'
  }
);

// Esempio avanzato
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(
  'Richiesta API', // Messaggio
  // Un oggetto JSON con più dettagli
  {
    route: '/v1/messages/1234/',
    method: 'POST',

    responseTime: 12, // ms
    responseCode: 200,

    ipHash,
    userIdHash
  }
);

// Registra le eccezioni non gestite in Node.js
process.on(
  'uncaughtException',
  err => {
    logger.log(
      err,
      { type: 'uncaughtException' }
    );
  }
);

Per ulteriori esempi, puoi visitare questo repository GitHub.

warning Non dimenticare di configurare il tuo input Graylog (dettagli sotto).

warning È meglio utilizzare il pacchetto graylog2 a meno che Winston non faccia già parte del tuo progetto. In tal caso, puoi sostituirlo con winston-gelf.

Per installare il pacchetto Winston GELF, esegui:

npm install winston-gelf

Se Winston non è già nel tuo progetto, puoi aggiungerlo con:

npm install winston

Ecco una configurazione di 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({
      // Controlla tutte le opzioni di gelfPro qui: https://www.npmjs.com/package/gelf-pro
      gelfPro: {
        fields: {
          env: process.env.NODE_ENV || 'development'
        },
        adapterName: 'udp',
        adapterOptions: {
          host: '<XXXXXX>.stackhero-network.com', // Sostituisci con il tuo dominio Graylog
          port: 12201,
        }
      }
    })
  ]
});

// Esempio di log informativo
logger.info('Questa è un'informazione di log');

// Esempio di log di errore
try {
  throw Error('Questo è un errore di esempio');
}
catch(error) {
  logger.warn({ message: 'Errore attivato', error });
}

Non dimenticare di configurare il tuo input Graylog (dettagli sotto).

Sull'interfaccia Graylog, vai su System/Inputs, crea un nuovo input di tipo "GELF UDP" e clicca su "Avvia nuovo input". Nella finestra modale che appare, seleziona "Globale", aggiungi un titolo e conferma senza modificare altre impostazioni.

Ecco fatto! Il tuo Graylog è ora configurato per ricevere i log dalla tua applicazione Node.js.

Per migliorare la sicurezza, considera di filtrare gli IP autorizzati a inviare dati alla porta 12201. Puoi farlo accedendo alla dashboard di Stackhero, selezionando il tuo servizio Graylog e configurando il "Firewall" per consentire solo i tuoi IP.