Graylog: Verwendung mit Node.js

Wie Sie Logs von Node.js an Graylog senden

👋 Willkommen in der Stackhero-Dokumentation

Stackhero bietet eine vollständig verwaltete Graylog Cloud-Lösung, die auf Geschwindigkeit und Einfachheit ausgelegt ist. Sie können:

  • Auf einen unbegrenzten, dedizierten SMTP-E-Mail-Server vertrauen, der in Ihrem Service enthalten ist.
  • Updates mühelos per Klick anwenden – ganz ohne manuellen Aufwand.
  • Einen individuellen Domainnamen nutzen, der durch HTTPS gesichert ist (zum Beispiel https://logs.your-company.com), sodass Ihr Team sicheren und direkten Zugriff erhält.
  • Von hoher Performance und Sicherheit auf einer privaten, dedizierten Infrastruktur profitieren – ohne geteilte Ressourcen oder störende Nachbarn.

Konzentrieren Sie sich auf Ihre Daten, nicht auf das Tooling: Mit Stackheros Graylog Cloud Hosting können Sie in nur wenigen Minuten starten.

Das Senden von Logs aus Node.js an Graylog ist sehr unkompliziert. In diesem Beispiel erfahren Sie, wie Sie das graylog2-Paket nutzen, um diesen Prozess nahtlos zu gestalten.

Um zu starten, installieren Sie das Paket mit folgendem Befehl:

npm install graylog2

So können Sie es verwenden, um Nachrichten zu protokollieren:

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

const logger = new graylog2.graylog({
  servers: [{ host: '<XXXXXX>.stackhero-network.com', port: 12201 }] // Ersetzen Sie "host" durch Ihre Graylog-Domain
});

// Senden Sie eine einfache Nachricht an Graylog
logger.log('Simple message example');

// Fügen Sie einer Nachricht zusätzliche Daten hinzu
logger.log(
  'Password recovery email', // Nachricht
  // Ein JSON-Objekt mit weiteren Details
  {
    subject: 'Password recovery',
    language: 'en_US',
    domain: 'gmail.com'
  }
);

// Fortgeschrittenes Beispiel
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', // Nachricht
  // Ein JSON-Objekt mit weiteren Details
  {
    route: '/v1/messages/1234/',
    method: 'POST',

    responseTime: 12, // ms
    responseCode: 200,

    ipHash,
    userIdHash
  }
);

// Nicht abgefangene Ausnahmen in Node.js protokollieren
process.on(
  'uncaughtException',
  err => {
    logger.log(
      err,
      { type: 'uncaughtException' }
    );
  }
);

Weitere Beispiele finden Sie in diesem GitHub-Repository.

warning Vergessen Sie nicht, Ihren Graylog-Input zu konfigurieren (Details unten).

warning Es wird empfohlen, das graylog2-Paket zu verwenden, es sei denn, Winston ist bereits Teil Ihres Projekts. In diesem Fall können Sie stattdessen winston-gelf einsetzen.

Um das Winston GELF-Paket zu installieren, führen Sie aus:

npm install winston-gelf

Falls Winston noch nicht in Ihrem Projekt ist, können Sie es mit folgendem Befehl hinzufügen:

npm install winston

Hier ein einfaches Setup:

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

const logger = winston.createLogger({
  transports: [
    new winston.transports.Console(),
    new winstonGelf({
      // Alle gelfPro-Optionen finden Sie hier: https://www.npmjs.com/package/gelf-pro
      gelfPro: {
        fields: {
          env: process.env.NODE_ENV || 'development'
        },
        adapterName: 'udp',
        adapterOptions: {
          host: '<XXXXXX>.stackhero-network.com', // Ersetzen Sie dies durch Ihre Graylog-Domain
          port: 12201,
        }
      }
    })
  ]
});

// Beispiel für einen Info-Log
logger.info('This is a log information');

// Beispiel für einen Fehler-Log
try {
  throw Error('This is an example error');
}
catch(error) {
  logger.warn({ message: 'Error triggered', error });
}

Vergessen Sie nicht, Ihren Graylog-Input zu konfigurieren (Details unten).

Navigieren Sie in der Graylog-Oberfläche zu System/Inputs, erstellen Sie einen neuen Input vom Typ "GELF UDP" und klicken Sie auf "Launch new input". Im erscheinenden Dialog wählen Sie "Global" aus, vergeben einen Titel und bestätigen ohne weitere Einstellungen zu ändern.

Das war's! Ihr Graylog ist jetzt bereit, Logs aus Ihrer Node.js-Anwendung zu empfangen.

Um die Sicherheit zu erhöhen, sollten Sie die IP-Adressen filtern, die Daten an Port 12201 senden dürfen. Dies können Sie im Stackhero-Dashboard tun, indem Sie Ihren Graylog-Service auswählen und unter "Firewall" nur Ihre eigenen IPs zulassen.