SlideShare ist ein Scribd-Unternehmen logo
1 von 32
ELASTICSEARCH & DOCKER
MIT LOGSTASH JDBC UND RUBY
AGENDA
• ÜBERBLICK
• VORBEREITUNG DER CONTAINER
• A. START VON MYSQL & PHPMYADMIN
• B. VORBEREITUNG DER MYSQL DATENBANK
• C. START VON ELASTICSEARCH & KIBANA
• IMPLEMENTIERUNG DER KONFIGURATIONSDATEI
• A. INPUT (JDBC)
• C. FILTER (JDBC_STREAMING, RUBY)
• B. OUTPUT (ELASTICSEARCH)
• DURCHFÜHRUNG DES IMPORT
• START LOGSTASH
ELASTICSEARCH & DOCKER mit
LOGSTASH, JDBC und Ruby
26.04.2020Autor: Dieter Schanz 2
ÜBERBLICK
• WER BIST DU?
• WAS IST DAS ZIEL?
• WAS BENÖTIGE ICH?
• WIE MACHE ICH DAS?
ICH BIN DIETER, EIN ANWENDUNGSENTWICKLER
DATEN AUS MYSQL MIT LOGSTASH IN ELASTICSEARCH IMPORTIEREN
WIR BRAUCHEN DAFÜR NUR DOCKER + MYSQL-TREIBER
WIR STARTEN DOCKER CONTAINER UND ERSTELLEN EIN
KONFIGURATIONSDATEI
ELASTICSEARCH & DOCKER mit
LOGSTASH, JDBC und Ruby
26.04.2020Autor: Dieter Schanz 3
ÜBERBLICK
WAS IST DER PLAN?
• WIR LESEN DATEN AUS EINER MYSQL
DATENBANK AUS
• MANIPULIEREN DIE DATEN
• INFORMATION AUS UNTERSCHIEDLICHEN TABELLEN
ZU EINEM OBJEKT
• IMPORT DER DATEN NACH ELASTICSEARCH
ELASTICSEARCH & DOCKER mit
LOGSTASH, JDBC und Ruby
26.04.2020Autor: Dieter Schanz 4
ÜBERBLICK
WOZU LOGSTASH?
• LOGSTASH IST EINE SERVERSEITIGE OPEN-
SOURCE-SOFTWARE
• SIMULTANE VERARBEITUNG
• DATEN AUS UNTERSCHIEDLICHEN QUELLEN
• MANIPULIERUNG UND WEITERLEITUNG DER DATEN
ELASTICSEARCH & DOCKER mit
LOGSTASH, JDBC und Ruby
26.04.2020Autor: Dieter Schanz 5
Quelle: https://www.elastic.co/
VORBEREITUNG
WIR BENÖTIGEN FÜR DIESEN TASK NUR DOCKER
CONTAINER
• MYSQL & PHPMYADMIN
• ELASTICSEARCH
• KIBANA
• LOGSTASH
ELASTICSEARCH & DOCKER mit
LOGSTASH, JDBC und Ruby
26.04.2020Autor: Dieter Schanz 6
VORBEREITUNG
STARTE DIE MOTOREN!
• STARTE DIE CONTAINER FÜR MYSQL
• & PHPMYADMIN
ELASTICSEARCH & DOCKER mit
LOGSTASH, JDBC und Ruby
26.04.2020Autor: Dieter Schanz 7
DOCKER RUN --NAME MYSQL-SERVER
-P 3306:3306
-E MYSQL_ROOT_PASSWORD=CODINGSOLO
-D MYSQL:LATEST
DOCKER RUN –NAME MYADMIN
-D --LINK MYSQL-SERVER:DB
-P 8080:80 PHPMYADMIN/PHPMYADMIN
VORBEREITUNG
JETZT SUCHEN WIR UNSEREN MYSQL-TREIBER AUF
MAVEN
• GEH AUF FOLGENDE URL
HTTPS://MVNREPOSITORY.COM/
26.04.2020Autor: Dieter Schanz 8
ELASTICSEARCH & DOCKER mit
LOGSTASH, JDBC und Ruby
VORBEREITUNG
ELASTICSEARCH & DOCKER mit
LOGSTASH, JDBC und Ruby
26.04.2020Autor: Dieter Schanz 9
• SUCHE NACH MYSQL-CONNECTOR
• WÄHLE DIE DIE PASSENDE VERSION AUS, DIE ZU
DEINEM MYSQL CONTAINER PASST
• DANN LÄDST DU DIR DIE JAR HERUNTER
VORBEREITUNG
ELASTICSEARCH & DOCKER mit
LOGSTASH, JDBC und Ruby
26.04.2020Autor: Dieter Schanz 10
LETZTER SCHRITT
• LADE DIR MEINE BEISPIEL DATEN FÜR DIE MYSQL
DATENBANK HERUNTER
• DAMIT WIRD EINE NEUE DATENBANK ANGELEGT,
DIE DATENBANK-STRUKTUR UND TESTDATEN
• AUßERDEM WIRD EIN NEUER BENUTZER FÜR
LOGSTASH ERSTELLT
HTTPS://GITHUB.COM/SCHADIET/ELASTICSEARCH-DOCKER-
WITH-LOGSTASH-JDBC-AND-
MAGIC/BLOB/MASTER/TUTORIAL%20CODINGSOLO.SQL
VORBEREITUNG
LASS UNS DIE DATENBANK VORBEREITEN!
• GEH AUF HTTP://LOCALHOST:8080/
• LOG IN ALS ROOT
• PASSWORT WURDE BEIM START DES MYSQL-CONTAINERS
GESETZT
• IMPORT VON TUTORIAL CODINGSOLO.SQL
26.04.2020Autor: Dieter Schanz 11
ELASTICSEARCH & DOCKER mit
LOGSTASH, JDBC und Ruby
VORBEREITUNG
WIR ERSTELLEN JETZT EINE ORDNERSTRUKTUR
• HAUPTORDNER ELASTICSEARCH_IMPORT
• UNTERORDNER
• DRIVER
• PIPELINE
• IN DRIVER KOMMT DER MYSQL-CONNECTOR
• IN PIPELINE ERSTELLEN WIR DIE KONFIGURATIONSDATEI
ELASTICSEARCH & DOCKER mit
LOGSTASH, JDBC und Ruby
26.04.2020Autor: Dieter Schanz 12
VORBEREITUNG
WIR ERSTELLEN JETZT EIN DOCKER NETZWERK
• FÜR ELASTICSEARCH & KIBANA
• NAME IST FREI WÄHLBAR -> SKYNET
ELASTICSEARCH & DOCKER mit
LOGSTASH, JDBC und Ruby
26.04.2020Autor: Dieter Schanz 13
DOCKER NETWORK CREATE SKYNET
VORBEREITUNG
STARTEN WIR NUN AUCH ELASTICSEARCH & KIBANA
DOCKER RUN -D --NAME ELASTICSEARCH
--NET SKYNET
-P 9200:9200 -P 9300:9300
-E "DISCOVERY.TYPE=SINGLE-NODE"
ELASTICSEARCH:7.6.2
ELASTICSEARCH & DOCKER mit
LOGSTASH, JDBC und Ruby
26.04.2020Autor: Dieter Schanz 14
DOCKER RUN -D --NAME KIBANA
--NET SKYNET
-P 5601:5601 KIBANA:7.6.2
VORBEREITUNG
WIR PRÜFEN NUN BEIDE SYSTEME:
• ELASTICSEARCH ERREICHST DU UNTER
HTTP://LOCALHOST:9200/
26.04.2020Autor: Dieter Schanz 15
ELASTICSEARCH & DOCKER mit
LOGSTASH, JDBC und Ruby
VORBEREITUNG
• KIBANA ERREICHST DU UNTER
HTTP://LOCALHOST:5601/
ELASTICSEARCH & DOCKER mit
LOGSTASH, JDBC und Ruby
26.04.2020Autor: Dieter Schanz 16
IMPLEMENTIERUNG
JETZT LEGEN WIR LOS!
LASS UNS NUN DIE KONFIGURATIONSDATEI BEARBEITEN:
• EINE TYPISCHE KONFIGURATION HAT DREI BEREICHE
• INPUT
• FILTER
• OUTPUT
• BEI MULTIPLEN DATENOBJEKTEN SOLLTEST DU DEN OBJECT-TYPE ABFRAGEN
ELASTICSEARCH & DOCKER mit
LOGSTASH, JDBC und Ruby
26.04.2020Autor: Dieter Schanz 17
input {
}
filter {
##Check you are working with the correct type
if[type] == "XY" {
}
}
output {
if[type] == "XY" {
}
stdout { codec => rubydebug }
}
IMPLEMENTIERUNG
INPUT
• JDBC
• WIR VERGEBEN EINEN OBJECT-TYPE
• BEI MULTIPLEN INPUT-OBJEKTEN NOTWENDIG
• SCHEDULE
• CRON SYNTAX
26.04.2020Autor: Dieter Schanz 18
ELASTICSEARCH & DOCKER mit
LOGSTASH, JDBC und Ruby
input {
##JDBC Plugin to Query Data from MySQL
jdbc {
type => "kundendaten"
schedule => "* * * * *"
jdbc_driver_library => "/driver/mysql-connector-java-8.0.19.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_connection_string => "jdbc:mysql://localhost:3306/codingsolo"
jdbc_user => "elastic"
jdbc_password => "elastic"
statement => "SELECT * FROM codingsolo.kunde;"
}
}
IMPLEMENTIERUNG
INPUT
• JDBC
• DRIVER
• PFAD ZUM TREIBER (AUF SEITE DES CONTAINERS)
• DRIVER CLASS
• CONNECTION STRING
• ADRESSE DER MYSQL DB & DATENBANKNAME
• USER & PASSWORD KAM MIT DEN TESTDATEN
• STATEMENT DEIN DATENBANK QUERY
26.04.2020Autor: Dieter Schanz 19
ELASTICSEARCH & DOCKER mit
LOGSTASH, JDBC und Ruby
input {
##JDBC Plugin to Query Data from MySQL
jdbc {
type => "kundendaten"
schedule => "* * * * *"
jdbc_driver_library => "/driver/mysql-connector-java-8.0.19.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_connection_string => "jdbc:mysql://localhost:3306/codingsolo"
jdbc_user => "elastic"
jdbc_password => "elastic"
statement => "SELECT * FROM codingsolo.kunde;"
}
}
IMPLEMENTIERUNG
FILTER
• JDBC_STREAMING FÜR BESTELLUNGEN
• DIE JDBC KONFIGURATIONEN AUS DEM JDBC
INPUT
• STATEMENT
• QUERY FÜR WEITERE DATEN
ELASTICSEARCH & DOCKER mit
LOGSTASH, JDBC und Ruby
26.04.2020Autor: Dieter Schanz 20
## jdbc_streaming Plugin add MORE Data
## from different Tables / Databases
jdbc_streaming {
jdbc_driver_library => "/driver/mysql-connector-java-8.0.19.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_connection_string => "jdbc:mysql://localhost:3306/codingsolo"
jdbc_user => "elastic"
jdbc_password => "elastic"
statement => "SELECT id as bestellung_id,
bestellung_datum,
bestellung_status
from codingsolo.bestellung
WHERE codingsolo.bestellung.kunde_id = :idparam;"
parameters => { "idparam" => "id" }
target => "kunde_bestellung"
}
IMPLEMENTIERUNG
FILTER
• JDBC_STREAMING FÜR BESTELLUNGEN
• PARAMETERS
• WIR VERKNÜPFEN IDPARAM AUF DIE ID DER
DATEN AUS DEM OBJECT-TYPE KUNDENDATEN
• TARGET
• WIR SPEICHERN DIE DATEN IN DAS NEUE FELD
KUNDE_BESTELLUNG
ELASTICSEARCH & DOCKER mit
LOGSTASH, JDBC und Ruby
26.04.2020Autor: Dieter Schanz 21
## jdbc_streaming Plugin add MORE Data
## from different Tables / Databases
jdbc_streaming {
jdbc_driver_library => "/driver/mysql-connector-java-8.0.19.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_connection_string => "jdbc:mysql://localhost:3306/codingsolo"
jdbc_user => "elastic"
jdbc_password => "elastic"
statement => "SELECT id as bestellung_id,
bestellung_datum,
bestellung_status
from codingsolo.bestellung
WHERE codingsolo.bestellung.kunde_id = :idparam;"
parameters => { "idparam" => "id" }
target => "kunde_bestellung"
}
IMPLEMENTIERUNG
FILTER
• JDBC_STREAMING FÜR ANSCHRIFT
• PARAMETERS
• WIR VERKNÜPFEN IDPARAM AUF DIE ID DER
DATEN AUS DEM OBJECT-TYPE KUNDENDATEN
• TARGET
• WIR SPEICHERN DIE DATEN IN DAS NEUE FELD
KUNDE_ANSCHRIFT
ELASTICSEARCH & DOCKER mit
LOGSTASH, JDBC und Ruby
26.04.2020Autor: Dieter Schanz 22
##jdbc_streaming Plugin to add Data from different Tables / Databases
jdbc_streaming {
jdbc_driver_library => "/driver/mysql-connector-java-8.0.19.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_connection_string => "jdbc:mysql://localhost:3306/codingsolo"
jdbc_user => "elastic"
jdbc_password => "elastic"
statement => "SELECT codingsolo.kunde_anschrift.kunde_id,
anschrift.id,
anschrift.anschrift_Strasse,
anschrift.anschrift_hausnummer,
anschrift.anschrift_postleitzahl,
anschrift.anschrift_ort,
anschrift.anschrift_erstellung,
land_name as Anschrift_land,
land_kuerzel FROM codingsolo.kunde_anschrift
LEFT JOIN codingsolo.anschrift as anschrift
ON codingsolo.kunde_anschrift.anschrift_id = anschrift.id
LEFT JOIN codingsolo.land as land
ON anschrift.anschrift_land = land.id
WHERE codingsolo.kunde_anschrift.kunde_id = :idparam;"
parameters => {"idparam" => "id" }
target => "kunde_anschrift"
}
IMPLEMENTIERUNG
FILTER
• JDBC_STREAMING FÜR BESTELLPOSTEN
• PARAMETERS
• WIR VERKNÜPFEN IDPARAM AUF DIE ID DER DATEN
AUS DEM OBJECT-TYPE KUNDENDATEN
• TARGET
• WIR SPEICHERN DIE DATEN IN DAS NEUE FELD
BESTELLUNG_POSTEN
ELASTICSEARCH & DOCKER mit
LOGSTASH, JDBC und Ruby
26.04.2020Autor: Dieter Schanz 23
##jdbc_streaming Plugin add MORE Data from different Tables / Databases
jdbc_streaming {
jdbc_driver_library => "/driver/mysql-connector-java-8.0.19.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_connection_string => "jdbc:mysql://localhost:3306/codingsolo"
jdbc_user => "elastic"
jdbc_password => "elastic"
statement => "SELECT
codingsolo.bestellung_artikel.id as bestellung_id,
codingsolo.bestellung_artikel.anzahl,
artikel.id,
artikel.artikel_name,
artikel.artikel_preis,
artikel.artikel_status
FROM codingsolo.bestellung_artikel
LEFT JOIN codingsolo.artikel as artikel
ON codingsolo.bestellung_artikel.artikel_id = artikel.id
WHERE codingsolo.bestellung_artikel.id in :idparam;"
parameters => { "idparam" => "bestellung_temp"}
target => "bestellung_posten"
}
IMPLEMENTIERUNG
FILTER
RUBY CODE
• WIR KÖNNEN EIGENE LOGIK IMPLEMENTIEREN
• BEISPIEL: ITERATION ÜBER DIE BESTELLUNGEN
• AUSLESEN DER BESTELL-ID
• SPEICHERN DER BESTELL-ID IN EINER LISTE
ELASTICSEARCH & DOCKER mit
LOGSTASH, JDBC und Ruby
26.04.2020Autor: Dieter Schanz 24
## Extracting all bestellung_id from Field:kunde_bestellung
## into a List of Strings
ruby {
code => '
event.get("kunde_bestellung").each do |item|
if not event.get("bestellung_temp")
event.set("bestellung_temp", [item["bestellung_id"]])
else
event.set("bestellung_temp", event.get("bestellung_temp")
+ [item["bestellung_id"]])
end
end
'
}
IMPLEMENTIERUNG
FILTER
RUBY CODE
• WIR KÖNNEN EIGENE LOGIK IMPLEMENTIEREN
• BEISPIEL: ITERATION ÜBER DIE BESTELLPOSTEN
UND ÜBER DIE BESTELLUNGEN
• ABGLEICH BESTELLUNGEN UND BESTELLPOSTEN
• ZUWEISUNG BESTELLPOSTEN ZUR BESTELLUNG
ELASTICSEARCH & DOCKER mit
LOGSTASH, JDBC und Ruby
26.04.2020Autor: Dieter Schanz 25
## Adding order-line to orders MY GOAL is to include all entries
## from one bestellung_posten into the single kunde_bestellung
ruby {
code => '
event.get("bestellung_posten").each_with_index do |item, index_item|
event.get("kunde_bestellung").each_with_index do |order, index|
if order["bestellung_id"] == item["bestellung_id"]
if not event.get("[kunde_bestellung][#{index}][bestellung_posten]")
event.set("[kunde_bestellung][#{index}][bestellung_posten]", [item])
else
event.set("[kunde_bestellung][#{index}][bestellung_posten]",
order["bestellung_posten"] + [item])
end
end
end
end
'
}
IMPLEMENTIERUNG
FILTER
MUTATE
• WIR RÄUMEN DIE DATEN AUF
• REMOVE_FIELD ENTFERNT EINE FELD IM
DOKUMENT
ELASTICSEARCH & DOCKER mit
LOGSTASH, JDBC und Ruby
26.04.2020Autor: Dieter Schanz 26
##clean up
mutate {
remove_field => [ "bestellung_posten"]
remove_field => [ "bestellung_temp"]
}
IMPLEMENTIERUNG
OUTPUT
• ELASTICSEARCH
• ABFRAGE DES TYPES
• (UNTERSCHIEDLICHE IPUTS -> UNTERSCHIEDLICHE TYPEN)
• HOST AUF DEM ELASTICSEARCH LÄUFT
• INDEX
• AUF WELCHEM INDEX WERDEN DIE DATEN GESPEICHERT
ELASTICSEARCH & DOCKER mit
LOGSTASH, JDBC und Ruby
26.04.2020Autor: Dieter Schanz 27
output {
if[type] == "kundendaten" {
elasticsearch {
hosts => "localhost:9200"
index => "kundendaten"
document_type => "_doc"
document_id => "%{id}"
doc_as_upsert => true
action => "update"
}
}
stdout { codec => rubydebug }
}
IMPLEMENTIERUNG
OUTPUT
• ELASTICSEARCH
• DOCUMENT_ID
• DU KANNST EINE ID VERGEBEN
• DOC_AS_UPSERT
• DAMIT DATEN BEI AKTUALISIERUNG ÜBERSCHRIEBEN WERDEN
• WICHTIG! IMMER EIN STANDARD OUTPUT EINBAUEN
• DEBUG REASON
ELASTICSEARCH & DOCKER mit
LOGSTASH, JDBC und Ruby
26.04.2020Autor: Dieter Schanz 28
output {
if[type] == "kundendaten" {
elasticsearch {
hosts => "localhost:9200"
index => "kundendaten"
document_type => "_doc"
document_id => "%{id}"
doc_as_upsert => true
action => "update"
}
}
stdout { codec => rubydebug }
}
DURCHFÜHRUNG
BEVOR WIR LOGSTASH STARTEN:
• FÜR DIESES BEISPIEL GEBEN WIR DEN HOST ALS NETWORK AN:
• --NET="HOST"
• -V = ORDNER FREIGABE HOST:CONTRAINER
-V D:ELASTICSEARCH_IMPORTPIPELINE:/USR/SHARE/LOGSTASH/PIPELINE/
• WIR VERKNÜPFEN UNSEREN ORDNER PIPELINE MIT DEM AUS DEM CONTAINER
• CONTAINER-SEITIG ÜBERPRÜFT LOGSTASH OB IN PIPELINE KONFIGURATIONSDATEIEN BEREITLIEGEN
• ACHTE DABEI AUF DEN PFAD ZUM ORDNER. DEIN PFAD KANN ABWEICHEN
ELASTICSEARCH & DOCKER mit
LOGSTASH, JDBC und Ruby
26.04.2020Autor: Dieter Schanz 29
DURCHFÜHRUNG
STARTE WIR ENDLICH LOGSTASH!
• FREIGABE UNSERES ORDNER DRIVER
• LOGSTASH BENÖTIGT NOCH UNSEREN MYSQL-TREIBER
ELASTICSEARCH & DOCKER mit
LOGSTASH, JDBC und Ruby
26.04.2020Autor: Dieter Schanz 30
DOCKER RUN -IT --RM --NAME LOGSTASH
--NET="HOST"
-V D:ELASTICSEARCH_IMPORTPIPELINE:
/USR/SHARE/LOGSTASH/PIPELINE/
-V D:ELASTICSEARCH_IMPORTDRIVER
:/DRIVER/
DOCKER.ELASTIC.CO/LOGSTASH/LOGSTASH:7.6.2
DURCHFÜHRUNG
ÜBERPRÜFE DEIN ERGEBNIS:
• GEH AUF FOLGENDE ADRESSE:
HTTP://LOCALHOST:9200/KUNDENDATEN/_DOC/2
• ES SOLLTEN NUN DATEN DES KUNDEN MIT ANSCHRIFT
UND BESTELLUNGEN ANGEZEIGT WERDEN
• ALTERNATIV KÖNNEN WIR AUCH KIBANA NUTZEN
FIREFOX HAT EINE JSON-VIEWER
ELASTICSEARCH & DOCKER mit
LOGSTASH, JDBC und Ruby
26.04.2020Autor: Dieter Schanz 31
{
"_index": "kundendaten",
"_type": "_doc",
"_id": "2",
"_source": {
"kunde_name": "Willson",
"kunde_sperrung": false,
"@version": "1",
"kunde_vorname": "Sam",
"type": "kundendaten",
"kunde_bestellung": [
{
"bestellung_datum": "2020-04-13T17:34:21.000Z",
"bestellung_status": "In Bearbeitung",
"bestellung_posten": [
{
"anzahl": 5,
"artikel_preis": 80.99,
"bestellung_id": 8003,
"artikel_name": "Gaming Maus (Pro Gramer)",
"id": 7,
"artikel_status": "gering"
}
],
"bestellung_id": 8003
}
],
"kunde_erstellung": "2020-04-18T15:02:25.000Z",
"id": 2,
"kunde_geburtsdatum": "1992-11-01T00:00:00.000Z",
"@timestamp": "2020-04-25T17:58:00.547Z",
"kunde_kundennummer": "K1021212",
"kunde_anschrift": [
{
"anschrift_erstellung": "2020-04-18T15:15:05.000Z",
"Anschrift_land": "England",
"anschrift_Strasse": "River Street",
"land_kuerzel": "en",
"anschrift_postleitzahl": "SW1E 6LB",
"anschrift_ort": "London",
"kunde_id": 2,
"id": 5,
"anschrift_hausnummer": "13"
}
]
}
}
ELASTICSEARCH & DOCKER mit
LOGSTASH, JDBC und Ruby
26.04.2020Autor: Dieter Schanz 32
DAS GANZES TUTORIAL FINDEST DU HIER:
WEITERE TUTORIALS FINDEST DU HIER:
UND DEN QUELLCODE HIER:
HTTPS://YOUTU.BE/6CVRM27D5DY
HTTPS://WWW.CODINGSOLO.DE/
HTTPS://GITHUB.COM/SCHADIET/ELASTICSEARCH-
DOCKER-WITH-LOGSTASH-JDBC-AND-MAGIC

Weitere ähnliche Inhalte

Ähnlich wie Elasticsearch & docker mit logstash, jdbc und ruby

Wie kommt der Client zur Datenbank?
Wie kommt der Client zur Datenbank?Wie kommt der Client zur Datenbank?
Wie kommt der Client zur Datenbank?Markus Flechtner
 
Agile Oracle database modeling and development - APEX Connect 2020
Agile Oracle database modeling and development - APEX Connect 2020Agile Oracle database modeling and development - APEX Connect 2020
Agile Oracle database modeling and development - APEX Connect 2020Torsten Kleiber
 
Schlanke Webarchitekturen nicht nur mit JSF 2 und CDI
Schlanke Webarchitekturen nicht nur mit JSF 2 und CDISchlanke Webarchitekturen nicht nur mit JSF 2 und CDI
Schlanke Webarchitekturen nicht nur mit JSF 2 und CDIadesso AG
 
20160310_ModernApplicationDevelopment_NoSQL_KPatenge
20160310_ModernApplicationDevelopment_NoSQL_KPatenge20160310_ModernApplicationDevelopment_NoSQL_KPatenge
20160310_ModernApplicationDevelopment_NoSQL_KPatengeKarin Patenge
 
MongoDB für Java Programmierer (JUGKA, 11.12.13)
MongoDB für Java Programmierer (JUGKA, 11.12.13)MongoDB für Java Programmierer (JUGKA, 11.12.13)
MongoDB für Java Programmierer (JUGKA, 11.12.13)Uwe Printz
 
20181210_ITTage2018_OracleNoSQLDB_KPatenge
20181210_ITTage2018_OracleNoSQLDB_KPatenge20181210_ITTage2018_OracleNoSQLDB_KPatenge
20181210_ITTage2018_OracleNoSQLDB_KPatengeKarin Patenge
 
Oracle Technology Monthly Oktober 2017
Oracle Technology Monthly Oktober 2017Oracle Technology Monthly Oktober 2017
Oracle Technology Monthly Oktober 2017oraclebudb
 
Heterogene Daten(-strukturen) in der Oracle Datenbank
Heterogene Daten(-strukturen) in der Oracle DatenbankHeterogene Daten(-strukturen) in der Oracle Datenbank
Heterogene Daten(-strukturen) in der Oracle DatenbankUlrike Schwinn
 
Volltextsuchen in RDBMS (2004)
Volltextsuchen in RDBMS (2004)Volltextsuchen in RDBMS (2004)
Volltextsuchen in RDBMS (2004)Gerrit Beine
 
Oracle vs. PostgreSQL - Unterschiede in 45 Minuten
Oracle vs. PostgreSQL - Unterschiede in 45 MinutenOracle vs. PostgreSQL - Unterschiede in 45 Minuten
Oracle vs. PostgreSQL - Unterschiede in 45 MinutenMarkus Flechtner
 
Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)
Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)
Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)Ulrike Schwinn
 
2008 - Basta!: DAL DIY
2008 - Basta!: DAL DIY2008 - Basta!: DAL DIY
2008 - Basta!: DAL DIYDaniel Fisher
 
FMK2012: Datenaustausch zwischen FileMaker und MySQL von Nico Busch
FMK2012: Datenaustausch zwischen FileMaker und MySQL von Nico BuschFMK2012: Datenaustausch zwischen FileMaker und MySQL von Nico Busch
FMK2012: Datenaustausch zwischen FileMaker und MySQL von Nico BuschVerein FM Konferenz
 
Einführung in NoSQL-Datenbanken
Einführung in NoSQL-DatenbankenEinführung in NoSQL-Datenbanken
Einführung in NoSQL-DatenbankenTobias Trelle
 
MongoDB Munich 2012: Spring Data MongoDB
MongoDB Munich 2012: Spring Data MongoDBMongoDB Munich 2012: Spring Data MongoDB
MongoDB Munich 2012: Spring Data MongoDBTobias Trelle
 
Big Data Konnektivität
Big Data KonnektivitätBig Data Konnektivität
Big Data KonnektivitätTrivadis
 
Cloud Native und Java EE: Freund oder Feind?
Cloud Native und Java EE: Freund oder Feind?Cloud Native und Java EE: Freund oder Feind?
Cloud Native und Java EE: Freund oder Feind?Josef Adersberger
 
Cloud Native & Java EE: Freund oder Feind?
Cloud Native & Java EE: Freund oder Feind?Cloud Native & Java EE: Freund oder Feind?
Cloud Native & Java EE: Freund oder Feind?QAware GmbH
 

Ähnlich wie Elasticsearch & docker mit logstash, jdbc und ruby (20)

Wie kommt der Client zur Datenbank?
Wie kommt der Client zur Datenbank?Wie kommt der Client zur Datenbank?
Wie kommt der Client zur Datenbank?
 
Agile Oracle database modeling and development - APEX Connect 2020
Agile Oracle database modeling and development - APEX Connect 2020Agile Oracle database modeling and development - APEX Connect 2020
Agile Oracle database modeling and development - APEX Connect 2020
 
Schlanke Webarchitekturen nicht nur mit JSF 2 und CDI
Schlanke Webarchitekturen nicht nur mit JSF 2 und CDISchlanke Webarchitekturen nicht nur mit JSF 2 und CDI
Schlanke Webarchitekturen nicht nur mit JSF 2 und CDI
 
20160310_ModernApplicationDevelopment_NoSQL_KPatenge
20160310_ModernApplicationDevelopment_NoSQL_KPatenge20160310_ModernApplicationDevelopment_NoSQL_KPatenge
20160310_ModernApplicationDevelopment_NoSQL_KPatenge
 
MongoDB für Java Programmierer (JUGKA, 11.12.13)
MongoDB für Java Programmierer (JUGKA, 11.12.13)MongoDB für Java Programmierer (JUGKA, 11.12.13)
MongoDB für Java Programmierer (JUGKA, 11.12.13)
 
20181210_ITTage2018_OracleNoSQLDB_KPatenge
20181210_ITTage2018_OracleNoSQLDB_KPatenge20181210_ITTage2018_OracleNoSQLDB_KPatenge
20181210_ITTage2018_OracleNoSQLDB_KPatenge
 
Oracle Technology Monthly Oktober 2017
Oracle Technology Monthly Oktober 2017Oracle Technology Monthly Oktober 2017
Oracle Technology Monthly Oktober 2017
 
Heterogene Daten(-strukturen) in der Oracle Datenbank
Heterogene Daten(-strukturen) in der Oracle DatenbankHeterogene Daten(-strukturen) in der Oracle Datenbank
Heterogene Daten(-strukturen) in der Oracle Datenbank
 
Amazon Redshift
Amazon RedshiftAmazon Redshift
Amazon Redshift
 
Volltextsuchen in RDBMS (2004)
Volltextsuchen in RDBMS (2004)Volltextsuchen in RDBMS (2004)
Volltextsuchen in RDBMS (2004)
 
Oracle und Docker
Oracle und DockerOracle und Docker
Oracle und Docker
 
Oracle vs. PostgreSQL - Unterschiede in 45 Minuten
Oracle vs. PostgreSQL - Unterschiede in 45 MinutenOracle vs. PostgreSQL - Unterschiede in 45 Minuten
Oracle vs. PostgreSQL - Unterschiede in 45 Minuten
 
Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)
Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)
Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)
 
2008 - Basta!: DAL DIY
2008 - Basta!: DAL DIY2008 - Basta!: DAL DIY
2008 - Basta!: DAL DIY
 
FMK2012: Datenaustausch zwischen FileMaker und MySQL von Nico Busch
FMK2012: Datenaustausch zwischen FileMaker und MySQL von Nico BuschFMK2012: Datenaustausch zwischen FileMaker und MySQL von Nico Busch
FMK2012: Datenaustausch zwischen FileMaker und MySQL von Nico Busch
 
Einführung in NoSQL-Datenbanken
Einführung in NoSQL-DatenbankenEinführung in NoSQL-Datenbanken
Einführung in NoSQL-Datenbanken
 
MongoDB Munich 2012: Spring Data MongoDB
MongoDB Munich 2012: Spring Data MongoDBMongoDB Munich 2012: Spring Data MongoDB
MongoDB Munich 2012: Spring Data MongoDB
 
Big Data Konnektivität
Big Data KonnektivitätBig Data Konnektivität
Big Data Konnektivität
 
Cloud Native und Java EE: Freund oder Feind?
Cloud Native und Java EE: Freund oder Feind?Cloud Native und Java EE: Freund oder Feind?
Cloud Native und Java EE: Freund oder Feind?
 
Cloud Native & Java EE: Freund oder Feind?
Cloud Native & Java EE: Freund oder Feind?Cloud Native & Java EE: Freund oder Feind?
Cloud Native & Java EE: Freund oder Feind?
 

Elasticsearch & docker mit logstash, jdbc und ruby

  • 1. ELASTICSEARCH & DOCKER MIT LOGSTASH JDBC UND RUBY
  • 2. AGENDA • ÜBERBLICK • VORBEREITUNG DER CONTAINER • A. START VON MYSQL & PHPMYADMIN • B. VORBEREITUNG DER MYSQL DATENBANK • C. START VON ELASTICSEARCH & KIBANA • IMPLEMENTIERUNG DER KONFIGURATIONSDATEI • A. INPUT (JDBC) • C. FILTER (JDBC_STREAMING, RUBY) • B. OUTPUT (ELASTICSEARCH) • DURCHFÜHRUNG DES IMPORT • START LOGSTASH ELASTICSEARCH & DOCKER mit LOGSTASH, JDBC und Ruby 26.04.2020Autor: Dieter Schanz 2
  • 3. ÜBERBLICK • WER BIST DU? • WAS IST DAS ZIEL? • WAS BENÖTIGE ICH? • WIE MACHE ICH DAS? ICH BIN DIETER, EIN ANWENDUNGSENTWICKLER DATEN AUS MYSQL MIT LOGSTASH IN ELASTICSEARCH IMPORTIEREN WIR BRAUCHEN DAFÜR NUR DOCKER + MYSQL-TREIBER WIR STARTEN DOCKER CONTAINER UND ERSTELLEN EIN KONFIGURATIONSDATEI ELASTICSEARCH & DOCKER mit LOGSTASH, JDBC und Ruby 26.04.2020Autor: Dieter Schanz 3
  • 4. ÜBERBLICK WAS IST DER PLAN? • WIR LESEN DATEN AUS EINER MYSQL DATENBANK AUS • MANIPULIEREN DIE DATEN • INFORMATION AUS UNTERSCHIEDLICHEN TABELLEN ZU EINEM OBJEKT • IMPORT DER DATEN NACH ELASTICSEARCH ELASTICSEARCH & DOCKER mit LOGSTASH, JDBC und Ruby 26.04.2020Autor: Dieter Schanz 4
  • 5. ÜBERBLICK WOZU LOGSTASH? • LOGSTASH IST EINE SERVERSEITIGE OPEN- SOURCE-SOFTWARE • SIMULTANE VERARBEITUNG • DATEN AUS UNTERSCHIEDLICHEN QUELLEN • MANIPULIERUNG UND WEITERLEITUNG DER DATEN ELASTICSEARCH & DOCKER mit LOGSTASH, JDBC und Ruby 26.04.2020Autor: Dieter Schanz 5 Quelle: https://www.elastic.co/
  • 6. VORBEREITUNG WIR BENÖTIGEN FÜR DIESEN TASK NUR DOCKER CONTAINER • MYSQL & PHPMYADMIN • ELASTICSEARCH • KIBANA • LOGSTASH ELASTICSEARCH & DOCKER mit LOGSTASH, JDBC und Ruby 26.04.2020Autor: Dieter Schanz 6
  • 7. VORBEREITUNG STARTE DIE MOTOREN! • STARTE DIE CONTAINER FÜR MYSQL • & PHPMYADMIN ELASTICSEARCH & DOCKER mit LOGSTASH, JDBC und Ruby 26.04.2020Autor: Dieter Schanz 7 DOCKER RUN --NAME MYSQL-SERVER -P 3306:3306 -E MYSQL_ROOT_PASSWORD=CODINGSOLO -D MYSQL:LATEST DOCKER RUN –NAME MYADMIN -D --LINK MYSQL-SERVER:DB -P 8080:80 PHPMYADMIN/PHPMYADMIN
  • 8. VORBEREITUNG JETZT SUCHEN WIR UNSEREN MYSQL-TREIBER AUF MAVEN • GEH AUF FOLGENDE URL HTTPS://MVNREPOSITORY.COM/ 26.04.2020Autor: Dieter Schanz 8 ELASTICSEARCH & DOCKER mit LOGSTASH, JDBC und Ruby
  • 9. VORBEREITUNG ELASTICSEARCH & DOCKER mit LOGSTASH, JDBC und Ruby 26.04.2020Autor: Dieter Schanz 9 • SUCHE NACH MYSQL-CONNECTOR • WÄHLE DIE DIE PASSENDE VERSION AUS, DIE ZU DEINEM MYSQL CONTAINER PASST • DANN LÄDST DU DIR DIE JAR HERUNTER
  • 10. VORBEREITUNG ELASTICSEARCH & DOCKER mit LOGSTASH, JDBC und Ruby 26.04.2020Autor: Dieter Schanz 10 LETZTER SCHRITT • LADE DIR MEINE BEISPIEL DATEN FÜR DIE MYSQL DATENBANK HERUNTER • DAMIT WIRD EINE NEUE DATENBANK ANGELEGT, DIE DATENBANK-STRUKTUR UND TESTDATEN • AUßERDEM WIRD EIN NEUER BENUTZER FÜR LOGSTASH ERSTELLT HTTPS://GITHUB.COM/SCHADIET/ELASTICSEARCH-DOCKER- WITH-LOGSTASH-JDBC-AND- MAGIC/BLOB/MASTER/TUTORIAL%20CODINGSOLO.SQL
  • 11. VORBEREITUNG LASS UNS DIE DATENBANK VORBEREITEN! • GEH AUF HTTP://LOCALHOST:8080/ • LOG IN ALS ROOT • PASSWORT WURDE BEIM START DES MYSQL-CONTAINERS GESETZT • IMPORT VON TUTORIAL CODINGSOLO.SQL 26.04.2020Autor: Dieter Schanz 11 ELASTICSEARCH & DOCKER mit LOGSTASH, JDBC und Ruby
  • 12. VORBEREITUNG WIR ERSTELLEN JETZT EINE ORDNERSTRUKTUR • HAUPTORDNER ELASTICSEARCH_IMPORT • UNTERORDNER • DRIVER • PIPELINE • IN DRIVER KOMMT DER MYSQL-CONNECTOR • IN PIPELINE ERSTELLEN WIR DIE KONFIGURATIONSDATEI ELASTICSEARCH & DOCKER mit LOGSTASH, JDBC und Ruby 26.04.2020Autor: Dieter Schanz 12
  • 13. VORBEREITUNG WIR ERSTELLEN JETZT EIN DOCKER NETZWERK • FÜR ELASTICSEARCH & KIBANA • NAME IST FREI WÄHLBAR -> SKYNET ELASTICSEARCH & DOCKER mit LOGSTASH, JDBC und Ruby 26.04.2020Autor: Dieter Schanz 13 DOCKER NETWORK CREATE SKYNET
  • 14. VORBEREITUNG STARTEN WIR NUN AUCH ELASTICSEARCH & KIBANA DOCKER RUN -D --NAME ELASTICSEARCH --NET SKYNET -P 9200:9200 -P 9300:9300 -E "DISCOVERY.TYPE=SINGLE-NODE" ELASTICSEARCH:7.6.2 ELASTICSEARCH & DOCKER mit LOGSTASH, JDBC und Ruby 26.04.2020Autor: Dieter Schanz 14 DOCKER RUN -D --NAME KIBANA --NET SKYNET -P 5601:5601 KIBANA:7.6.2
  • 15. VORBEREITUNG WIR PRÜFEN NUN BEIDE SYSTEME: • ELASTICSEARCH ERREICHST DU UNTER HTTP://LOCALHOST:9200/ 26.04.2020Autor: Dieter Schanz 15 ELASTICSEARCH & DOCKER mit LOGSTASH, JDBC und Ruby
  • 16. VORBEREITUNG • KIBANA ERREICHST DU UNTER HTTP://LOCALHOST:5601/ ELASTICSEARCH & DOCKER mit LOGSTASH, JDBC und Ruby 26.04.2020Autor: Dieter Schanz 16
  • 17. IMPLEMENTIERUNG JETZT LEGEN WIR LOS! LASS UNS NUN DIE KONFIGURATIONSDATEI BEARBEITEN: • EINE TYPISCHE KONFIGURATION HAT DREI BEREICHE • INPUT • FILTER • OUTPUT • BEI MULTIPLEN DATENOBJEKTEN SOLLTEST DU DEN OBJECT-TYPE ABFRAGEN ELASTICSEARCH & DOCKER mit LOGSTASH, JDBC und Ruby 26.04.2020Autor: Dieter Schanz 17 input { } filter { ##Check you are working with the correct type if[type] == "XY" { } } output { if[type] == "XY" { } stdout { codec => rubydebug } }
  • 18. IMPLEMENTIERUNG INPUT • JDBC • WIR VERGEBEN EINEN OBJECT-TYPE • BEI MULTIPLEN INPUT-OBJEKTEN NOTWENDIG • SCHEDULE • CRON SYNTAX 26.04.2020Autor: Dieter Schanz 18 ELASTICSEARCH & DOCKER mit LOGSTASH, JDBC und Ruby input { ##JDBC Plugin to Query Data from MySQL jdbc { type => "kundendaten" schedule => "* * * * *" jdbc_driver_library => "/driver/mysql-connector-java-8.0.19.jar" jdbc_driver_class => "com.mysql.jdbc.Driver" jdbc_connection_string => "jdbc:mysql://localhost:3306/codingsolo" jdbc_user => "elastic" jdbc_password => "elastic" statement => "SELECT * FROM codingsolo.kunde;" } }
  • 19. IMPLEMENTIERUNG INPUT • JDBC • DRIVER • PFAD ZUM TREIBER (AUF SEITE DES CONTAINERS) • DRIVER CLASS • CONNECTION STRING • ADRESSE DER MYSQL DB & DATENBANKNAME • USER & PASSWORD KAM MIT DEN TESTDATEN • STATEMENT DEIN DATENBANK QUERY 26.04.2020Autor: Dieter Schanz 19 ELASTICSEARCH & DOCKER mit LOGSTASH, JDBC und Ruby input { ##JDBC Plugin to Query Data from MySQL jdbc { type => "kundendaten" schedule => "* * * * *" jdbc_driver_library => "/driver/mysql-connector-java-8.0.19.jar" jdbc_driver_class => "com.mysql.jdbc.Driver" jdbc_connection_string => "jdbc:mysql://localhost:3306/codingsolo" jdbc_user => "elastic" jdbc_password => "elastic" statement => "SELECT * FROM codingsolo.kunde;" } }
  • 20. IMPLEMENTIERUNG FILTER • JDBC_STREAMING FÜR BESTELLUNGEN • DIE JDBC KONFIGURATIONEN AUS DEM JDBC INPUT • STATEMENT • QUERY FÜR WEITERE DATEN ELASTICSEARCH & DOCKER mit LOGSTASH, JDBC und Ruby 26.04.2020Autor: Dieter Schanz 20 ## jdbc_streaming Plugin add MORE Data ## from different Tables / Databases jdbc_streaming { jdbc_driver_library => "/driver/mysql-connector-java-8.0.19.jar" jdbc_driver_class => "com.mysql.jdbc.Driver" jdbc_connection_string => "jdbc:mysql://localhost:3306/codingsolo" jdbc_user => "elastic" jdbc_password => "elastic" statement => "SELECT id as bestellung_id, bestellung_datum, bestellung_status from codingsolo.bestellung WHERE codingsolo.bestellung.kunde_id = :idparam;" parameters => { "idparam" => "id" } target => "kunde_bestellung" }
  • 21. IMPLEMENTIERUNG FILTER • JDBC_STREAMING FÜR BESTELLUNGEN • PARAMETERS • WIR VERKNÜPFEN IDPARAM AUF DIE ID DER DATEN AUS DEM OBJECT-TYPE KUNDENDATEN • TARGET • WIR SPEICHERN DIE DATEN IN DAS NEUE FELD KUNDE_BESTELLUNG ELASTICSEARCH & DOCKER mit LOGSTASH, JDBC und Ruby 26.04.2020Autor: Dieter Schanz 21 ## jdbc_streaming Plugin add MORE Data ## from different Tables / Databases jdbc_streaming { jdbc_driver_library => "/driver/mysql-connector-java-8.0.19.jar" jdbc_driver_class => "com.mysql.jdbc.Driver" jdbc_connection_string => "jdbc:mysql://localhost:3306/codingsolo" jdbc_user => "elastic" jdbc_password => "elastic" statement => "SELECT id as bestellung_id, bestellung_datum, bestellung_status from codingsolo.bestellung WHERE codingsolo.bestellung.kunde_id = :idparam;" parameters => { "idparam" => "id" } target => "kunde_bestellung" }
  • 22. IMPLEMENTIERUNG FILTER • JDBC_STREAMING FÜR ANSCHRIFT • PARAMETERS • WIR VERKNÜPFEN IDPARAM AUF DIE ID DER DATEN AUS DEM OBJECT-TYPE KUNDENDATEN • TARGET • WIR SPEICHERN DIE DATEN IN DAS NEUE FELD KUNDE_ANSCHRIFT ELASTICSEARCH & DOCKER mit LOGSTASH, JDBC und Ruby 26.04.2020Autor: Dieter Schanz 22 ##jdbc_streaming Plugin to add Data from different Tables / Databases jdbc_streaming { jdbc_driver_library => "/driver/mysql-connector-java-8.0.19.jar" jdbc_driver_class => "com.mysql.jdbc.Driver" jdbc_connection_string => "jdbc:mysql://localhost:3306/codingsolo" jdbc_user => "elastic" jdbc_password => "elastic" statement => "SELECT codingsolo.kunde_anschrift.kunde_id, anschrift.id, anschrift.anschrift_Strasse, anschrift.anschrift_hausnummer, anschrift.anschrift_postleitzahl, anschrift.anschrift_ort, anschrift.anschrift_erstellung, land_name as Anschrift_land, land_kuerzel FROM codingsolo.kunde_anschrift LEFT JOIN codingsolo.anschrift as anschrift ON codingsolo.kunde_anschrift.anschrift_id = anschrift.id LEFT JOIN codingsolo.land as land ON anschrift.anschrift_land = land.id WHERE codingsolo.kunde_anschrift.kunde_id = :idparam;" parameters => {"idparam" => "id" } target => "kunde_anschrift" }
  • 23. IMPLEMENTIERUNG FILTER • JDBC_STREAMING FÜR BESTELLPOSTEN • PARAMETERS • WIR VERKNÜPFEN IDPARAM AUF DIE ID DER DATEN AUS DEM OBJECT-TYPE KUNDENDATEN • TARGET • WIR SPEICHERN DIE DATEN IN DAS NEUE FELD BESTELLUNG_POSTEN ELASTICSEARCH & DOCKER mit LOGSTASH, JDBC und Ruby 26.04.2020Autor: Dieter Schanz 23 ##jdbc_streaming Plugin add MORE Data from different Tables / Databases jdbc_streaming { jdbc_driver_library => "/driver/mysql-connector-java-8.0.19.jar" jdbc_driver_class => "com.mysql.jdbc.Driver" jdbc_connection_string => "jdbc:mysql://localhost:3306/codingsolo" jdbc_user => "elastic" jdbc_password => "elastic" statement => "SELECT codingsolo.bestellung_artikel.id as bestellung_id, codingsolo.bestellung_artikel.anzahl, artikel.id, artikel.artikel_name, artikel.artikel_preis, artikel.artikel_status FROM codingsolo.bestellung_artikel LEFT JOIN codingsolo.artikel as artikel ON codingsolo.bestellung_artikel.artikel_id = artikel.id WHERE codingsolo.bestellung_artikel.id in :idparam;" parameters => { "idparam" => "bestellung_temp"} target => "bestellung_posten" }
  • 24. IMPLEMENTIERUNG FILTER RUBY CODE • WIR KÖNNEN EIGENE LOGIK IMPLEMENTIEREN • BEISPIEL: ITERATION ÜBER DIE BESTELLUNGEN • AUSLESEN DER BESTELL-ID • SPEICHERN DER BESTELL-ID IN EINER LISTE ELASTICSEARCH & DOCKER mit LOGSTASH, JDBC und Ruby 26.04.2020Autor: Dieter Schanz 24 ## Extracting all bestellung_id from Field:kunde_bestellung ## into a List of Strings ruby { code => ' event.get("kunde_bestellung").each do |item| if not event.get("bestellung_temp") event.set("bestellung_temp", [item["bestellung_id"]]) else event.set("bestellung_temp", event.get("bestellung_temp") + [item["bestellung_id"]]) end end ' }
  • 25. IMPLEMENTIERUNG FILTER RUBY CODE • WIR KÖNNEN EIGENE LOGIK IMPLEMENTIEREN • BEISPIEL: ITERATION ÜBER DIE BESTELLPOSTEN UND ÜBER DIE BESTELLUNGEN • ABGLEICH BESTELLUNGEN UND BESTELLPOSTEN • ZUWEISUNG BESTELLPOSTEN ZUR BESTELLUNG ELASTICSEARCH & DOCKER mit LOGSTASH, JDBC und Ruby 26.04.2020Autor: Dieter Schanz 25 ## Adding order-line to orders MY GOAL is to include all entries ## from one bestellung_posten into the single kunde_bestellung ruby { code => ' event.get("bestellung_posten").each_with_index do |item, index_item| event.get("kunde_bestellung").each_with_index do |order, index| if order["bestellung_id"] == item["bestellung_id"] if not event.get("[kunde_bestellung][#{index}][bestellung_posten]") event.set("[kunde_bestellung][#{index}][bestellung_posten]", [item]) else event.set("[kunde_bestellung][#{index}][bestellung_posten]", order["bestellung_posten"] + [item]) end end end end ' }
  • 26. IMPLEMENTIERUNG FILTER MUTATE • WIR RÄUMEN DIE DATEN AUF • REMOVE_FIELD ENTFERNT EINE FELD IM DOKUMENT ELASTICSEARCH & DOCKER mit LOGSTASH, JDBC und Ruby 26.04.2020Autor: Dieter Schanz 26 ##clean up mutate { remove_field => [ "bestellung_posten"] remove_field => [ "bestellung_temp"] }
  • 27. IMPLEMENTIERUNG OUTPUT • ELASTICSEARCH • ABFRAGE DES TYPES • (UNTERSCHIEDLICHE IPUTS -> UNTERSCHIEDLICHE TYPEN) • HOST AUF DEM ELASTICSEARCH LÄUFT • INDEX • AUF WELCHEM INDEX WERDEN DIE DATEN GESPEICHERT ELASTICSEARCH & DOCKER mit LOGSTASH, JDBC und Ruby 26.04.2020Autor: Dieter Schanz 27 output { if[type] == "kundendaten" { elasticsearch { hosts => "localhost:9200" index => "kundendaten" document_type => "_doc" document_id => "%{id}" doc_as_upsert => true action => "update" } } stdout { codec => rubydebug } }
  • 28. IMPLEMENTIERUNG OUTPUT • ELASTICSEARCH • DOCUMENT_ID • DU KANNST EINE ID VERGEBEN • DOC_AS_UPSERT • DAMIT DATEN BEI AKTUALISIERUNG ÜBERSCHRIEBEN WERDEN • WICHTIG! IMMER EIN STANDARD OUTPUT EINBAUEN • DEBUG REASON ELASTICSEARCH & DOCKER mit LOGSTASH, JDBC und Ruby 26.04.2020Autor: Dieter Schanz 28 output { if[type] == "kundendaten" { elasticsearch { hosts => "localhost:9200" index => "kundendaten" document_type => "_doc" document_id => "%{id}" doc_as_upsert => true action => "update" } } stdout { codec => rubydebug } }
  • 29. DURCHFÜHRUNG BEVOR WIR LOGSTASH STARTEN: • FÜR DIESES BEISPIEL GEBEN WIR DEN HOST ALS NETWORK AN: • --NET="HOST" • -V = ORDNER FREIGABE HOST:CONTRAINER -V D:ELASTICSEARCH_IMPORTPIPELINE:/USR/SHARE/LOGSTASH/PIPELINE/ • WIR VERKNÜPFEN UNSEREN ORDNER PIPELINE MIT DEM AUS DEM CONTAINER • CONTAINER-SEITIG ÜBERPRÜFT LOGSTASH OB IN PIPELINE KONFIGURATIONSDATEIEN BEREITLIEGEN • ACHTE DABEI AUF DEN PFAD ZUM ORDNER. DEIN PFAD KANN ABWEICHEN ELASTICSEARCH & DOCKER mit LOGSTASH, JDBC und Ruby 26.04.2020Autor: Dieter Schanz 29
  • 30. DURCHFÜHRUNG STARTE WIR ENDLICH LOGSTASH! • FREIGABE UNSERES ORDNER DRIVER • LOGSTASH BENÖTIGT NOCH UNSEREN MYSQL-TREIBER ELASTICSEARCH & DOCKER mit LOGSTASH, JDBC und Ruby 26.04.2020Autor: Dieter Schanz 30 DOCKER RUN -IT --RM --NAME LOGSTASH --NET="HOST" -V D:ELASTICSEARCH_IMPORTPIPELINE: /USR/SHARE/LOGSTASH/PIPELINE/ -V D:ELASTICSEARCH_IMPORTDRIVER :/DRIVER/ DOCKER.ELASTIC.CO/LOGSTASH/LOGSTASH:7.6.2
  • 31. DURCHFÜHRUNG ÜBERPRÜFE DEIN ERGEBNIS: • GEH AUF FOLGENDE ADRESSE: HTTP://LOCALHOST:9200/KUNDENDATEN/_DOC/2 • ES SOLLTEN NUN DATEN DES KUNDEN MIT ANSCHRIFT UND BESTELLUNGEN ANGEZEIGT WERDEN • ALTERNATIV KÖNNEN WIR AUCH KIBANA NUTZEN FIREFOX HAT EINE JSON-VIEWER ELASTICSEARCH & DOCKER mit LOGSTASH, JDBC und Ruby 26.04.2020Autor: Dieter Schanz 31 { "_index": "kundendaten", "_type": "_doc", "_id": "2", "_source": { "kunde_name": "Willson", "kunde_sperrung": false, "@version": "1", "kunde_vorname": "Sam", "type": "kundendaten", "kunde_bestellung": [ { "bestellung_datum": "2020-04-13T17:34:21.000Z", "bestellung_status": "In Bearbeitung", "bestellung_posten": [ { "anzahl": 5, "artikel_preis": 80.99, "bestellung_id": 8003, "artikel_name": "Gaming Maus (Pro Gramer)", "id": 7, "artikel_status": "gering" } ], "bestellung_id": 8003 } ], "kunde_erstellung": "2020-04-18T15:02:25.000Z", "id": 2, "kunde_geburtsdatum": "1992-11-01T00:00:00.000Z", "@timestamp": "2020-04-25T17:58:00.547Z", "kunde_kundennummer": "K1021212", "kunde_anschrift": [ { "anschrift_erstellung": "2020-04-18T15:15:05.000Z", "Anschrift_land": "England", "anschrift_Strasse": "River Street", "land_kuerzel": "en", "anschrift_postleitzahl": "SW1E 6LB", "anschrift_ort": "London", "kunde_id": 2, "id": 5, "anschrift_hausnummer": "13" } ] } }
  • 32. ELASTICSEARCH & DOCKER mit LOGSTASH, JDBC und Ruby 26.04.2020Autor: Dieter Schanz 32 DAS GANZES TUTORIAL FINDEST DU HIER: WEITERE TUTORIALS FINDEST DU HIER: UND DEN QUELLCODE HIER: HTTPS://YOUTU.BE/6CVRM27D5DY HTTPS://WWW.CODINGSOLO.DE/ HTTPS://GITHUB.COM/SCHADIET/ELASTICSEARCH- DOCKER-WITH-LOGSTASH-JDBC-AND-MAGIC