読者です 読者をやめる 読者になる 読者になる

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。

関連エントリ

naruto-io.hatenablog.com