2016-07-04 32 views
5

Attualmente sto facendo qualcosa di simile nel mio file di configurazione logstash:Converti tutti i campi che terminano con "id" in intero usando convert in mutate?

filter { 
    ... 
    mutate { 
     ... 
     convert => { 
      "blahId" => "integer" 
      "blahblahId" => "integer" 
      ... 
      ... 
      "b...blahId" => "integer" 
     } 
     ... 
    } 
    ... 
} 

Quindi, fondamentalmente voglio convertire tutti i campi che terminano con "ID" di tipo integer. C'è un modo per farlo in una riga? Qualcosa come "*Id" => "integer" che lo fa?

Edit: ho provato

convert => { 
    "*Id" => "integer" 
} 

Come mi aspettavo, non ha funzionato.

Utilizzare il filtro di rubino, forse?

+0

Hai trovato una soluzione a questo? Sto anche affrontando questo problema in questo momento – DaTebe

risposta

2
Non

specificamente una risposta a questo, ma questo è quello che finisce per fare:

ruby { 
     code => " 
      fieldArray = event['kvmess'].split('|'); 
      for field in fieldArray 
       name = field.split('=')[0]; 
       value = field.split('=')[1]; 
       if value =~ /\A\d+\Z/ 
        event[name] = value.to_i 
       else 
        event[name] = value 
       end 
      end 
     " 
    } 

mio kvmess era come "blahId = 123 | blahblahId = 456 | qualche cosa = | b..blahId = 789 ". Quindi questo ha convertito tutte le chiavi con valori numerici per digitare numeri interi.

C'è un plugin - kv significato specificamente per questo ma non ha la funzionalità per cambiare il tipo di dati in int così ho finito con l'uso di questo plugin per ruby.

+0

ti manda per la pubblicazione questa risposta Stavo cercando lo stesso approccio. Stavo kv, ma stucked con la necessità di convertire ogni valore dinamico in tipo int. Testerà la tua variante ora. – Altenrion

0

Penso che si possa utilizzare il filtro rubino per questo:

ruby { 
     code => " 
       for k,v in event 
        if k.match(/^.*Id$/i) 
         event[k]=v.to_i 
        end 
       end 
     " 
} 

Nota: non l'ho testato.

+0

Non funziona: 'Si è verificata un'eccezione Ruby: metodo non definito \" ciascuno 'per # {: level =>: error} ' – baudsp