Graylog: Gebruik met Node.js

Hoe u logs van Node.js naar Graylog verzendt

👋 Welkom bij de Stackhero documentatie!

Stackhero biedt een kant-en-klare Graylog cloud oplossing die tal van voordelen biedt, waaronder:

  • Onbeperkte en toegewijde SMTP e-mailserver inbegrepen.
  • Moeiteloze updates met slechts één klik.
  • Aanpasbare domeinnaam beveiligd met HTTPS (bijvoorbeeld, https://logs.uw-bedrijf.com).
  • Optimale prestaties en robuuste beveiliging aangedreven door een privé en toegewijde VM.

Bespaar tijd en vereenvoudig uw leven: het kost slechts 5 minuten om de Graylog cloud hosting oplossing van Stackhero te proberen!

Het versturen van logs van Node.js naar Graylog is vrij eenvoudig. In dit voorbeeld ziet u hoe u het graylog2-pakket gebruikt om dit proces soepel te laten verlopen.

Om te beginnen installeert u het pakket met het volgende commando:

npm install graylog2

Zo gebruikt u het om berichten te loggen:

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

const logger = new graylog2.graylog({
  servers: [{ host: '<XXXXXX>.stackhero-network.com', port: 12201 }] // Vergeet niet "host" te vervangen door uw Graylog-domein
});

// Verstuur een eenvoudig bericht naar Graylog
logger.log('Simple message example');

// Voeg data toe aan een bericht
logger.log(
  'Password recovery email', // Bericht
  // Een JSON-object met extra details
  {
    subject: 'Password recovery',
    language: 'en_US',
    domain: 'gmail.com'
  }
);

// Geavanceerd voorbeeld
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', // Bericht
  // Een JSON-object met meer details
  {
    route: '/v1/messages/1234/',
    method: 'POST',

    responseTime: 12, // ms
    responseCode: 200,

    ipHash,
    userIdHash
  }
);

// Log niet-afgevangen exceptions in Node.js
process.on(
  'uncaughtException',
  err => {
    logger.log(
      err,
      { type: 'uncaughtException' }
    );
  }
);

Voor meer voorbeelden kunt u deze GitHub-repository raadplegen.

warning Vergeet niet uw Graylog-input te configureren (zie details hieronder).

warning Het is aan te raden het graylog2-pakket te gebruiken, tenzij Winston al onderdeel is van uw project. In dat geval kunt u het vervangen door winston-gelf.

Om het Winston GELF-pakket te installeren, voert u uit:

npm install winston-gelf

Als Winston nog niet in uw project zit, kunt u het toevoegen met:

npm install winston

Hier volgt een basisconfiguratie:

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

const logger = winston.createLogger({
  transports: [
    new winston.transports.Console(),
    new winstonGelf({
      // Bekijk alle gelfPro-opties hier: https://www.npmjs.com/package/gelf-pro
      gelfPro: {
        fields: {
          env: process.env.NODE_ENV || 'development'
        },
        adapterName: 'udp',
        adapterOptions: {
          host: '<XXXXXX>.stackhero-network.com', // Vervang door uw Graylog-domein
          port: 12201,
        }
      }
    })
  ]
});

// Voorbeeld van een informatieve log
logger.info('This is a log information');

// Voorbeeld van een foutlog
try {
  throw Error('This is an example error');
}
catch(error) {
  logger.warn({ message: 'Error triggered', error });
}

Vergeet niet uw Graylog-input te configureren (zie details hieronder).

Ga in de Graylog-interface naar System/Inputs, maak een nieuwe input aan van het type "GELF UDP" en klik op "Launch new input". In het venster dat verschijnt, vinkt u "Global" aan, voegt u een titel toe en bevestigt u zonder andere instellingen te wijzigen.

Dat is alles! Uw Graylog is nu klaar om logs van uw Node.js-applicatie te ontvangen.

Om de beveiliging te verbeteren, kunt u overwegen om alleen bepaalde IP-adressen toe te staan om data naar poort 12201 te sturen. Dit doet u via het Stackhero-dashboard, waar u uw Graylog-service selecteert en de "Firewall" zo instelt dat alleen uw IP-adressen worden toegestaan.