Cygwinにfluentd, Elasticsearch, Kibanaをインストールして動かす

Cygwinにfluentd, Elasticsearch, Kibanaをインストールして、httpdのログを見るまでのメモ。

### 環境

- Windows 7 64bit
- Cygwin 1.7.30-1 (64bit版)
- Ruby 1.9.1 (Cygwin)

### 前提

- Cygwinで以下のパッケージがインストール済み
    - make
    - wget
    - tar
    - libcrypt-devel
    - libcurl-devel
    - gcc-core
    - gcc-g++
    - apache2(Kibanaアクセス用)
        - httpd.confは初期設定のまま(Windowsサービス上でcygserverが動いており、localhost:80からアクセスできる)

### 手順

1. Elasticsearch, Kibanaをダウンロードして配置

    ```shell
    # http://www.elasticsearch.org/overview/elkdownloads/の最新版をダウンロード
    wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.3.1.tar.gz
    tar zxvf elasticsearch-1.3.1.tar.gz
    # /opt以下に配置
    mv elasticsearch-1.3.1 /opt/elasticsearch

    # http://www.elasticsearch.org/overview/elkdownloads/の最新版をダウンロード
    wget https://download.elasticsearch.org/kibana/kibana/kibana-3.1.0.tar.gz
    tar zxvf kibana-3.1.0.tar.gz
    # /opt以下に配置
    mv kibana-3.1.0 /opt/kibana
    ```

2. fluentd, fluent-plugin-elasticsearchのインストール

    ```shell
    gem install fluentd --no-ri --no-rdoc
    gem install fluent-plugin-elasticsearch
    ```

3. httpd.confのDocumentRootを/opt/kibanaにする(httpdでKibanaにアクセスするため)
4. fluent.confの設定(httpdのログをElasticsearchに送る)

    ```
    <source>
      type tail
      format /^(?<host>[^ ]*) [^ ]* (?<user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S+)(?: +(?<path>[^ ]*) +\S*)?" (?<code>[^ ]*) (?<size>[^ ]*)(?: "(?<referer>[^\"]*)" "(?<agent>[^\"]*)" (?<received_byte>[^ ]*) (?<sent_byte>[^ ]*) (?<response_time_micro_sec>[^ ]*))?$/
      time_format %d/%b/%Y:%H:%M:%S %z
      path /var/log/apache2/access_log
      pos_file /var/log/fluentd/buffer/httplog.pos
      tag httplog
    </source>

    <match httplog>
      type elasticsearch
      host localhost
      port 9200
      type_name httplog
      logstash_format true
    </match>
    ```

5. elasticsearchを立ち上げ、fluentdを実行

    ```shell
    # localhost:9200でelasticsearchが立ち上がる
    /opt/elasticsearch/bin/elasticsearch
    # 前のステップで作成したfluent.confを使用する
    fluentd -c fluent.conf
    ```

6. ブラウザでlocalhost(Kibana)にアクセスし、ログが表示されることを確認する
    - Logstash Dashboardに移動し、"EVENTS OVER TIME"のグラフを確認
    - 今回の設定では、localhost自身へのアクセスログがelasticsearchに転送され、kibanaに表示される


### 備考

- 上記手順は、自分でいくつかはまったものを最終的に整理したものなので、同等の環境でうまくいかなかったらご指摘ください。
- fluentdのインストールは苦労しました。実際は以下の手順をたどっています(cygwinのパッケージインストールにはapt-cygを使用)。
    1. "gem install fluentd --no-ri --no-rdoc"を実行するも、msgpackの部分でエラーになる
    2. 一応"gem install msgpack"を実行するもやはりエラー
    3. msgpackのmkmf.log(自分の環境では/usr/lib/ruby/gems/1.9.1/gems/msgpack-0.5.8/ext/msgpack/mkmf.log)を確認すると、"/usr/bin/ld: cannot find -lcrypt"というメッセージがあった
    4. "apt-cyg install libcrypt-devel"実行でlcryptを解決
    5. 次に"gem install msgpack"を実行すると"sh: make: command not found"とエラー
    6. "apt-cyg install make"でmakeインストール
    7. "gem install msgpack"で今度こそ成功。
    8. 改めて"gem install fluentd --no-ri --no-rdoc"実行して成功
- 当初、fluentdはWindows側に直接インストールしようとしました。fluentd, fluent-plugin-elasticsearchまでインストールしたものの、fluentdを動かしたら"runtime error!"とか出たので早々と諦めました。一応インストールまでの手順を書いておきます。
    1. rubyのdevkitをダウンロードして、"ruby dk.rb init", "ruby dk.rb install" 実行
    2. cool.ioをgithubからzipダウンロード
        - https://github.com/MasayukiKiyota/cool.io
    3. 2を解凍し、"gem install cool.io"
    4. githubからfluentdのwindowsブランチのソースコードをzipダウンロード
    5. 4を解凍し、"gem install fluentd-0.10.46.gem"でインストール
    6. Win版libcurlをダウンロードし、C:\curl-7.21.0-devel-mingw32に配置
        - http://curl.haxx.se/gknw.net/7.34.0/dist-w32/curl-7.34.0-devel-mingw32.zip
    7. PATHにC:\curl-7.21.0-devel-mingw32\binを追加
    8. "gem install fluent-plugin-elasticsearch -- --with-curl-lib=C:\curl-7.21.0-devel-mingw32\bin --with-curl-include=C:\curl-7.21.0-devel-mingw32\include"実行



### 参考にしたページ

- http://blog.excale.net/index.php/archives/1929
- http://qiita.com/maryco/items/a8e154c09703e27f0a76