LoginSignup
14
17

More than 5 years have passed since last update.

LogstashとElasticsearchを連携させる

Posted at

前回で標準入力/標準出力でのログパースができましたので、今回は、
1. ログファイルを読み込む
2. 出力先をElasticsearchにする
3. Elasticsearchで検索してみる

ところまでやってみたいと思います。

環境

  • VirtualBox 4.3
  • ubuntu 14.04
  • java8(1.8.0_25)
  • Elasticsearch(1.5.0)
  • logstash(1.4.2)

logstashの設定ファイルを変更する

入出力先を変更します
前回の「conf/test.conf」と同じ場所に新しい設定ファイルを作成します。

logstash.conf
input {
  file{
    path=>"/path/to/access.log"
    start_position=>"beginning"
    sincedb_path => "/dev/null"
  }
}

filter {
  grok{
    match=>{"message"=>"%{COMBINEDAPACHELOG}"}
    break_on_match=>false
    tag_on_failure=>["_message_parse_failure"]
  }
  date {
    match=>["timestamp","dd/MMM/yyyy:HH:mm:ssZ"]
    locale=>en
  }
}

output {
  stdout{codec=>rubydebug}
}

inputの箇所に今までの標準入力設定ではなくfileを指定し、ログファイルのpathを指定します。
start_position=>"beginning"はlogstashを起動したときに、ログファイルのどこから読み込むかの指定です。
※デフォルトは「end」です。この場合、logstashが起動された後に、追記されたログから入力となります。
「sincedb_path => "/dev/null"」は$HOME.sincedbというところに前回どこまで処理をしたか?を記録するもので、ここでは残さないにしてあります。

一度上記設定ファイルで起動します

$ /usr/local/logstash/bin/logstash -f /usr/local/logstash/conf/logstash.conf

ちょっと時間をおいた後、標準出力にパースされた結果が出力され続けます。
※止めるときはcrtl+cで

elasticsearchにデータを投入

logstash.conf
output {
  elasticsearch {
    host => localhost
    protocol => http
  }
}

上記のように変更します。

実行

まずはelasticsearchを起動
$ sudo /usr/local/elasticsearch/bin/elasticsearch
その後logstashを起動
$ sudo /usr/local/logstash/bin/logstash -f /usr/local/logstash/conf/logstash.conf

※path=>"/path/to/access.log"の中身は少ない方がいいかも(確認が早くできるので)

インデクス確認

$ sudo curl 'http://localhost:9200/_search'

JSON形式で出力されます。

14
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
17