Changes

Apache Kafka

114 bytes added, 14:46, 21 April 2019
Logstash producer with logback
==Logstash producer with logback ==
A logstash-t rakhatjuk a kafka elé és a kafka után is. Első lépésként a kafka elé fogjuk tenni, ami szortírozni fogja a logokat különböző topic-okba. A logstash-be a logback-el fogjuk beírni az üzeneteket egy speciális logstash appender-t használva.
A futtatásához szükséges környezet korábban ismertetett docker stack-et ki fogjuk bővíteni egy két nodelogstash service-os swarm cluster leszel. <pre># docker node lsID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSIONmaigxlyagj1fl4sgcf6rnn9pc * mg0 Ready Active Leader 18.05.0:[[File:ClipCapIt-190421-cevox99u5s1g1su742mc6npm370 worker0 Ready Active 18.05163339.0-ce</pre>PNG]]
Itt fogunk futtatni egy docker stackMind a három komponenst rá fogjuk kötni az ingress hálózatra is, mivel a Java producer-et ami tartalmaz majd nek el kell érnie a zookeeperlogstash-en t, és a kafkaconsumer-n kívül is nek pedig a logstashkafa-t.
A loggolásra logback-et fogunk használni, aki a logstash 51415-ös portjára fogja küldeni TCP socket-en. Az üzeneteket a '''kafka-console-consumer'''-el fogjuk kiolvasni.
:[[File:ClipCapIt-190327-224419.PNG]] Mind a három komponenst rá fogjuk kötni az ingress hálózatra is, mivel a Java producer-nek el kell érnie a logstash-t, és a consumer-nek pedig a kafa-t. ===Logstash konfiguráció===
A loggolásra lostash a TCP socket-en keresztül várja majd a logback-et től a logokat. A logberben Marker-eket fogunk használni, aki amik a [tags] tömbbe fog tenni a logstash 51415. A logstash a Kafka output plugin segítségével fogja beírni a megfelelő topic-ös portjára fogja küldeni TCPba az üzeneteket.
:[[File:ClipCapIt-190421-163511.PNG]]
===Logstash konfiguráció===Az alap logstash image már tartalmazz mind a Kafka input és output plugin-t is, így kapásból tudunk a logstash-el Kafka-ból írni és olvasni. Listázzuk ki a logstash plugin-eket a '''bin/logstash-plugin list''' paranccsal. Láthatjuk hogy a kafka mind az input mind az output-ban ott van. <pre># docker run -it docker.elastic.co/logstash/logstash:6.6.2 bin/logstash-plugin list...logstash-input-kafka...logstash-output-kafka</pre>
A lostash a TCP socket-en keresztül várja majd a logback-től a logokat. A logberben Marker-eket fogunk használni, amik a [tags] tömbbe fog tenni a logstash.
:[[File:ClipCapIt-190327-230626.PNG]]
/usr/share/logstash/pipeline/'''logstash.conf'''
===Swarm stack===
Fontos, hogy a logstash-ből a 6.6-os szériát használjuk, mert a korábbi verziókban van egy kafak specifikus hiba. A logstash konfigurációt volume driver-er fogjuk felcsatolnihost gépről. (A volume dirver-ekről részletek itt: https://wiki.berki.org/index.php/Docker_volume_orchestration)
<source lang="C++">
share: 192.168.42.1:/home/adam/dockerStore/logstash/config/
</source>
 
 
 
 
 
T2-topic
</pre>
 
===Pom.xml===
A logback a logstash-be a '''logstash-logback-encoder''' -el fog írni. Ehhez szükség van egy új függőségre:
<source lang="xml">
<dependency>
<source lang="xml">
<configuration>
<!-- <shutdownHook/> --> <!-- Nagyon fontos, hogy leállítsuk a logger context-et mielőtt a VM leáll, mert ha a VM leállítása nagyon közel van a log beíráshoz, akkor még azelőtt leáll az egész VM, hogy a logokat kiírtuk volna. de ha még a VM leállítása előtt meghívjuk a sthudownHook-ot, akkor leállás előtt még ki fogja írni a logokat. --> <shutdownHook class="ch.qos.logback.core.hook.DelayingShutdownHook"/>
<appender name="STDOUT"
===Java producerlogger example===
<source lang="java">
import org.slf4j.Logger;
logger.info(taMarker, "Message to T1 from: {}", "adam");
logger.info(alMarker, "Message to T2 from: {}", "adam");
System.out.println( "Hello World!" );
}
}
===Tesztelés===
Logstash Mivel a logstash config-ba beletettük az '''stdout''' output-ot is, ezért a log-ba is be fog írni minden üzenetet:
<pre>
confluence_logstash.1.4a9rr1w42iud@worker0 | {