El soporte de registro de TIBCO BW ECS se está convirtiendo en una característica demandada debido al uso creciente del Esquema Común de Elastic para la solución de agregación de registros basada en la pila de Elastic (anteriormente conocida como pila ELK)
Ya hemos comentado mucho sobre la importancia de las soluciones de agregación de registros y sus beneficios, especialmente al discutir la arquitectura de contenedores. Debido a eso, hoy nos centraremos en cómo podemos adaptar nuestras aplicaciones BW para soportar este nuevo formato de registro.
Porque lo primero que necesitamos saber es la siguiente afirmación: Sí, esto se puede hacer. Y se puede hacer independientemente de su modelo de implementación. Por lo tanto, la solución proporcionada aquí funciona tanto para soluciones locales como para implementaciones en contenedores utilizando BWCE.
Antecedentes del Registro de TIBCO BW
TIBCO BusinessWorks (contenedor o no) se basa en sus capacidades de registro en la biblioteca logback, y esta biblioteca se configura utilizando un archivo llamado logback.xml que podría tener la configuración que necesita, como puede ver en la imagen a continuación:
Logback es una biblioteca bien conocida para desarrollos basados en Java y tiene una arquitectura basada en una solución central y complementos que extienden sus capacidades actuales. Es este enfoque de complemento el que vamos a utilizar para soportar ECS.
Incluso en la documentación oficial de ECS se cubre la configuración para habilitar esta configuración de registro cuando se utiliza la solución Logback, como puede ver en la imagen a continuación y en este enlace oficial:
En nuestro caso, no necesitamos agregar la dependencia en ningún lugar, sino simplemente descargar la dependencia, ya que necesitaremos incluirla en los paquetes OSGI existentes para la instalación de TIBCO BW. Solo necesitaremos dos archivos que son los siguientes:
- ecs-logging-core-1.5.0.jar
- logback-ecs-encoder-1.5.0.jar
En el momento de escribir este artículo, las versiones actuales son 1.5.0 para cada uno de ellos, pero manténgase atento para asegurarse de que está utilizando una versión reciente de este software para evitar problemas con el soporte y las vulnerabilidades.
Una vez que tengamos estas bibliotecas, necesitamos agregarlas a la instalación del sistema BW, y necesitamos hacerlo de manera diferente si estamos utilizando una instalación local de TIBCO o una instalación base de TIBCO BW. Para ser honesto, las cosas que necesitamos hacer son las mismas; el proceso de hacerlo es diferente.
Porque, al final, lo que necesitamos hacer es solo una tarea simple. Incluir estos archivos JAR como parte del paquete OSGI actual de logback que carga TIBCO BW. Así que, veamos cómo podemos hacer eso y comenzar con una instalación local. Usaremos la versión TIBCO BWCE 2.8.2 como ejemplo, pero se requerirán pasos similares para otras versiones.
La instalación local es la forma más fácil de hacerlo, pero solo porque tiene menos pasos que cuando lo hacemos en una imagen base de TIBCO BWCE. Así que, en este caso, iremos a la siguiente ubicación: <TIBCO_HOME>/bwce/2.8/system/shared/com.tibco.tpcl.logback_1.2.1600.002/
- Colocaremos los JARs descargados en esa carpeta
- Abriremos el
META-INF/MANIFEST.MFy haremos las siguientes modificaciones:
- Agregar esos JARs a la sección
Bundle-Classpath:
- Agregar esos JARs a la sección
- Incluir el siguiente paquete (co.elastic.logging.logback) como parte de los paquetes exportados agregándolo a la sección
Exported-package:
Una vez hecho esto, nuestra instalación de TIBCO BW soporta el formato ECS. y solo necesitamos configurar el logback.xml para usarlo, y podemos hacerlo confiando en la documentación oficial en la página de ECS. Necesitamos incluir el siguiente codificador, como se muestra a continuación:
<encoder class="co.elastic.logging.logback.EcsEncoder">
<serviceName>mi-aplicación</serviceName>
<serviceVersion>mi-versión-de-aplicación</serviceVersion>
<serviceEnvironment>mi-entorno-de-aplicación</serviceEnvironment>
<serviceNodeName>mi-nodo-de-clúster-de-aplicación</serviceNodeName>
</encoder>
Por ejemplo, si modificamos el archivo de configuración predeterminado logback.xml con esta información, tendremos algo como esto:
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true">
<!-- *=============================================================* -->
<!-- * APPENDER: Console Appender * -->
<!-- *=============================================================* -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="co.elastic.logging.logback.EcsEncoder">
<serviceName>a</serviceName>
<serviceVersion>b</serviceVersion>
<serviceEnvironment>c</serviceEnvironment>
<serviceNodeName>d</serviceNodeName>
</encoder>
</appender>
<!-- *=============================================================* -->
<!-- * LOGGER: Thor Framework loggers * -->
<!-- *=============================================================* -->
<logger name="com.tibco.thor.frwk">
<level value="INFO"/>
</logger>
<!-- *=============================================================* -->
<!-- * LOGGER: BusinessWorks Framework loggers * -->
<!-- *=============================================================* -->
<logger name="com.tibco.bw.frwk">
<level value="WARN"/>
</logger>
<logger name="com.tibco.bw.frwk.engine">
<level value="INFO"/>
</logger>
<!-- *=============================================================* -->
<!-- * LOGGER: BusinessWorks Engine loggers * -->
<!-- *=============================================================* -->
<logger name="com.tibco.bw.core">
<level value="WARN"/>
</logger>
<logger name="com.tibco.bx">
<level value="ERROR"/>
</logger>
<logger name="com.tibco.pvm">
<level value="ERROR"/>
</logger>
<logger name="configuration.management.logger">
<level value="INFO"/>
</logger>
<!-- *=============================================================* -->
<!-- * LOGGER: BusinessWorks Palette and Activity loggers * -->
<!-- *=============================================================* -->
<!-- Default Log activity logger -->
<logger name="com.tibco.bw.palette.generalactivities.Log">
<level value="DEBUG"/>
</logger>
<logger name="com.tibco.bw.palette">
<level value="ERROR"/>
</logger>
<!-- *=============================================================* -->
<!-- * LOGGER: BusinessWorks Binding loggers * -->
<!-- *=============================================================* -->
<!-- SOAP Binding logger -->
<logger name="com.tibco.bw.binding.soap">
<level value="ERROR"/>
</logger>
<!-- REST Binding logger -->
<logger name="com.tibco.bw.binding.rest">
<level value="ERROR"/>
</logger>
<!-- *=============================================================* -->
<!-- * LOGGER: BusinessWorks Shared Resource loggers * -->
<!-- *=============================================================* -->
<logger name="com.tibco.bw.sharedresource">
<level value="ERROR"/>
</logger>
<!-- *=============================================================* -->
<!-- * LOGGER: BusinessWorks Schema Cache loggers * -->
<!-- *=============================================================* -->
<logger name="com.tibco.bw.cache.runtime.xsd">
<level value="ERROR"/>
</logger>
<logger name="com.tibco.bw.cache.runtime.wsdl">
<level value="ERROR"/>
</logger>
<!-- *=============================================================* -->
<!-- * LOGGER: BusinessWorks Governance loggers * -->
<!-- *=============================================================* -->
<!-- Governance: Policy Director logger1 -->
<logger name="com.tibco.governance">
<level value="ERROR"/>
</logger>
<logger name="com.tibco.amx.governance">
<level value="WARN"/>
</logger>
<!-- Governance: Policy Director logger2 -->
<logger name="com.tibco.governance.pa.action.runtime.PolicyProperties">
<level value="ERROR"/>
</logger>
<!-- Governance: SPM logger1 -->
<logger name="com.tibco.governance.spm">
<level value="ERROR"/>
</logger>
<!-- Governance: SPM logger2 -->
<logger name="rta.client">
<level value="ERROR"/>
</logger>
<!-- *=============================================================* -->
<!-- * LOGGER: BusinessWorks Miscellaneous Loggers * -->
<!-- *=============================================================* -->
<logger name="com.tibco.bw.platformservices">
<level value="INFO"/>
</logger>
<logger name="com.tibco.bw.core.runtime.statistics">
<level value="ERROR"/>
</logger>
<!-- *=============================================================* -->
<!-- * LOGGER: Other loggers * -->
<!-- *=============================================================* -->
<logger name="org.apache.axis2">
<level value="ERROR"/>
</logger>
<logger name="org.eclipse">
<level value="ERROR"/>
</logger>
<logger name="org.quartz">
<level value="ERROR"/>
</logger>
<logger name="org.apache.commons.httpclient.util.IdleConnectionHandler">
<level value="ERROR"/>
</logger>
<!-- *=============================================================* -->
<!-- * LOGGER: User loggers. User's custom loggers should be * -->
<!-- * configured in this section. * -->
<!-- *=============================================================* -->
<!-- *=============================================================* -->
<!-- * ROOT * -->
<!-- *=============================================================* -->
<root level="ERROR">
<appender-ref ref="STDOUT" />
</root>
</configuration>
También puede hacer configuraciones más personalizadas basadas en la información disponible en la página de configuración del codificador ECS aquí.
¿Cómo habilitar el soporte de registro de TIBCO BW ECS?
Para BWCE, los pasos son similares, pero debemos tener en cuenta que todos los componentes de tiempo de ejecución están empaquetados dentro del base-runtime-version.zip que descargamos de nuestro sitio de eDelivery de TIBCO, por lo que necesitaremos usar una herramienta para abrir ese ZIP y hacer las siguientes modificaciones:
- Colocaremos los JARs descargados en esa carpeta
/tibco.home/bwce/2.8/system/shared/com.tibco.tpcl.logback_1.2.1600.004
- Abriremos el
META-INF/MANIFEST.MFy haremos las siguientes modificaciones:
- Agregar esos JARs a la sección
Bundle-Classpath:
- Agregar esos JARs a la sección
- Incluir el siguiente paquete (co.elastic.logging.logback) como parte de los paquetes exportados agregándolo a la sección
Exported-package:
- Además, necesitaremos modificar el
bwappnodeen la ubicación/tibco.home/bwce/2.8/binpara agregar los archivos JAR también al classpath que la imagen base de BWCE usa para ejecutar y asegurar que esto se esté cargando:
Ahora podemos construir nuestra imagen base de BWCE como de costumbre y modificar el logback.xml como se explicó anteriormente. Aquí puede ver una aplicación de ejemplo utilizando esta configuración:
{"@timestamp":"2023-08-28T12:49:08.524Z","log.level": "INFO","message":"TIBCO BusinessWorks version 2.8.2, build V17, 2023-05-19","ecs.version": "1.2.0","service.name":"a","service.version":"b","service.environment":"c","service.node.name":"d","event.dataset":"a","process.thread.name":"main","log.logger":"com.tibco.thor.frwk"}
<>@BWEclipseAppNode> {"@timestamp":"2023-08-28T12:49:25.435Z","log.level": "INFO","message":"Started by BusinessStudio.","ecs.version": "1.2.0","service.name":"a","service.version":"b","service.environment":"c","service.node.name":"d","event.dataset":"a","process.thread.name":"main","log.logger":"com.tibco.thor.frwk.Deployer"}
{"@timestamp":"2023-08-28T12:49:32.795Z","log.level": "INFO","message":"TIBCO-BW-FRWK-300002: BW Engine [Main] started successfully.","ecs.version": "1.2.0","service.name":"a","service.version":"b","service.environment":"c","service.node.name":"d","event.dataset":"a","process.thread.name":"main","log.logger":"com.tibco.bw.frwk.engine.BWEngine"}
{"@timestamp":"2023-08-28T12:49:34.338Z","log.level": "INFO","message":"TIBCO-THOR-FRWK-300001: Started OSGi Framework of AppNode [BWEclipseAppNode] in AppSpace [BWEclipseAppSpace] of Domain [BWEclipseDomain]","ecs.version": "1.2.0","service.name":"a","service.version":"b","service.environment":"c","service.node.name":"d","event.dataset":"a","process.thread.name":"Framework Event Dispatcher: Equinox Container: 1395256a-27a2-4e91-b774-310e85b0b87c","log.logger":"com.tibco.thor.frwk.Deployer"}
{"@timestamp":"2023-08-28T12:49:34.456Z","log.level": "INFO","message":"TIBCO-THOR-FRWK-300018: Deploying BW Application [t3:1.0].","ecs.version": "1.2.0","service.name":"a","service.version":"b","service.environment":"c","service.node.name":"d","event.dataset":"a","process.thread.name":"Framework Event Dispatcher: Equinox Container: 1395256a-27a2-4e91-b774-310e85b0b87c","log.logger":"com.tibco.thor.frwk.Application"}
{"@timestamp":"2023-08-28T12:49:34.524Z","log.level": "INFO","message":"TIBCO-THOR-FRWK-300021: All Application dependencies are resolved for Application [t3:1.0]","ecs.version": "1.2.0","service.name":"a","service.version":"b","service.environment":"c","service.node.name":"d","event.dataset":"a","process.thread.name":"Framework Event Dispatcher: Equinox Container: 1395256a-27a2-4e91-b774-310e85b0b87c","log.logger":"com.tibco.thor.frwk.Application"}
{"@timestamp":"2023-08-28T12:49:34.541Z","log.level": "INFO","message":"Started by BusinessStudio, ignoring .enabled settings.","ecs.version": "1.2.0","service.name":"a","service.version":"b","service.environment":"c","service.node.name":"d","event.dataset":"a","process.thread.name":"Framework Event Dispatcher: Equinox Container: 1395256a-27a2-4e91-b774-310e85b0b87c","log.logger":"com.tibco.thor.frwk.Application"}
{"@timestamp":"2023-08-28T12:49:35.842Z","log.level": "INFO","message":"TIBCO-THOR-FRWK-300006: Started BW Application [t3:1.0]","ecs.version": "1.2.0","service.name":"a","service.version":"b","service.environment":"c","service.node.name":"d","event.dataset":"a","process.thread.name":"EventAdminThread #1","log.logger":"com.tibco.thor.frwk.Application"}
{"@timestamp":"2023-08-28T12:49:35.954Z","log.level": "INFO","message":"aaaaaaa
","ecs.version": "1.2.0","service.name":"a","service.version":"b","service.environment":"c","service.node.name":"d","event.dataset":"a","process.thread.name":"bwEngThread:In-Memory Process Worker-1","log.logger":"com.tibco.bw.palette.generalactivities.Log.t3.module.Log"}
gosh: stopping shell