2017-04-05 21 views
5

ja zalogowaniu do logstash w formacie JSON, moje dzienniki mają następujące pola, każde pole jest ciągiem znaków, a pole atts jest stringified json (uwaga: atts pola podrzędne są za każdym razem inny)analizowania zagnieżdżone JSON ciąg w Logstash

oto przykład:

{"name":"bob","last":"builder", "atts":"{\"a\":111, \"b\":222}"}

chciałbym przeanalizować go na coś takiego:

{ 
    "name" => "bob", 
    "last" => "builder" 
    "atss" => { 
      "a" => 111, 
      "b" => 222} 
    } 

oto moja konfiguracja:

input { stdin { } } 

filter { 
    json { 
    source => "message" 
    target => "parsed" 
    } 
} 
output { stdout { codec => rubydebug }} 

ok, więc teraz mam to:

{ 
    "@timestamp" => 2017-04-05T12:19:04.090Z, 
    "parsed" => { 
     "atss" => "{\"a\":111, \"b\":222}", 
     "name" => "bob", 
     "last" => "the builder" 
    }, 
     "@version" => "1", 
      "host" => "0.0.0.0" 
} 

jak mogę analizować pole atts do JSON tak otrzymuję:

{ 
    "@timestamp" => 2017-04-05T12:19:04.090Z, 
    "parsed" => { 
     "atss" => 
      {"a" => 111, 
      "b" => 222}, 
     "name" => "bob", 
     "last" => "the builder" 
    }, 
     "@version" => "1", 
      "host" => "0.0.0.0" 
} 

Odpowiedz

6

dzięki @Alcanzar oto co zrobiłem

input { 
    stdin { } 
} 

filter { 
    json { 
    source => "message" 
    target => "message" 
    } 
    json { 
    source => "[message][atts]" 
    target => "[message][atts]" 
    } 

} 
output { stdout { codec => rubydebug }} 
3

Istnieje filtr json. Po prostu podaj to pole, które chcesz przeanalizować, i cel, w którym chcesz.

Coś jak:

json { 
    source => "[parsed][atss]" 
    target => "[parsed][newfield]" 
} 

Nie jestem pewien, czy można umieścić ATSS jako nowego pola. To może działać lub nie. Jeśli nie, użyj filtru mutate do remove_field i rename_field.

+0

dzięki! czy widzisz moją opublikowaną odpowiedź, czy istnieje sposób, aby to zrobić, pisząc filtr wszystko w filtrze 'json' raz? coś 'filtr { json { źródło = "informacja"> docelowa = "informacja"> źródło => "[wiadomość] [atts]" docelowa => "[wiadomość] [atts]" } } ' – dina