2017-04-05 48 views
5

Tôi đang ghi nhật ký, theo định dạng json, nhật ký của tôi có các trường sau, mỗi trường là một chuỗi và trường atts là một json được xâu chuỗi (chú ý: atts trường phụ khác nhau mỗi lần)Phân tích chuỗi JSON lồng nhau trong Logstash

đây là một ví dụ:

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

tôi muốn phân tích nó một cái gì đó như thế này:

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

đây là cấu hình của tôi:

input { stdin { } } 

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

ok, vì vậy bây giờ tôi có được điều này:

{ 
    "@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" 
} 

làm thế nào tôi có thể phân tích lĩnh vực atts để JSON vì vậy tôi nhận:

{ 
    "@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" 
} 

Trả lời

6

nhờ @Alcanzar đây là những gì tôi đã làm

input { 
    stdin { } 
} 

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

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

Có bộ lọc json. Chỉ cần vượt qua nó lĩnh vực bạn muốn phân tích cú pháp và một mục tiêu mà bạn muốn nó.

Cái gì như:

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

Tôi không chắc chắn nếu bạn có thể đặt atss như lĩnh vực mới. Nó có thể hoặc có thể không hoạt động. Nếu không, hãy sử dụng bộ lọc mutate để remove_fieldrename_field.

+0

cảm ơn! bạn có thể thấy câu trả lời được đăng của tôi, có cách nào để làm điều này bằng văn bản bộ lọc tất cả dưới bộ lọc 'json' một lần? một cái gì đó như 'lọc { json { source => "thông báo" target => "thông báo" source => "[tin nhắn] [atts]" target => "[tin nhắn] [atts]" } } ' – dina

Các vấn đề liên quan