1

Ich habe folgendes Ereignis oder Zeile von JDBC-Eingabe.Wie Logstash-Filter verwenden, um in verschachteltes Objekt für Elasticsearch-Ausgabe zu konvertieren?

{"academic_session_id" : "as=1|dur=2015-16,as=2|dur=2016-17", 
      "branch_id" : 1} 

Ich möchte konvertieren oder sie in formatieren folgenden mit logstash Filter ...

{"branch_id": 1,"sessions":[{"as":"1","dur":"2015-16"},{"as":"2","dur":"2016-17"}]} 

Wenn Sie irgendeine Alternative vorschlagen können logstash. Hinweis- Ich verwende Elasticsearch 5.X Version

Antwort

5

Da dies eine ziemlich benutzerdefinierte Manipulation der Daten ist, würde ich den Ruby-Filter verwenden, und schreiben Sie einfach ein Skript mit der code Einstellung, um die Daten zu analysieren. So etwas wie dies funktionieren würde:

filter { 
    ruby { 
    code => " 
     academic_session = event.get('academic_session_id').split(',').map{|data| data.split('|')} 
     sessions = academic_session.map do |arr| 
     temp_hash = {} 
     arr.each do |kv| 
      k,v = kv.split('=') 
      temp_hash[k] = v 
     end 
     temp_hash 
     end 
     event.set('sessions', sessions) 
    " 
    remove_field => ['academic_session_id'] 
    } 
} 
+0

ich über Filtercode versucht, aber ich habe folgendes Ergebnis { "branch_id": 1, "Sitzungen": [{ "wie": "1"}, { "dur" : "2015-16"}, {"as": "2"}, {"dur": "2016-17"}]} –

+0

Ich entschuldige mich, es war mein Fehler. es funktioniert gut. Ich habe '|' mit ',' in meiner Eingabe. –

Verwandte Themen