Graylog: Naudojimas su Node.js

Kaip siųsti logus iš Node.js į Graylog

👋 Sveiki atvykę į Stackhero dokumentaciją!

Stackhero siūlo paruoštą naudoti Graylog cloud sprendimą, kuris suteikia daugybę privalumų, įskaitant:

  • Įtrauktas neribotas ir dedikuotas SMTP el. pašto serveris.
  • Lengvi atnaujinimai vienu paspaudimu.
  • Pritaikomas domeno vardas, apsaugotas HTTPS (pavyzdžiui, https://logs.jusu-imone.com).
  • Optimali veikla ir tvirta sauga, užtikrinta privačia ir dedikuota VM.

Taupykite laiką ir supaprastinkite savo gyvenimą: tereikia 5 minučių, kad išbandytumėte Stackhero Graylog cloud hosting sprendimą!

Logų siuntimas iš Node.js į Graylog yra gana paprastas procesas. Šiame pavyzdyje matysite, kaip naudoti graylog2 paketą, kad šis procesas būtų sklandus.

Norėdami pradėti, įdiekite paketą vykdydami šią komandą:

npm install graylog2

Štai kaip galite jį naudoti žinučių logavimui:

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

const logger = new graylog2.graylog({
  servers: [{ host: '<XXXXXX>.stackhero-network.com', port: 12201 }] // Nepamirškite "host" pakeisti į savo Graylog domeną
});

// Paprastos žinutės siuntimas į Graylog
logger.log('Simple message example');

// Pridėti duomenų prie žinutės
logger.log(
  'Password recovery email', // Žinutė
  // JSON objektas su papildoma informacija
  {
    subject: 'Password recovery',
    language: 'en_US',
    domain: 'gmail.com'
  }
);

// Sudėtingesnis pavyzdys
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', // Žinutė
  // JSON objektas su daugiau informacijos
  {
    route: '/v1/messages/1234/',
    method: 'POST',

    responseTime: 12, // ms
    responseCode: 200,

    ipHash,
    userIdHash
  }
);

// Loguoti neapdorotas (uncaught) išimtis Node.js
process.on(
  'uncaughtException',
  err => {
    logger.log(
      err,
      { type: 'uncaughtException' }
    );
  }
);

Daugiau pavyzdžių rasite šiame GitHub repozitoriume.

warning Nepamirškite sukonfigūruoti savo Graylog input (detalės žemiau).

warning Rekomenduojama naudoti graylog2 paketą, nebent Winston jau yra jūsų projekte. Tokiu atveju galite naudoti winston-gelf.

Norėdami įdiegti Winston GELF paketą, vykdykite:

npm install winston-gelf

Jei Winston dar nėra jūsų projekte, pridėkite jį su:

npm install winston

Pagrindinė konfigūracija atrodytų taip:

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

const logger = winston.createLogger({
  transports: [
    new winston.transports.Console(),
    new winstonGelf({
      // Visas gelfPro parinktis rasite čia: https://www.npmjs.com/package/gelf-pro
      gelfPro: {
        fields: {
          env: process.env.NODE_ENV || 'development'
        },
        adapterName: 'udp',
        adapterOptions: {
          host: '<XXXXXX>.stackhero-network.com', // Pakeiskite į savo Graylog domeną
          port: 12201,
        }
      }
    })
  ]
});

// Informacinio log'o pavyzdys
logger.info('This is a log information');

// Klaidos log'o pavyzdys
try {
  throw Error('This is an example error');
}
catch(error) {
  logger.warn({ message: 'Error triggered', error });
}

Nepamirškite sukonfigūruoti savo Graylog input (detalės žemiau).

Graylog sąsajoje eikite į System/Inputs, sukurkite naują input tipo "GELF UDP" ir spauskite "Launch new input". Atsidariusiame lange pažymėkite "Global", įrašykite pavadinimą ir patvirtinkite nekeisdami kitų nustatymų.

Viskas! Dabar jūsų Graylog paruoštas priimti logus iš jūsų Node.js aplikacijos.

Norėdami padidinti saugumą, rekomenduojama filtruoti IP adresus, kuriems leidžiama siųsti duomenis į 12201 portą. Tai galite padaryti Stackhero valdymo pulte pasirinkę savo Graylog paslaugą ir sukonfigūravę "Firewall", kad būtų leidžiami tik jūsų IP adresai.