2017-04-05 7 views
5

में नेस्टेड JSON स्ट्रिंग पार्स मैं logstash को प्रवेश करने हूँ json प्रारूप में,, अपने लॉग निम्नलिखित क्षेत्रों है, प्रत्येक क्षेत्र एक स्ट्रिंग है और atts क्षेत्र एक stringified json है (ध्यान दें: atts उप क्षेत्रों हर बार अलग हैंLogstash

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

मैं कुछ करने के लिए इसे इस तरह पार्स करने के लिए करना चाहते हैं::

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

यहाँ एक उदाहरण है

यहाँ मेरी विन्यास है:

input { stdin { } } 

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

ठीक है, तो अब मैं इस मिल:

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

कैसे मैं atts क्षेत्र पार्स JSON करने के लिए कर सकते हैं तो मैं प्राप्त करते हैं:

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

उत्तर

6

धन्यवाद यहाँ @Alcanzar लिए मैं क्या किया

input { 
    stdin { } 
} 

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

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

एक json फ़िल्टर है। बस उस क्षेत्र को पास करें जिसे आप पार्स करना चाहते हैं और एक लक्ष्य जहां आप चाहते हैं।

कुछ की तरह:

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

मैं अगर आप नए क्षेत्र के रूप में atss रख सकते हैं यकीन नहीं है। यह काम कर सकता है या नहीं। यदि ऐसा नहीं होता है, तो mutate फ़िल्टर remove_field और rename_field पर फ़िल्टर करें।

+0

धन्यवाद है! क्या आप मेरा पोस्ट उत्तर देख सकते हैं, क्या यह सब एक बार 'json' फ़िल्टर के तहत फ़िल्टर को लिखने का कोई तरीका है? 'फिल्टर की तरह कुछ { json { स्रोत =>" संदेश " लक्ष्य =>" संदेश " स्रोत =>" [संदेश] [Atts] " लक्ष्य =>" [संदेश] [Atts] " } } ' – dina

संबंधित मुद्दे