plugin mysql elasticsearch logstash elasticsearch-plugin elasticsearch-5

logstash mysql output plugin



ElasticSearch cómo integrarse con Mysql (5)

En uno de mis proyectos, estoy planeando usar ElasticSearch con mysql. He instalado con éxito ElasticSearch. Puedo administrar el índice en ES por separado. pero no sé cómo implementar lo mismo con mysql.

He leído un par de documentos, pero estoy un poco confundido y no tengo una idea clara. ¿Alguien puede ayudarme por favor?

Gracias por adelantado.


A partir de ES 5.x, han dado esta característica de logstash con el complemento logstash .

Esto importará periódicamente datos de la base de datos y los enviará al servidor ES.

Uno tiene que crear un archivo de importación simple a continuación (que también se describe here ) y usar logstash para ejecutar el script. Logstash admite la ejecución de este script en un horario.

# file: contacts-index-logstash.conf input { jdbc { jdbc_connection_string => "jdbc:mysql://localhost:3306/mydb" jdbc_user => "user" jdbc_password => "pswd" schedule => "* * * * *" jdbc_validate_connection => true jdbc_driver_library => "/path/to/latest/mysql-connector-java-jar" jdbc_driver_class => "com.mysql.cj.jdbc.Driver" statement => "SELECT * from contacts where updatedAt > :sql_last_value" } } output { elasticsearch { protocol => http index => "contacts" document_type => "contact" document_id => "%{id}" host => "ES_NODE_HOST" } } # "* * * * *" -> run every minute # sql_last_value is a built in parameter whose value is set to Thursday, 1 January 1970, # or 0 if use_column_value is true and tracking_column is set

Puede descargar el jar mysql de maven here .

En caso de que no existan índices en ES cuando se ejecuta este script, se crearán automáticamente. Al igual que una llamada normal a Elasticsearch



El complemento logstash JDBC hará el trabajo:

input { jdbc { jdbc_connection_string => "jdbc:mysql://localhost:3306/testdb" jdbc_user => "root" jdbc_password => "factweavers" # The path to our downloaded jdbc driver jdbc_driver_library => "/home/comp/Downloads/mysql-connector-java-5.1.38.jar" jdbc_driver_class => "com.mysql.jdbc.Driver" # our query schedule => "* * * *" statement => "SELECT" * FROM testtable where Date > :sql_last_value order by Date" use_column_value => true tracking_column => Date } output { stdout { codec => json_lines } elasticsearch { "hosts" => "localhost:9200" "index" => "test-migrate" "document_type" => "data" "document_id" => "%{personid}" } }


Finalmente pude encontrar la respuesta. compartiendo mis hallazgos

Para usar ElasticSearch con Mysql, necesitará el importador de Java Database Connection ( JDBC ). Con los controladores JDBC puede sincronizar sus datos de MySQL en Elasticsearch.

Estoy usando ubuntu 14.04 LTS y necesitará instalar Java8 para ejecutar elasticsearch como está escrito en Java

Los siguientes son los pasos para instalar ElasticSearch 2.2.0 y ElasticSearch-jdbc 2.2.0 y tenga en cuenta que ambas versiones deben ser las mismas

después de instalar Java8 ..... instale elasticsearch 2.2.0 de la siguiente manera

# cd /opt # wget https://download.elasticsearch.org/elasticsearch/release/org/elasticsearch/distribution/deb/elasticsearch/2.2.0/elasticsearch-2.2.0.deb # sudo dpkg -i elasticsearch-2.2.0.deb

Este procedimiento de instalación instalará Elasticsearch en / usr / share / elasticsearch / cuyos archivos de configuración se colocarán en / etc / elasticsearch.

Ahora hagamos una configuración básica en el archivo de configuración. aquí /etc/elasticsearch/elasticsearch.yml es nuestro archivo de configuración, puede abrir el archivo para cambiarlo

nano /etc/elasticsearch/elasticsearch.yml

y cambiar el nombre del clúster y el nombre del nodo

Por ejemplo :

# ---------------------------------- Cluster ----------------------------------- # # Use a descriptive name for your cluster: # cluster.name: servercluster # # ------------------------------------ Node ------------------------------------ # # Use a descriptive name for the node: # node.name: vps.server.com # # Add custom attributes to the node: # # node.rack: r1

Ahora guarde el archivo e inicie Elasticsearch

/etc/init.d/elasticsearch start

para probar ES instalado o no ejecutar siguiendo

curl -XGET ''http://localhost:9200/?pretty''

Si sigue, entonces su elasticsearch está instalado ahora :)

{ "name" : "vps.server.com", "cluster_name" : "servercluster", "version" : { "number" : "2.2.0", "build_hash" : "8ff36d139e16f8720f2947ef62c8167a888992fe", "build_timestamp" : "2016-01-27T13:32:39Z", "build_snapshot" : false, "lucene_version" : "5.4.1" }, "tagline" : "You Know, for Search" }

Ahora instalemos elasticsearch-JDBC

descárguelo de http://xbib.org/repository/org/xbib/elasticsearch/importer/elasticsearch-jdbc/2.3.3.1/elasticsearch-jdbc-2.3.3.1-dist.zip y extraiga el mismo en / etc / elasticsearch / y cree la carpeta "logs" también allí (la ruta de los logs debe ser / etc / elasticsearch / logs)

Tengo una base de datos creada en mysql con el nombre " ElasticSearchDatabase " y dentro de esa tabla llamada "prueba" con los campos id, nombre y correo electrónico

cd /etc/elasticsearch

y correr siguiendo

echo ''{ "type":"jdbc", "jdbc":{ "url":"jdbc:mysql://localhost:3306/ElasticSearchDatabase", "user":"root", "password":"", "sql":"SELECT id as _id, id, name,email FROM test", "index":"users", "type":"users", "autocommit":"true", "metrics": { "enabled" : true }, "elasticsearch" : { "cluster" : "servercluster", "host" : "localhost", "port" : 9300 } } }'' | java -cp "/etc/elasticsearch/elasticsearch-jdbc-2.2.0.0/lib/*" -"Dlog4j.configurationFile=file:////etc/elasticsearch/elasticsearch-jdbc-2.2.0.0/bin/log4j2.xml" "org.xbib.tools.Runner" "org.xbib.tools.JDBCImporter"

ahora verifique si los datos mysql importados en ES o no

curl -XGET http://localhost:9200/users/_search/?pretty

Si todo va bien, podrá ver todos sus datos mysql en formato json y si hay algún error, podrá verlos en el archivo /etc/elasticsearch/logs/jdbc.log

Precaución :

En versiones anteriores de ES ... se utilizó el complemento Elasticsearch-river-jdbc, que está completamente en desuso en la última versión, así que no lo use.

Espero poder ahorrar tu tiempo :)

Cualquier otro pensamiento es apreciado

URL de referencia: https://github.com/jprante/elasticsearch-jdbc


Para hacerlo más simple, he creado una clase PHP para configurar MySQL con Elasticsearch . Usando my Class puede sincronizar sus datos MySQL en Elasticsearch y también realizar búsquedas de texto completo. Solo necesita configurar su consulta SQL y la clase hará el resto por usted.