Logstash + Elasticsearch連携時のLogstash confメモ(jsonからconvert, filter, dateなど)
LogstashからElasticsearchへデータを送信する仕組みを試しました。Logstashのconfの参考になれば幸い。
json側のフィールドをElasticsearchのdate型にconvertしたり、文字列を数値にconvertしたりしました。
ログはjsonフォーマット
1
|
{"reportDate":"2016-11-08 00:00:00","reportType":"report","gender":"female","ageBracket":"18-24","value":"269"}
|
Logstashのconfファイル
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
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のそれぞれの処理を理解する必要がある。
今回の例でいうと以下のように整理できる。
2:codec
- inputから受け取ったログファイルをjson形式に整形する
3:filter
- reportDateをElasticsearchの@timestampへ適応させている。(以下のコードが参考箇所)
1
2
3
|
date {
match => ["reportDate", "YYYY-MM-dd HH:mm:ss" ]
}
|
- また、reportDateの値はElasticsearchの1つのvalueとしてインデックスされるが型がdate型に変換している。(以下のコードが参考箇所)
1
2
3
4
|
date {
match => ["reportDate", "yyyy-MM-dd HH:mm:ss"]
target => "reportDate"
}
|
- 最後にvalueの値をinteger型に変換している(以下のコードが参考箇所)
1
2
3
4
5
|
mutate {
convert => {
"value" => "integer"
}
}
|
4:output
- ログの出力先にElasticsearchを指定している。インデックスはtest。
関連エントリ
fluentd + logstash_formatの難点をrecord_reformerで解決した話 - 平日インプット週末アウトプットぶろぐ