Graylog: Uso con Node.js
Cómo enviar logs 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 logs de Node.js a Graylog con el paquete graylog2 (recomendado)
Enviar logs desde Node.js a Graylog es un proceso bastante sencillo. En este ejemplo, verá cómo utilizar el paquete graylog2 para que este procedimiento sea fluido.
Para comenzar, puede instalar el paquete ejecutando el siguiente comando:
npm install graylog2
Así es como puede utilizarlo 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" por su dominio de Graylog
});
// Enviar un mensaje simple a Graylog
logger.log('Simple message example');
// Adjuntar datos a un mensaje
logger.log(
'Password recovery email', // Mensaje
// Un objeto JSON con detalles adicionales
{
subject: 'Password recovery',
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(
'API request', // 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 (más detalles a continuación).
Uso del paquete Winston GELF para enviar logs de Node.js a Graylog
warning Es preferible utilizar el paquete
graylog2salvo que Winston ya forme parte de su proyecto. En ese caso, puede sustituirlo porwinston-gelf.
Para instalar el paquete Winston GELF, ejecute:
npm install winston-gelf
Si Winston aún no está en su proyecto, puede añadirlo con:
npm install winston
Aquí tiene 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', // Sustituya por su dominio de Graylog
port: 12201,
}
}
})
]
});
// Ejemplo de log informativo
logger.info('This is a log information');
// Ejemplo de log de error
try {
throw Error('This is an example error');
}
catch(error) {
logger.warn({ message: 'Error triggered', error });
}
No olvide configurar su entrada de Graylog (más detalles a continuación).
Configuración de la entrada de Graylog
En la interfaz de Graylog, vaya a System/Inputs, cree una nueva entrada de tipo "GELF UDP" y haga clic en "Launch new input". En la ventana que aparece, marque "Global", añada un título y confirme sin modificar ningún otro parámetro.
¡Eso es todo! Su Graylog ya está listo para recibir logs de su aplicación Node.js.
Para mejorar la seguridad, considere filtrar las IPs autorizadas a 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.