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" }
いじょ。