Graylog: Naudojimas su Node.js

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

👋 Sveiki atvykę į Stackhero dokumentaciją

Stackhero siūlo pilnai valdomą Graylog cloud sprendimą, sukurtą greičiui ir paprastumui. Galite:

  • Pasikliauti neribotu, dedikuotu SMTP el. pašto serveriu, kuris įtrauktas į jūsų paslaugą.
  • Taikyti atnaujinimus be pastangų vienu paspaudimu, nereikalaujant rankinio įsikišimo.
  • Naudoti individualų domeno vardą, apsaugotą HTTPS (pavyzdžiui, https://logs.jusu-imone.com), suteikiant komandai saugų ir tiesioginį priėjimą.
  • Patirti aukštą veikimo spartą ir saugumą naudojant privačią, dedikuotą infrastruktūrą be bendrų resursų ar triukšmingų kaimynų.

Susitelkite į savo duomenis, o ne į įrankius: pradėti naudotis Stackhero Graylog cloud hosting sprendimu galite vos per kelias minutes.

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.