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 cliente oficial Elasticsearch php se puede encontrar en:
https://github.com/elastic/elasticsearch-php
Si desea más información sobre Elasticsearch en PHP, esta es una buena lectura:
https://www.elastic.co/guide/en/elasticsearch/client/php-api/2.0/index.html
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.