fluentd + Elasticsearch + Kibanaでデータ集計サーバを作る



色んなログにも使えて、いい感じに整形してくれて
解析もしやすいです。使いこなせてるかどうかは謎

fluentd...ログを集計してく便利なやつ
Elasticsearch...サーチエンジン。fluentdで収集したログをいい感じに加工してくれるやつ
kibana...集計・加工をナイスに見る事が出来て、色々な検索もできる凄いやつ

##Elasticsearchインストール

■公式サイト
http://www.elasticsearch.org/overview/elkdownloads/


今回はRPM版からインストールします

```
wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.2.1.noarch.rpm

rpm -ivh elasticsearch-1.2.1.noarch.rpm

chkconfig --add elasticsearch
```

javaをoracleからインストール
ちなみにyumで入るバージョンだとうまく動かないので手動で入れる

■javaサイト（「java インストール」でぐぐれば出てくる）

http://www.oracle.com/technetwork/java/javase/downloads/index.html

rpm版をインストール

```
rpm -ivh jdk-8u5-linux-x64.rpm
```

###設定ファイル変更

とりあえず一台構成なので最低限の設定を入れる

```/etc/elasticsearch/elasticsearch.yml
index.number_of_shards: 1
index.number_of_replicas: 0
path.data: /data
path.logs: /var/log/elasticsearch/logs
```
対象のディレクトリを作成して権限付与

```
mkdir -p elasticsearch:elasticsearch /data/elasticsearch
chown -R elasticsearch:elasticsearch /data
```

###サービス起動

```
/etc/init.d/elasticsearch start
elasticsearch を起動中:                                    [  OK  ]
```

これでとりあえずElasticsearchの準備は終了

またrpmでインストールしたjavaは大丈夫だろうけど
ソースからインストールしたり、複数のjavaが動いている時等
ほうっておくと`yum update`でJAVA_HOMEが勝手に書き換わったり
コマンドのPATHが巻き戻ったりと色々不具合が出るので対象外にしておく

```/etc/yum.conf

execlude=java*

```


##kibanaインストール

kibanaダウンロードサイト
http://www.elasticsearch.org/overview/kibana/installation/


wgetでもってきて配置

```
wget https://download.elasticsearch.org/kibana/kibana/kibana-3.1.0.tar.gz

tar xvfz kibana-3.1.0.tar.gz

mv kibana-3.1.0 /opt/kibana
```


##Fluentdインストール

###rpm版をインストール

```
curl -L http://toolbelt.treasuredata.com/sh/install-redhat.sh | sh
```

###インストールの前に
fluentdの公式ではOSのカーネルを変更するのが推奨されているようなので設定変更
http://docs.fluentd.org/ja/articles/before-install


####ntpdをインストール
```
yum install ntpd
chkconfig ntpd on
```

####ファイルディスクリプタの最大値を増やす

```/etc/security/limits.conf

root soft nofile 65536
root hard nofile 65536
* soft nofile 65536
* hard nofile 65536

```

####ネットワーク関係のカーネルパラメータの最適化

```/etc/sysctl.conf
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.ip_local_port_range = 10240    65535
```

全部終わったらreboot

##Fluentd-agentインストール

今回はログ集計サーバとは別にリモートから送りたいので別サーバにagentとしてインストールします。
上記で記述しているFluentdインストール部分は全て終わらせます。

###Elasticsearchプラグインをインストール

rpmでインストールしたfluetndはrubyも内包されているので
内包されたrubyに対して`gem install`を行う

```
/usr/lib64/fluent/ruby/bin/gem install fluent-plugin-elasticsearch
```


エラー

```
ERROR:  Error installing fluent-plugin-elasticsearch:
	ERROR: Failed to build gem native extension.

        /usr/lib64/fluent/ruby/bin/ruby extconf.rb
checking for curl-config... no
checking for main() in -lcurl... *** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers.  Check the mkmf.log file for more

```

解決

```
yum install libcurl-devel
```

再度エラー。gccないだけだった・・・

```
yum install gcc
```

設定ファイルを変更。apacheログを収集してみます。

```/etc/td-agent/td-agent.conf

<source>
  type tail
  format apache
  path /var/log/httpd/access_log.%Y%m%d
  tag apache.access
</source>

<match apache.access>
  type elasticsearch
  host 192.168.33.10
  port 9200
  type_name access_log_2
  logstash_format true
  logstash_prefix apache_access
  logstash_dateformat %Y%m
</match>
```

やってから思った。
これkibana側にfluentd要らなかった。