logstash使用之json輸入輸出
阿新 • • 發佈:2019-02-03
概述
如果傳送給logstash的資料內容為json
格式,那麼可以通過解析json內容,根據具體內容生成欄位.方便分析和儲存,比如:
有一個json
內容為: {"name":"nihao"}
,我們需要獲取這個記錄然後通過logstash分析後,放到mysql資料庫中.
一個簡單的logstash輸出內容為:
{
"@version" => "1",
"host" => "localhost",
"@timestamp" => 2017-11-23T08:40:16.868Z,
"message" => "{\"name\":\"nihao\"}"
}
也就是說,如果存到資料庫中,會儲存以上四個欄位到表中,而我們的記錄的內容被簡單的記錄到message
欄位中,如果我們需要分析這條
記錄,還得自己取出來進行處理.
如果使用了logstash的json解析,那麼會是這個樣子:
{
"@version" => "1",
"host" => "localhost",
"@timestamp" => 2017-11-23T08:40:16.868Z,
"message" => "name=nihao",
"name" => "nihao"
}
這樣存到資料庫中就多了name
message
欄位,也可以省去:
{
"@version" => "1",
"host" => "localhost",
"@timestamp" => 2017-11-23T08:40:16.868Z,
"name" => "nihao"
}
json輸出
如果將一個輸入的記錄處理後,輸出為json串:
比如輸入: “nihao”,
那麼輸出的結果為:
{"@version":"1","host":"localhost","@timestamp ":"2017-11-23T09:42:14.798Z","message":"nihao"}
配置資訊如下:
input {
stdin{}
}
output{
stdout{
codec => json
}
}
除了輸入的內容外,還添加了一些額外的資訊.
使用
logstash處理json輸入有兩種方式:
* 直接在輸入階段進行處理
* 通過過濾器處理
配置
輸入階段處理
json_input_log.conf
input{
stdin{
codec => json
}
}
output{
stdout{codec => rubydebug}
}
過濾階段處理
json_filter_log.conf
input{
stdin{}
}
filter{
json{
source => "message"
}
}
output{
stdout{codec => rubydebug}
}
可以看到,輸入階段處理是通過codec對輸入內容進行處理,過濾階段通過json
過濾器外掛進行處理
結果
輸入階段處理
{"name":"hewe"}
{
"name" => "hewe",
"@version" => "1",
"host" => "localhost",
"@timestamp" => 2017-11-23T09:09:01.533Z
}
過濾階段處理
{"name":"hewe"}
{
"@version" => "1",
"host" => "localhost",
"name" => "hewe",
"@timestamp" => 2017-11-23T09:05:12.004Z,
"message" => "{\"name\":\"hewe\"}"
}
注意
雖然開啟除錯顯示的內容和json相似,但這只是除錯顯示的內容,資料在logstash中儲存可能是一個物件,或者一個集合.具體輸出json還是xml由output決定
通過以上的對比,可以看到,過濾階段比輸入階段多了一個欄位message
,這也就表明,當在輸入階段處理時,是直接把輸入的內容解析成相應的欄位,
而在過濾階段處理時,輸入的內容已經被放到message
欄位中,然後通過設定source
解析message為相應的欄位.
結語
具體使用哪一種分情況而定.