2016-12-31 13 views
0

Ich habe ein Beispielprotokoll. "a = 1 & b = 1 & c = 1"Fragen Sie nach KV in logstash

Ich habe die Parameter mit KV getrennt.

filter { 
    grok { 
    match => { "message" => "%{DATA:rawparam}} 
    } 

    KV { 
    source => "rawparam" 
    target => "param" 
    field_split = > "&?#" 
    allow_duplicate_values => false 
    } 
} 

Die Ergebnisse sind wie folgt. Ich möchte jedoch bestimmte Felder von Param auf den Root-Speicherort festlegen.

{ 
    "type" : "log", 
    "rawparam" : "a=1&b=1&c=1", 
    "param" : { 
    "a" = "1", 
    "b" = "2", 
    "c" = "3" 
    } 
} 

Die Ergebnisse unten sind die Ergebnisse, die ich will. Ist das in Logstash möglich?

{ 
    "type" : "log", 
    "rawparam" : "a=1&b=1&c=1", 
    "param" : { 
    "a" = "1", 
    "b" = "2"  
    }, 
    "c" = "3" 
} 

Antwort

0

von ‚Ziel‘ spezifiziert, sind Sie logstash zu sagen, wo die alle Felder kv zu setzen, so dass sie am Ende unter ‚params‘ auf.

Sie können entweder die 'target' -Option entfernen (und logstash werden alle Felder auf der root-Ebene), muate-> rename (um [params] [b] nach [b] zu verschieben) oder ruby ​​verwenden (um eine größere Gruppe von Feldern zum Umbenennen zu durchlaufen).