Logstash + Elasticsearch連携時のLogstash confメモ(jsonからconvert, filter, dateなど)
LogstashからElasticsearchへデータを送信する仕組みを試しました。Logstashのconfの参考になれば幸い。
json側のフィールドをElasticsearchのdate型にconvertしたり、文字列を数値にconvertしたりしました。
ログはjsonフォーマット
{"reportDate":"2016-11-08 00:00:00","reportType":"report","gender":"female","ageBracket":"18-24","value":"269"}
Logstashのconfファイル
input { file { path => "/path_to_log_file" codec => "json" } } filter { date { match => ["reportDate", "YYYY-MM-dd HH:mm:ss" ] } date { match => ["reportDate", "yyyy-MM-dd HH:mm:ss"] target => "reportDate" } mutate { convert => { "value" => "integer" } } } output { elasticsearch { hosts => ["localhost:9200"] index => "test" } }
Logstashはinput/codec/filter/outputのそれぞれの処理を理解する必要がある。
今回の例でいうと以下のように整理できる。
1: input
- inputはログファイル(file)から行う
2:codec
- inputから受け取ったログファイルをjson形式に整形する
3:filter
- reportDateをElasticsearchの@timestampへ適応させている。(以下のコードが参考箇所)
date { match => ["reportDate", "YYYY-MM-dd HH:mm:ss" ] }
- また、reportDateの値はElasticsearchの1つのvalueとしてインデックスされるが型がdate型に変換している。(以下のコードが参考箇所)
date { match => ["reportDate", "yyyy-MM-dd HH:mm:ss"] target => "reportDate" }
- 最後にvalueの値をinteger型に変換している(以下のコードが参考箇所)
mutate { convert => { "value" => "integer" } }
4:output
- ログの出力先にElasticsearchを指定している。インデックスはtest。