Graylog: Używanie z Node.js

Jak wysyłać logi z Node.js do Graylog

👋 Witamy w dokumentacji Stackhero!

Stackhero oferuje gotowe do użycia rozwiązanie Graylog cloud, które zapewnia wiele korzyści, w tym:

  • Nieograniczony i dedykowany serwer e-mail SMTP w zestawie.
  • Bezproblemowe aktualizacje za pomocą jednego kliknięcia.
  • Dostosowywalna nazwa domeny zabezpieczona za pomocą HTTPS (na przykład, https://logs.twoja-firma.com).
  • Optymalna wydajność i solidne zabezpieczenia dzięki prywatnej i dedykowanej VM.

Oszczędzaj czas i upraszczaj swoje życie: wystarczy 5 minut, aby wypróbować rozwiązanie Graylog cloud hosting Stackhero!

Wysyłanie logów z Node.js do Graylog jest bardzo proste. W tym przykładzie zobaczysz, jak użyć pakietu graylog2, aby cały proces był bezproblemowy.

Aby rozpocząć, zainstaluj pakiet, uruchamiając następujące polecenie:

npm install graylog2

Oto jak możesz go użyć do rejestrowania wiadomości:

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

const logger = new graylog2.graylog({
  servers: [{ host: '<XXXXXX>.stackhero-network.com', port: 12201 }] // Pamiętaj, aby zastąpić "host" swoją domeną Graylog
});

// Wyślij prostą wiadomość do Graylog
logger.log('Simple message example');

// Dołącz dane do wiadomości
logger.log(
  'Password recovery email', // Wiadomość
  // Obiekt JSON z dodatkowymi szczegółami
  {
    subject: 'Password recovery',
    language: 'en_US',
    domain: 'gmail.com'
  }
);

// Zaawansowany przykład
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', // Wiadomość
  // Obiekt JSON z większą ilością szczegółów
  {
    route: '/v1/messages/1234/',
    method: 'POST',

    responseTime: 12, // ms
    responseCode: 200,

    ipHash,
    userIdHash
  }
);

// Logowanie nieobsłużonych wyjątków w Node.js
process.on(
  'uncaughtException',
  err => {
    logger.log(
      err,
      { type: 'uncaughtException' }
    );
  }
);

Więcej przykładów znajdziesz w tym repozytorium GitHub.

warning Nie zapomnij skonfigurować inputu Graylog (szczegóły poniżej).

warning Zaleca się korzystanie z pakietu graylog2, chyba że Winston jest już częścią Twojego projektu. W takim przypadku możesz użyć winston-gelf.

Aby zainstalować pakiet Winston GELF, uruchom:

npm install winston-gelf

Jeśli Winston nie jest jeszcze w Twoim projekcie, dodaj go poleceniem:

npm install winston

Oto podstawowa konfiguracja:

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

const logger = winston.createLogger({
  transports: [
    new winston.transports.Console(),
    new winstonGelf({
      // Wszystkie opcje gelfPro znajdziesz tutaj: https://www.npmjs.com/package/gelf-pro
      gelfPro: {
        fields: {
          env: process.env.NODE_ENV || 'development'
        },
        adapterName: 'udp',
        adapterOptions: {
          host: '<XXXXXX>.stackhero-network.com', // Zastąp swoją domeną Graylog
          port: 12201,
        }
      }
    })
  ]
});

// Przykład logu informacyjnego
logger.info('This is a log information');

// Przykład logu błędu
try {
  throw Error('This is an example error');
}
catch(error) {
  logger.warn({ message: 'Error triggered', error });
}

Nie zapomnij skonfigurować inputu Graylog (szczegóły poniżej).

W interfejsie Graylog przejdź do System/Inputs, utwórz nowy input typu "GELF UDP" i kliknij "Launch new input". W wyświetlonym oknie zaznacz "Global", dodaj tytuł i zatwierdź bez zmiany pozostałych ustawień.

To wszystko! Twój Graylog jest teraz gotowy do odbierania logów z aplikacji Node.js.

Aby zwiększyć bezpieczeństwo, rozważ filtrowanie adresów IP, które mogą wysyłać dane na port 12201. Możesz to zrobić w panelu Stackhero, wybierając swoją usługę Graylog i konfigurując "Firewall" tak, aby zezwalał tylko na Twoje adresy IP.