Personalización de 1.6.x Agente de registro para admitir el análisis sintáctico multilínea personalizado para aplicaciones Node.js que utilicen Winston en entornos no orquestados
Este tutorial muestra cómo configurar la gestión de registros multilínea de IBM® Cloud Logs Agente de registro para una aplicación Node.js utilizando la biblioteca de registros Winston personalizada. Esta configuración es para entornos no orquestados, por ejemplo, Linux y Windows, y modifica el archivo de configuración. Esta configuración garantiza que las trazas de pila y los registros multilínea se agrupen correctamente en IBM Cloud Logs.
Este tutorial requiere la versión IBM Cloud Logs Agente de registro 1.6.2 o posterior.
Antes de empezar
Antes de empezar a utilizar este tutorial, revise la siguiente información para comprender los conceptos de Agente de registro y multilínea.
-
Más información sobre el soporte multilínea en entornos no orquestados.
Este tutorial también asume que usted tiene:
-
Una instancia de IBM Cloud Logs aprovisionada y configurada.
-
El Agente de registro desplegado en un entorno no orquestado.
Los archivos de configuración de este tutorial se encuentran en el lugar donde se descargaron los archivos del paquete al instalar Agente de registro.
Ejemplo de configuración de Winston
Supongamos que su aplicación Node.js utiliza Winston y registra en la consola en el siguiente formato:
const winston = require('winston');
const logger = winston.createLogger({
level: 'info',
format: winston.format.combine(
winston.format.timestamp({
format: 'ddd MMM DD YYYY HH:mm:ss.SSS'
}),
winston.format.errors({ stack: true }),
winston.format.printf(({ timestamp, level, message, stack }) => {
const levelUpper = level.toUpperCase();
const baseLog = `[${timestamp}] ${levelUpper} [Main] - ${message}`;
if (stack) {
return `${baseLog}\n${stack}`;
}
return baseLog;
})
),
transports: [
new winston.transports.Console()
]
});
Este formato produce entradas de registro que comienzan con una marca de tiempo y un nivel, y los registros de varias líneas, como las trazas de pila de errores, siguen en líneas posteriores sin marcas de tiempo.
Winston suele registrar toda la salida, incluidas las trazas de error, como una única cadena, por lo que no suele ser necesario un analizador multilínea. Sin embargo, este ejemplo demuestra qué hacer si su formateador imprime registros multilínea, y ayuda a ilustrar cómo enfocar el análisis multilínea para cualquier formato personalizado.
Esta configuración se proporciona como ejemplo para mostrar cómo manejar registros multilínea cuando se utiliza un formato de registro personalizado. Si su aplicación utiliza una estructura o biblioteca de registro diferente, utilice esto como referencia para crear su propio analizador multilínea en consecuencia.
Configuración manual del análisis sintáctico multilínea mediante un archivo de configuración
Para agrupar correctamente los registros, defina un analizador multilínea que reconozca la marca de tiempo al principio de las nuevas entradas de registro y trate las líneas siguientes como continuaciones de las entradas anteriores.
Definir el analizador sintáctico multilínea
Añada lo siguiente al archivo parsers.conf:
[MULTILINE_PARSER]
Name multiline-nodejs-winston
Type regex
Flush_timeout 500
Rule "start_state" "/^\\[[A-Z][a-z]{2} [A-Z][a-z]{2} \\d{2} \\d{4} \\d{2}:\\d{2}:\\d{2}\\.\\d{3}\\] .*$/"
Rule "cont" "/^(?!\\[[A-Z][a-z]{2} [A-Z][a-z]{2} \\d{2} \\d{4} \\d{2}:\\d{2}:\\d{2}\\.\\d{3}\\] ).*$/"
Este analizador asume que los registros comienzan con una marca de tiempo como [Wed Jul 24 2025 14:52:31.456] .... Las trazas de pila están indentadas en las líneas siguientes y no coinciden con la regex timestamp, por lo que se
agrupan con la línea de registro anterior.
Aplicar el analizador sintáctico con un filtro multilínea
Añada un bloque de filtro al archivo filters.conf para utilizar el analizador sintáctico:
[FILTER]
Name multiline
Match kube.*
Multiline.key_content log
Multiline.parser multiline-nodejs-winston
Reinicie el agente
Tras actualizar el mapa de configuración, reinicie el agente.
-
Linux Para entornos Linux, ejecute:
systemctl daemon-reload && systemctl restart fluent-bit -
Windows Para entornos Windows, ejecute:
sc.exe stop fluent-bit && sc.exe start fluent-bit
Verifique sus registros multilínea
Acceda a su instancia IBM Cloud Logs y confirme que sus entradas multilínea (por ejemplo, stack traces) están agrupadas correctamente.
-
Uso del icono de registros
y verifique que sus entradas de varias líneas estén agrupadas correctamente.
Los datos de registro agrupados se incluyen en el campo
log.