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のそれぞれの処理を理解する必要がある。
今回の例でいうと以下のように整理できる。

1: input

2:codec

3:filter

1
2
3
  date {
    match => ["reportDate", "YYYY-MM-dd HH:mm:ss" ]
  }
1
2
3
4
  date {
	  match => ["reportDate", "yyyy-MM-dd HH:mm:ss"]
	  target => "reportDate"
  }
1
2
3
4
5
  mutate {
    convert => {
      "value" => "integer"
    }
  }

4:output

関連エントリ

fluentd + logstash_formatの難点をrecord_reformerで解決した話 - 平日インプット週末アウトプットぶろぐ