Descomponer el resultado de una consulta MySql que esta en JSON a nuevos campos indexables en elasticsearch con logstash

Quiero meter el resultado de una consulta de mysql a elasticsearch a traves de logstash, tengo un campo llamado Detalle que contiene un string que es un JSON, el cual puede contener lo siguiente:

{
  "interna": true,
  "ContactoNombre": "Marvel",
  "ContactoCorreo": "xxxxx@hotmail.com",
  "Salario": "900 - 1000"
}

Como puedo obtener y separar este json en los siguientes campos:

  • salariomin : 900
  • salariomax: 1000
  • rangosalario 9000 – 1000
  • internar: true o 1

En la configuración de logstash con filters, he estado intentando con el plugin json de la siguiente manera:

filter{
    json {
        source => "detalle"
        remove_field => "detalle"
        target => "Salario"
        add_field=> { "interna"=> "Salario[0]" }
    }
}

El resultado en elasticsearch de esto es:

"Salario": {
     "interna": true,
      "ContactoNombre": "Marvel ",
      "ContactoCorreo": "xxxxx@hotmail.com",
      "Salario": "900 - 1000"
},

También he visto el plugin split, pero la verdad no logro comprender del todo como descomponer el campo de salario en dos campos.

De antemano agradezco su ayuda.

PD. Las etiquetas logstash y elasticsearch no existen en es.stackoverflow

1
задан 28.12.2016, 17:49
0 ответов

В конце концов мой файл logstash остался таким:

filter{
    json {
        source => "detalle"
        remove_field => "detalle"
        target => "jsondetalle"
    }
    if "interna" in [jsondetalle]{
        mutate{
            add_field => {
               "interna" => "%{[jsondetalle][interna]}"
               "rangosalario" => "%{[jsondetalle][Salario]}"
            }
          #  remove_field => "jsondetalle"
        }
        grok {
            match => { "rangosalario" => "%{NUMBER:salarymin:float} - %{NUMBER:salarymax:float}"}
            remove_field => "rangosalario"
        }
    }
}
0
ответ дан 03.12.2019, 17:57