logstash kv フィルターを使う

syslogのmessage内容がご丁寧にkey value化されて出力されている場合もあって、logstashを通すときはKv filter pluginを使用すれば良いみたいだ。

公式ドキュメント(Kv filter Plugin) の説明を読みながら確認する。

① テスト用に以下のconfを作成。(テストなので入出力は、標準入出力としています)

/tmp/stashtest.conf

input {
stdin { }
}
filter {
kv { }
}
output {
stdout { codec => rubydebug }
}

② logstash起動

# /usr/share/logstash/bin/logstash -f /tmp/stashtest.conf -e

③ 確認用のメッセージを入力

公式ドキュメントの例にある以下の内容を放り込んでみる。

ip=1.2.3.4 error=REFUSED

出力結果は以下のとおり。

{
"ip" => "1.2.3.4",
"error" => "REFUSED”,
"message" => "ip=1.2.3.4 error=REFUSED",
"host" => "srv0001",
"@version" => "1",
"@timestamp" => 2018-10-23T15:32:38.0
}

なるほどね。


 

④ 他のオプションも併用した例

入ってくるmessageの内容が以下の内容

pin=12345~0,d=123,email=foo@bar.com,oq=bobo,ss=12345:

項目の区切りはカンマ、必要な項目はpinとemail、生のメッセージは不要だったとしたら。

kv プラグインは「include_keys」と「field_split 」オプションを使用。

mutateプラグインでmessageソースは除外。

以下のconfを作成。

input {
stdin { }
}
filter {
kv {
include_keys => [ "pin","email" ]
field_split => ",?"
}
mutate {
remove_field => ["message"]
}
}
output {
stdout { codec => rubydebug }

}

出力結果は以下のとおり。

{
"host" => "srv0001",
"email" => "foo@bar.com",
"@version" => "1",
"@timestamp" => 2018-10-23T16:44:13.895Z,
"pin" => "12345~0"
}

いじょ。