Graylog: Uso con Node.js

Cómo enviar registros desde Node.js a Graylog

👋 ¡Bienvenido a la documentación de Stackhero!

Stackhero ofrece una solución Graylog cloud lista para usar que proporciona una serie de beneficios, incluyendo:

  • Servidor de correo electrónico SMTP ilimitado y dedicado incluido.
  • Actualizaciones sin esfuerzo con solo un clic.
  • Nombre de dominio personalizable asegurado con HTTPS (por ejemplo, https://logs.tu-empresa.com).
  • Rendimiento óptimo y seguridad robusta gracias a una VM privada y dedicada.

Ahorra tiempo y simplifica tu vida: ¡solo toma 5 minutos probar la solución de Graylog cloud hosting de Stackhero!

Enviar registros desde Node.js a Graylog es bastante sencillo. En este ejemplo, verá cómo usar el paquete graylog2 para hacer este proceso fluido.

Para comenzar, puede instalar el paquete ejecutando el siguiente comando:

npm install graylog2

Aquí se muestra cómo puede usarlo para registrar mensajes:

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

const logger = new graylog2.graylog({
  servers: [{ host: '<XXXXXX>.stackhero-network.com', port: 12201 }] // Asegúrese de reemplazar "host" con su dominio Graylog
});

// Enviar un mensaje simple a Graylog
logger.log('Ejemplo de mensaje simple');

// Adjuntar datos a un mensaje
logger.log(
  'Correo de recuperación de contraseña', // Mensaje
  // Un objeto JSON con detalles adicionales
  {
    subject: 'Recuperación de contraseña',
    language: 'en_US',
    domain: 'gmail.com'
  }
);

// Ejemplo avanzado
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(
  'Solicitud API', // Mensaje
  // Un objeto JSON con más detalles
  {
    route: '/v1/messages/1234/',
    method: 'POST',

    responseTime: 12, // ms
    responseCode: 200,

    ipHash,
    userIdHash
  }
);

// Registrar excepciones no capturadas en Node.js
process.on(
  'uncaughtException',
  err => {
    logger.log(
      err,
      { type: 'uncaughtException' }
    );
  }
);

Para más ejemplos, puede visitar este repositorio de GitHub.

warning No olvide configurar su entrada de Graylog (detalles a continuación).

warning Es mejor usar el paquete graylog2 a menos que Winston ya sea parte de su proyecto. Si ese es el caso, puede reemplazarlo con winston-gelf.

Para instalar el paquete Winston GELF, ejecute:

npm install winston-gelf

Si Winston no está ya en su proyecto, puede añadirlo con:

npm install winston

Aquí hay una configuración básica:

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

const logger = winston.createLogger({
  transports: [
    new winston.transports.Console(),
    new winstonGelf({
      // Consulte todas las opciones de gelfPro aquí: https://www.npmjs.com/package/gelf-pro
      gelfPro: {
        fields: {
          env: process.env.NODE_ENV || 'development'
        },
        adapterName: 'udp',
        adapterOptions: {
          host: '<XXXXXX>.stackhero-network.com', // Reemplace con su dominio Graylog
          port: 12201,
        }
      }
    })
  ]
});

// Ejemplo de un registro informativo
logger.info('Esta es una información de registro');

// Ejemplo de un registro de error
try {
  throw Error('Este es un error de ejemplo');
}
catch(error) {
  logger.warn({ message: 'Error desencadenado', error });
}

No olvide configurar su entrada de Graylog (detalles a continuación).

En la interfaz de Graylog, navegue a System/Inputs, cree una nueva entrada de tipo "GELF UDP" y haga clic en "Lanzar nueva entrada". En la ventana modal que aparece, marque "Global", agregue un título y confirme sin modificar ningún otro ajuste.

¡Eso es todo! Su Graylog ahora está configurado para recibir registros de su aplicación Node.js.

Para mejorar la seguridad, considere filtrar las IP permitidas para enviar datos al puerto 12201. Puede hacerlo accediendo al panel de Stackhero, seleccionando su servicio Graylog y configurando el "Firewall" para permitir solo sus IPs.