Database en elasticsearch

Buenos Tardes, queria consultarles necesito desde un gateway que recibe informacion y este crea una base de datos la quiero ingresar a elastisearch. Desde el Gateway puedo configurar que grabe en una base de datos externa, por eso quisiera grabar los datos en elasticsearch. ¿Que psobilidades hay para que pueda hacer esto? ¿Como seria? Gracias

Hola @Diego_Gomez!

Que tal? Me puedes comentar un poco mas sobre este Gateway? Que producto es? A que le llamas Gateway?

Tal vez uno de los inputs the Logstash the ayuden a enviar la info a Logstash, y luego desde Logstash enviarla a Elasticsearch? Source: https://www.elastic.co/guide/en/logstash/current/input-plugins.html

Saludos!

--Gabriel

hola Gabriel, el producto se llama Meshlium es de la empresa libelium este dispositivo lo usamos para conectar equipos con sensores, el meshlium hace que estos se puedan conectar a diferentes opciones, la que yo necesito es por medio de una base de datos que el crea, tiene una opción donde te permite que le digas en que base de datos externa grabe los datos, me pide IP, PORT, USER Y PASS, quisiera saber si puedo meterlo directamente al elasticsearch o debería crear una base de datos sql y después ingresarla a logstash o elasticsearch? la idea es una ves que los indexe poder verlos en el kibana. Gracias por tu respuesta

Provee de esta manera y me tira esto

input {
  tcp {
   host => "190.104.xxx.xxx"
   port => 80
   mode => "client"
}
}
 output{
     elasticsearch {
            index => ["log-sensores-%{+yyyy}"]
            hosts => ["10.10.0.132:9200"]
            }
     stdout { codec => rubydebug }
}
 rack@rack-Not-Specified:~/logstash-5.0.0$ sudo bin/logstash -f      /home/rack/tcp.conf
  [sudo] password for rack:
  Sending Logstash logs to /home/rack/logstash-5.0.0/logs which is now      configured via log4j2.properties.
[2016-11-22T14:41:04,098][INFO ][logstash.outputs.elasticsearch]     Elasticsearch pool URLs updated {:changes=>{:removed=>[], :added=>   ["http://10.10.0.132:9200"]}}
  [2016-11-22T14:41:04,138][INFO ][logstash.outputs.elasticsearch] Using mapping template from {:path=>nil}
 [2016-11-22T14:41:04,514][INFO ][logstash.outputs.elasticsearch] Attempting to install template {:manage_template=>{"template"=>"logstash-*", "settings"=>{"index.refresh_interval"=>"5s"}, "mappings"=>{"_default_"=>{"_all"=>{"enabled"=>true, "omit_norms"=>true}, "dynamic_templates"=>[{"message_field"=>{"path_match"=>"message", "match_mapping_type"=>"string", "mapping"=>{"type"=>"string", "index"=>"analyzed", "omit_norms"=>true, "fielddata"=>{"format"=>"disabled"}}}}, {"string_fields"=>{"match"=>"*", "match_mapping_type"=>"string", "mapping"=>{"type"=>"string", "index"=>"analyzed", "omit_norms"=>true, "fielddata"=>{"format"=>"disabled"}, "fields"=>{"raw"=>{"type"=>"string", "index"=>"not_analyzed", "doc_values"=>true, "ignore_above"=>256}}}}}, {"float_fields"=>{"match"=>"*", "match_mapping_type"=>"float", "mapping"=>{"type"=>"float", "doc_values"=>true}}}, {"double_fields"=>{"match"=>"*", "match_mapping_type"=>"double", "mapping"=>{"type"=>"double", "doc_values"=>true}}}, {"byte_fields"=>{"match"=>"*", "match_mapping_type"=>"byte", "mapping"=>{"type"=>"byte", "doc_values"=>true}}}, {"short_fields"=>{"match"=>"*", "match_mapping_type"=>"short", "mapping"=>{"type"=>"short", "doc_values"=>true}}}, {"integer_fields"=>{"match"=>"*", "match_mapping_type"=>"integer", "mapping"=>{"type"=>"integer", "doc_values"=>true}}}, {"long_fields"=>{"match"=>"*", "match_mapping_type"=>"long", "mapping"=>{"type"=>"long", "doc_values"=>true}}}, {"date_fields"=>{"match"=>"*", "match_mapping_type"=>"date", "mapping"=>{"type"=>"date", "doc_values"=>true}}}, {"geo_point_fields"=>{"match"=>"*", "match_mapping_type"=>"geo_point", "mapping"=>{"type"=>"geo_point", "doc_values"=>true}}}], "properties"=>{"@timestamp"=>{"type"=>"date", "doc_values"=>true}, "@version"=>{"type"=>"string", "index"=>"not_analyzed", "doc_values"=>true}, "geoip"=>{"type"=>"object", "dynamic"=>true, "properties"=>{"ip"=>{"type"=>"ip", "doc_values"=>true}, "location"=>{"type"=>"geo_point", "doc_values"=>true}, "latitude"=>{"type"=>"float", "doc_values"=>true}, "longitude"=>{"type"=>"float", "doc_values"=>true}}}}}}}}
[2016-11-22T14:41:04,543][INFO ][logstash.outputs.elasticsearch] New Elasticsearch output {:class=>"LogStash::Outputs::ElasticSearch", :hosts=> ["10.10.0.132:9200"]}
 [2016-11-22T14:41:04,551][INFO ][logstash.pipeline        ] Starting pipeline {"id"=>"main", "pipeline.workers"=>2, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>5, "pipeline.max_inflight"=>250}
[2016-11-22T14:41:04,561][INFO ][logstash.pipeline        ] Pipeline main started
[2016-11-22T14:41:04,798][INFO ][logstash.agent           ] Successfully started Logstash API endpoint {:port=>9600}

No estoy seguro que se pueda escribir directo a Elasticsearch desde Meshlium, pero seguramente se pueda hacer dos differentes casos:

  1. Escribir en la base de datos, y con LS RDBMS input tomar los ultimos datos cada x minutos.
  2. Escribir a un LOG, y desde Filebeat (beat que lee archivos) enviar la informacion de el log a Logstash, y luego desde Logstash enviar a Elasticsearch.
  3. Desde su parte fijarse si alguno de los inputs, con el link que les pase, puede leer desde alguna otra opcion que no estoy considerando dado que no estamos tan afines con Meshlium como producto.

Espero que esto te sea de ayuda!

Saludos!

Pareceria que tiene una base de datos MySql no? De ser asi, el punto [1] podria funcionarte dependiendo de la cantidad de datos que el producto escribe. Sino yo iria por la segunda solucion.

Saludos!

Hola Gabriel perfecto voy a intentar sino te molesta si me trabo te puedo consultar? gracias por tu ayuda.

Por supuesto, sin problemas Diego.

Saludos.

Hola Gabriel, te consulto esta es la idea para lo que me decis?

Exactamente. Ese es el blog post, pero aqui esta la doc oficial, para LS 5: https://www.elastic.co/guide/en/logstash/current/plugins-inputs-jdbc.html

El meshlium me dice que cree esta base de datos,

  CREATE database MeshliumDB;
  
Just copy paste:
CREATE TABLE IF NOT EXISTS `sensorParser` (
`id` int(11) NOT NULL auto_increment,
`id_wasp` text character set utf8 collate utf8_unicode_ci,
`id_secret` text character set utf8 collate utf8_unicode_ci,
`frame_type` int(11) default NULL,
`frame_number` int(11) default NULL,
`  sensor` text character set utf8 collate utf8_unicode_ci,
`value` text character set utf8 collate utf8_unicode_ci,
`timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP,
`raw` text character set utf8 collate utf8_unicode_ci,
`parser_type` tinyint(3) NOT NULL default '0',
 PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

  

GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY 'passw';

Yo crearia la DB, y luego probaria que funcione sin Logstash.

Luego probaria Logstash y tomar datos desde la DB que estas creando. Y luego verificar que esta funcionado bien.

Hola gabriel ya tengo el equipo conectado a una base de datos en el mismo servidor que logstash, estoy un poco perdido como configurar esto.

input {
  jdbc {
  jdbc_driver_library => "mysql-connector-java-5.1.36-bin.jar"
  jdbc_driver_class => "com.mysql.jdbc.Driver"
  jdbc_connection_string => "jdbc:mysql://localhost:3306/mydb"
  jdbc_user => "mysql"
  parameters => { "favorite_artist" => "Beethoven" }
  schedule => "* * * * *"
  statement => "SELECT * from songs where artist = :favorite_artist"
  }
}

Yo quiero recibir todo los datos.

Hola @Diego_Gomez

Te recomiendo que comiences por leer el link: https://www.elastic.co/guide/en/logstash/current/plugins-inputs-jdbc.html

Aqui explica como utilizarlo y cada una de las opciones en detalle. Luego recomiendo que pruebes esto un poco en un ambiente de testing para entenderlo mejor!

Saludos!

Hola gabriel estoy teniendo problemas con logtash que no encuentra los archivos, esto es lo que tengo y que es lo que me tira de error.
En parametrers no se que poner quiero que venga toda lña informacón
Gracias por la ayuda.

input {
 jdbc {
jdbc_driver_library => "mysql-connector-java-5.1.36-bin.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_connection_string => "jdbc:mysql://localhost:3306/mydb"
jdbc_user => "mysql"
#parameters => { "favorite_artist" => "Beethoven" }
schedule => "* * * * *"
statement => "SELECT * from songs where artist = :favorite_artist"
    }
  }


 rack@rack-Not-Specified:~/logstash-5.0.0$ sudo bin/logstash -f     /home/rack/tcp.co                                              nf
 [sudo] password for rack:
 Sending Logstash logs to /home/rack/logstash-5.0.0/logs which is now configured via log4j2.properties.
 LoadError: no such file to load -- /home/rack/mysql-connector-java-  5.1.40
             require at org/jruby/RubyKernel.java:1040
              require at /home/rack/logstash-      5.0.0/vendor/bundle/jruby/1.9/gems/polyglot-0.3.5/lib/polyglot.rb:65
            load_drivers at /home/rack/logstash-  5.0.0/vendor/bundle/jruby/1.9/gems/logstash-input-jdbc-   4.1.3/lib/logstash/plugin_mixins/jdbc.rb:134
                 each at org/jruby/RubyArray.java:1613
             load_drivers at /home/rack/logstash-  5.0.0/vendor/bundle/jruby/1.9/gems/logstash-input-jdbc-  4.1.3/lib/logstash/plugin_mixins/jdbc.rb:132
            prepare_jdbc_connection at /home/rack/logstash-  5.0.0/vendor/bundle/jruby/1.9/gems/logstash-input-jdbc- 4.1.3/lib/logstash/plugin_mixins/jdbc.rb:146
                  register at /home/rack/logstash-    5.0.0/vendor/bundle/jruby/1.9/gems/logstash-input-jdbc-  4.1.3/lib/logstash/inputs/jdbc.rb:191
            start_inputs at /home/rack/logstash-5.0.0/logstash-  core/lib/logstash/pipeline.rb:319
                   each at org/jruby/RubyArray.java:1613
            start_inputs at /home/rack/logstash-5.0.0/logstash-  core/lib/logstash/pipeline.rb:318
             start_workers at /home/rack/logstash-5.0.0/logstash- core/lib/logstash/pipeline.rb:195
                    run at /home/rack/logstash-5.0.0/logstash-core/lib/logstash/pipeline.rb:153
             start_pipeline at /home/rack/logstash-5.0.0/logstash-  core/lib/logstash/agent.rb:250

Este pareceria ser el error ^.

Tienes bien puesto el file? Tal vez solamente arreglando el jdc driver esto deberia funcionar.

Saludos!

Hola gabriel si ahi ya lo arregle y me toma bien, pero me dice que no tiene permiso para entrar con user ´´@10.10.0.132 pero yo cree un usuario para esto, hay que decirle en el conector de alguna manera que usuario debe tomar?

Exacto!

User: https://www.elastic.co/guide/en/logstash/current/plugins-inputs-jdbc.html#plugins-inputs-jdbc-jdbc_user
Password (si es necesario): https://www.elastic.co/guide/en/logstash/current/plugins-inputs-jdbc.html#plugins-inputs-jdbc-jdbc_password

Ahi logre conectarme pero no se que poner parametrer porque eso me da error

No se bien como porner estos datos me podras ayudar? necesito que se sincrinice cada minuto y que pase toda la tabla.

         parameters => { "favorite_artist" => "Beethoven" }
         schedule => "* * * * *"
         statement => "SELECT * from songs where artist = :favorite_artist"