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
- Añadir los siguientes jars al ROOT/WEB-INF/lib de liferay
- kafka_2.10-0.8.1.1.jar
- metrics-core-2.2.0.jar
- scala-library.jar
- Crear una cola (tipo topic) con las particiones y replicas que se
quiera-
./kafka-topics.sh –create –zookeeper
lug000.zylk.net:2181 –replication-factor 3 –partition 3
–topic test-3-3
-
./kafka-topics.sh –create –zookeeper
- 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