2015-10-06 53 views
3

我在Logstash中有關於JSON的問題。 我有一個JSON輸入,看起來是這樣的:在Logstash中訪問具有可變關鍵字名稱的嵌套JSON值

{ 
"2": { 
     "name": "name2", 
     "state": "state2" 
    }, 

"1": { 
     "name": "name1", 
     "state": "state1" 
    }, 

"0": { 
     "name": "name0", 
     "state": "state0" 
    } 
} 

現在,讓我們說,我想在logstash配置

json{ 
    source => "message" 
    add_field => { 
      "NAME" => "%{ What to write here ?}" 
      "STATE" => "%{ What to write here ?}" 
    } 
} 

添加一個字段是否有訪問JSON輸入方式這樣我得到一個名稱爲name1的字段,另一個名稱爲2的字段和名稱爲3的第三個字段.JSON中的第一個鍵正在改變,這意味着只能有一個或多個部分。所以我不想硬編碼它像

%{[0][name]} 

感謝您的幫助。

回答

2

如果您刪除輸入中的所有新行,則可以簡單地使用json filter。您不需要任何add_field操作。

沒有新線工作的配置:

filter { 
     json { source => message } 
} 

如果您不能刪除您輸入新生產線需要合併與multiline codec線。

新線工作的配置:

input { 
    file { 
     path => ["/path/to/your/file"] # I suppose your input is a file. 
     start_position => "beginning" 
     sincedb_path => "/dev/null" # just for testing 
     codec => multiline { 
      pattern => "^}" 
      what => "previous" 
      negate => "true" 
     } 
    } 
} 

filter { 
    mutate { replace => { "message" => "%{message}}" } } 
    json { source => message } 
} 

我想你使用的文件輸入。如果你不這樣做,只需改變它。

輸出(兩個):

"2" => { 
    "name" => "name2", 
    "state" => "state2" 
}, 
"1" => { 
    "name" => "name1", 
    "state" => "state1" 
}, 
"0" => { 
    "name" => "name0", 
    "state" => "state0" 
}