Logstash: Rinominare i campi nidificati in base a una certa condizione

voti
0

Sto cercando di rinominare i campi annidati da elasticsearch durante la migrazione a Amazonelasticsearch

Nel documento, voglio cambiare la 1) Modificare il valore di campo per il valore-chiave se il campo di valore ha JSON tipo di dati 2) Modificare il valore di campo per valore standard se il campo di valore ha formato più di 15

 _source: {
          applicationid : appid,
          interactionId: 716bf006-7280-44ea-a52f-c79da36af1c5,
          interactionInfo: [
            {
              value: {edited:false},
              title: msgMeta
            },
            {
              title: msg,
              value: hello testing,
            },
            {
              title: testing,
              value: I have a text that can be done and changed only the size exist more than 20 so we applied value-standard ,
            }
          ],
          uniqueIdentifier: a21ed89c-b634-4c7f-ca2c-8be6f31ae7b3,
        }
      }

il risultato finale dovrebbe essere

 _source: {
          applicationid : appid,
          interactionId: 716bf006-7280-44ea-a52f-c79da36af1c5,
          interactionInfo: [
            {
              value-keyword: {edited:false},
              title: msgMeta
            },
            {
              title: msg,
              value: hello testing,
            },
            {
              title: testing,
              value-standard: I have a text that can be done and changed only the size exist more than 20 and so we applied value-standard  ,
            }
          ],
          uniqueIdentifier: a21ed89c-b634-4c7f-ca2c-8be6f31ae7b3,
        }
      }
È pubblicato 24/10/2019 alle 12:02
fonte dall'utente
In altre lingue...                            


2 risposte

voti
0

Per 2), si può fare in questo modo:

filter {
    if [_source][interactionInfo][2][value] =~ /.{15,15}/ {

        mutate {
            rename => ["[_source][interactionInfo][2][value]","[_source][interactionInfo][2][value-standard]"]
        }
    }
}

L'espressione regolare .{15,15}corrisponde a qualsiasi stringa lunga 15 caratteri. Se il campo è più breve di 15 caratteri, l'espressione regolare non corrisponde e il mutate#renamenon viene applicato.

Per 1), una possibile soluzione sarebbe cercare di analizzare il campo con il filtro JSON e se non c'è _jsonparsefailuretag, rinominare il campo.

Risposto il 24/10/2019 a 17:14
fonte dall'utente

voti
0

Fondata la soluzione per questo. Ho usato un filtro rubino Logstash per controllare ogni documento così come documento nidificato Ecco il codice ruby

require 'json'

def register(param)
end

def filter(event)
  infoarray = event.get("interactionInfo")
  infoarray.each {  |x|
      if x.include?"value"
         value = x["value"]
         if value.length > 15
           apply_only_keyword(x)
         end
       end
      if x.include?"value"
        value = x["value"]
         if validate_json(value)
           apply_only_keyword(x)
         end
       end
  }
event.set("interactionInfo",infoarray)
return [event]
end


def validate_json(value)
  if value.nil?
    return false
  end
  JSON.parse(value)
  return true
rescue JSON::ParserError => e
  return false
end

def apply_only_keyword(x)
  x["value-keyword"] = x["value"]
  x.delete("value")
  if x.include?"value-standard"
    x.delete("value-standard")
  end
  if x.include?"value-whitespace"
    x.delete("value-whitespace")
  end
end
Risposto il 14/11/2019 a 11:07
fonte dall'utente

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more