2016-06-23 6 views
1

Ich versuche, eine MySQL-Tabelle in Elasticsearch zu importieren. Es ist eine Tabelle, die 10 verschiedene Spalten mit einem 8-stelligen VARCHAR-Satz als Primärschlüssel enthält. Die MySQL-Datenbank befindet sich auf einem Remote-Host.Mysql zu Elasticsearch - Index nicht erstellen und Daten exportieren

Um Daten von MySQL in Elasticsearch zu übertragen, habe ich mich entschieden, Logstash und jdbc MySQL Treiber zu verwenden.

Ich gehe davon aus, dass Logstash den Index für mich erstellen wird, wenn es nicht da ist.

Hier ist mein logstash.conf Skript:

input{ 

jdbc {  
jdbc_driver_library => "/home/user/logstash/mysql-connector-java-5.1.17-bin.jar" 

jdbc_driver_class => "com.mysql.jdbc.Driver" 

jdbc_connection_string => "jdbc:mysql://[remotehostipnumber]/databasename" 

jdbc_validate_connection => true 

jdbc_user => "username" 

jdbc_password => "password" 

schedule => "* * * * *" 

statement => "select * from table" 

} 

} 

output 

{ 
    elasticsearch 
{ 

index => "tables" 
document_type => "table" 
document_id => "%{table_id}" 
hosts => "localhost:9200" 
}stdout { codec => json_lines } 
} 

Wenn logstash Config-Test läuft es gibt 'Configration OK' Nachricht:

sudo /opt/logstash/bin/logstash --configtest -f /home/user/logstash/logstash.conf 

Auch wenn die Ausführung des logstash.conf Skript, Elasticsearch Ausgänge:

Settings: Default filter workers: 1 
Logstash startup completed 

Aber wenn ich gehe, um zu überprüfen, ob der Index erstellt wurde und dat a wurde auch hinzugefügt:

curl -XGET 'localhost:9200/tables/table/_search?pretty=true' 

ich:

{ 
"error" : { 
"root_cause" : [ { 
    "type" : "index_not_found_exception", 
    "reason" : "no such index", 
    "resource.type" : "index_or_alias", 
    "resource.id" : "tables", 
    "index" : "table" 
} ], 
"type" : "index_not_found_exception", 
"reason" : "no such index", 
"resource.type" : "index_or_alias", 
"resource.id" : "tables", 
"index" : "tables" 
}, 
"status" : 404 
} 

Was hinter den Daten die möglichen Gründe nicht indiziert werden könnte?

PS. Ich lasse den Elasticsearch-Server im separaten Terminal-Fenster laufen, um sicherzustellen, dass Logstash sich damit verbinden und interagieren kann.

+0

Können Sie logstash mit '--debug' ausführen, damit Sie mehr Ausgabe sehen können? Können Sie Ihren Datenbank-Host 'remotehostipnumber' anpingen? – Val

+0

Da Sie die Ausgabe von stdout verwenden, sollten Sie prüfen können, ob Logstash die Daten empfängt und ob logstash die Logs abruft oder an Elasticsearch – baudsp

+0

sendet und dabei die --debug-Ausgabe betrachtet, die aussieht, als wäre sie verbunden Ich kann auch den Datenbank-Host anpingen. Wirklich hier feststecken –

Antwort

1

Für diejenigen, die hier auf der Suche nach der Antwort auf das ähnliche Problem enden.

Meine Datenbank hatte 4m Zeilen und es muss zu viel für den logstash/elasticsearch/jdbc Treiber in einem Befehl gewesen sein.

Nachdem ich die anfängliche Übertragung in 4 separate Teile der Arbeit aufgeteilt hatte, lief das Skript und fügte die gewünschte Tabelle in die Elasticsearch NoSQL db hinzu.

Verwandte Themen