Graylog: Verwendung mit Node.js

Wie man Logs von Node.js an Graylog sendet

👋 Willkommen bei der Stackhero-Dokumentation!

Stackhero bietet eine einsatzbereite Graylog Cloud-Lösung, die zahlreiche Vorteile bietet, darunter:

  • Unbegrenzter und dedizierter SMTP-E-Mail-Server inklusive.
  • Mühelose Updates mit nur einem Klick.
  • Anpassbarer Domainname gesichert mit HTTPS (zum Beispiel, https://logs.ihre-firma.com).
  • Optimale Performance und robuste Sicherheit durch eine private und dedizierte VM.

Sparen Sie Zeit und vereinfachen Sie Ihr Leben: Es dauert nur 5 Minuten, um die Graylog Cloud Hosting-Lösung von Stackhero auszuprobieren!

Das Senden von Logs von Node.js an Graylog ist ziemlich einfach. In diesem Beispiel sehen Sie, wie Sie das graylog2-Paket verwenden können, um diesen Prozess nahtlos zu gestalten.

Um zu beginnen, können Sie das Paket mit folgendem Befehl installieren:

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 }] // Stellen Sie sicher, "host" durch Ihre Graylog-Domain zu ersetzen
});

// Senden Sie eine einfache Nachricht an Graylog
logger.log('Einfaches Nachrichtenbeispiel');

// Daten an eine Nachricht anhängen
logger.log(
  'Passwort-Wiederherstellungs-E-Mail', // Nachricht
  // Ein JSON-Objekt mit zusätzlichen Details
  {
    subject: 'Passwort-Wiederherstellung',
    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-Anfrage', // Nachricht
  // Ein JSON-Objekt mit mehr Details
  {
    route: '/v1/messages/1234/',
    method: 'POST',

    responseTime: 12, // ms
    responseCode: 200,

    ipHash,
    userIdHash
  }
);

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

Für weitere Beispiele können Sie dieses GitHub-Repository besuchen.

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

warning Es ist am besten, das graylog2-Paket zu verwenden, es sei denn, Winston ist bereits Teil Ihres Projekts. In diesem Fall können Sie es durch winston-gelf ersetzen.

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

npm install winston-gelf

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

npm install winston

Hier ist eine grundlegende Einrichtung:

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 hier prüfen: 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 durch Ihre Graylog-Domain
          port: 12201,
        }
      }
    })
  ]
});

// Beispiel eines informativen Logs
logger.info('Dies ist eine Log-Information');

// Beispiel eines Fehler-Logs
try {
  throw Error('Dies ist ein Beispiel-Fehler');
}
catch(error) {
  logger.warn({ message: 'Fehler ausgelöst', error });
}

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

In der Graylog-Oberfläche navigieren Sie zu System/Inputs, erstellen Sie einen neuen Eingang vom Typ "GELF UDP" und klicken Sie auf "Neuen Eingang starten". Im erscheinenden Modal aktivieren Sie "Global", fügen einen Titel hinzu und bestätigen ohne weitere Einstellungen zu ändern.

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

Um die Sicherheit zu erhöhen, sollten Sie in Betracht ziehen, die IPs zu filtern, die Daten an Port 12201 senden dürfen. Sie können dies tun, indem Sie zum Stackhero-Dashboard gehen, Ihren Graylog-Dienst auswählen und die "Firewall" so konfigurieren, dass nur Ihre IPs zugelassen werden.