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 totalmente gestionada, diseñada para ofrecer velocidad y simplicidad. Puede:
- Contar con un servidor SMTP de correo electrónico dedicado e ilimitado incluido con su servicio.
- Aplicar actualizaciones fácilmente con un solo clic, sin necesidad de intervención manual.
- Utilizar un nombre de dominio personalizado protegido por HTTPS (por ejemplo, https://logs.su-empresa.com), proporcionando a su equipo un acceso directo y seguro.
- Disfrutar de un alto nivel de rendimiento y seguridad en una infraestructura privada y dedicada, sin recursos compartidos ni vecinos ruidosos.
Concéntrese en sus datos, no en sus herramientas: puede empezar a utilizar la solución de Graylog cloud hosting de Stackhero en solo unos minutos.
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.