1. duke-gonorego

    Posted

    duke-gonorego
Changes in title
+LogstashとElasticsearchを連携させる
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,86 @@
+[前回](http://qiita.com/duke-gonorego/items/be0307601a0dc15685e3)で標準入力/標準出力でのログパースができましたので、今回は、
+ 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の設定ファイルを変更する
+
+入出力先を変更します
+※[前回](http://qiita.com/duke-gonorego/items/be0307601a0dc15685e3)の「conf/test.conf」と同じ場所に新しい設定ファイルを作成します。
+
+```bash: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というところに前回どこまで処理をしたか?を記録するもので、ここでは残さないにしてあります。
+
+一度上記設定ファイルで起動します
+
+```bash
+$ /usr/local/logstash/bin/logstash -f /usr/local/logstash/conf/logstash.conf
+```
+ちょっと時間をおいた後、標準出力にパースされた結果が出力され続けます。
+※止めるときはcrtl+cで
+
+## elasticsearchにデータを投入
+
+```bash:logstash.conf
+output {
+ elasticsearch {
+ host => localhost
+ protocol => http
+ }
+}
+```
+上記のように変更します。
+
+実行
+
+```bash
+まずは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"の中身は少ない方がいいかも(確認が早くできるので)
+
+## インデクス確認
+
+```bash
+$ sudo curl 'http://localhost:9200/_search'
+```
+JSON形式で出力されます。
+