Configurando liferay para que deje las trazas en colas de kafka

Siguiendo con las pruebas de los productos mencionados en anteriores post, una de las cosas más o menos sencillas que se puede hacer es, configurar los distintos productos que usan log4j para añadirles un nuevo appender de tipo cola de kafka. El propio proyecto de kafka trae un appender para log4j

Para hacer uso del mismo basta con hacer tres cosas

  1. Añadir los siguientes jars al ROOT/WEB-INF/lib de liferay
    1. kafka_2.10-0.8.1.1.jar
    2. metrics-core-2.2.0.jar
    3. scala-library.jar
  2. Crear una cola (tipo topic) con las particiones y replicas que se quiera
    1. ./kafka-topics.sh --create --zookeeper lug000.zylk.net:2181 --replication-factor 3 --partition 3 --topic test-3-3
  3. Añadir la logger de liferay el appender nuevo y añadirlo como referencia

[...]

<appender name="KAFKA" class="kafka.producer.KafkaLog4jAppender">
 <param name="BrokerList" value="lug000.zylk.net:9092,lug002.zylk.ne:9092,lug004.zylk.net:9092" />
 <param name="Topic" value="test-1-1" />
 <param name="ProducerType" value="async" />
 <layout class="org.apache.log4j.EnhancedPatternLayout">
  <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%t][%c{1}:%L] %m%n" />
 </layout>
</appender>

[...]

<root>
 <priority value="DEBUG" />
 <appender-ref ref="CONSOLE" />
 <appender-ref ref="FILE" />
 <appender-ref ref="KAFKA" />
</root>

 

Siguiendo estos tres sencillos pasos tenemos las trazas en la consola, en un fichero y en una cola de kafka. Ahora solo quedaría consumirla con algun consumer.

Evidentemente para ponerlo en producción habría que hacer muchas más pruebas y estresar el sistema para ver si funciona como se espera. Por ejemplo hemos detectado un problemilla que habría que solucionar y está relacionado con los retornos de carro (creemos) porque los mensajes que log4j manda a las colas de kafka de alguna manera pierden parte de la información si el mensaje tiene retornos de carro, por ejemplo perdemos el stackTrace (no sabemos si lo hace el publicador o el consumidor que estamos usando para ver el topic creado para las pruebas)

A continuación un pantallazo del consumer que trae por defecto kafka (./kafka-console-consumer.sh --zookeeper localhost:2181 --topic test-1-1 --from-beginning) para ver los topics

00

More Blog Entries

0 Comments