मेरे पास एक सरणी में सरणी वाला JSON-Message है।किसी ऑब्जेक्ट के अंदर JSON सरणी को कैसे विभाजित करें
{
"type": "monitor",
"server": "10.111.222.333",
"host": "abc.de",
"bean": [{
"name": "beanName1",
"reseted": "2015-06-05T15:10:00.192Z",
"method": [{
"name": "getAllXY",
"count": 5,
"min": 3,
"max": 5
},
{
"name": "getName",
"count": 4,
"min": 2,
"max": 4
}]
},
{
"name": "beanName2",
"reseted": "2015-06-05T15:10:00.231Z",
"method": [{
"name": "getProperty",
"count": 4,
"min": 3,
"max": 3
}]
},
{
"name": "beanName3",
"reseted": "2015-06-05T15:10:00.231Z"
}]
}
"सेम" विभाजित करने के लिए एक फिल्टर का उपयोग करना:: मैं विभाजित करने के लिए कि कई घटनाओं में चाहते
input {
stdin {
codec => "json"
}
}
filter {
split {
field => "bean"
}
}
output {
stdout{codec => "json"}
}
अच्छी तरह से काम कर रहा है:
{"type":"monitor",
"server":"10.111.222.333",
"host":"abc.de",
"bean":{
"name":"beanName1",
"reseted":"2015-06-05T15:10:00.192Z",
"method":[{
"name":"getAllXY",
"count":5,
"min":3,
"max":5
},{
"name":"getName",
"count":4,
"min":2,
"max":4
}]},
"@version":"1",
"@timestamp":"2015-07-14T09:21:18.326Z"
}
{"type":"monitor",
"server":"10.111.222.333",
"host":"abc.de",
"bean":{
"name":"beanName2",
"reseted":"2015-06-05T15:10:00.231Z",
"method":[{
"name":"getProperty",
"count":4,
"min":3,
"max":3
}]},
"@version":"1",
"@timestamp":"2015-07-14T09:21:18.326Z"
}
...
भी अलग करने के लिए "तरीकों" , मैंने एक और विभाजन-फ़िल्टर जोड़ा:
split {
field => "bean"
}
split {
field => "bean.method"
}
लेकिन उस तरह से मैं सिर्फ एक त्रुटि संदेश मिलता है:
Exception in filterworker {"exception"=>#LogStash::ConfigurationError: Only String and Array types are splittable. field:bean.method is of type = NilClass
मैं वस्तु "सेम" अंदर सरणी "विधि" का उपयोग नहीं कर सकते हैं। मैंने भाग्य के साथ अलग-अलग नोटेशन की कोशिश की। क्या सरणी का उपयोग करना संभव है, शायद यह अभी तक समर्थित नहीं है? अगर पहली विधि सफल रहा था
filter {
if !("splitted_beans" in [tags]) {
json {
source => "message"
}
split {
field => "bean"
add_tag => ["splitted_beans"]
}
}
if ("splitted_beans" in [tags] and [bean][method]) {
split {
field => "bean[method]"
}
}
}
दूसरी शर्त चेक और एक विधि अपने सेम के अंदर मौजूद है यदि:
यह काम करता है, लेकिन मेरे पास बिना विधियों के बीन्स हैं। तो मैंने _if [बीन] [विधि] {..._ जोड़ा और अब यह ठीक है, बहुत बहुत धन्यवाद। – joerno
बिल्कुल सही, मैंने अपने जवाब में '[बीन] [विधि]' शर्त जोड़ दी है। – hurb
@hurb क्या होगा यदि "बीन" में केवल एक तत्व है? यह कोड उस मामले में काम नहीं कर रहा है –