前回で標準入力/標準出力でのログパースができましたので、今回は、
- ログファイルを読み込む
- 出力先をElasticsearchにする
- 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形式で出力されます。