いまさら fluentd はじめてみる5(完結編)
紆余曲折しましたが、やっと「もう何番煎じだ?」ぐらい同じレベルでインストールできました。いやはやインストールしたバージョンがbugあったおかげ?で勉強色々しました。これでようやっとスタートラインにたてましたw。で、本題「Apache + fluentd + Elasticsearch + Kibana」 ということで(本当に何番煎じ?)完結編です。
File descriptor, Kernel パラメータの設定
vm を2つ用意します。これは単にサービス側と解析側とインスタンスを分離し明確にしたいだけ(趣味的な問題)なので適宜読み飛ばして頂いても結構です。でも fluentd は、ファイルディスクリプタを結構使うらしいのでデフォルト 1024 より大きい値にしておきます。
$ sudo vi /etc/security/limits.conf
root soft nofile 65536
root hard nofile 65536
* soft nofile 65536
* hard nofile 65536
$ ulimit -n (システムを再起動)
$ sudo vi /etc/sysctl.conf
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.ip_local_port_range = 10240 65535
$ sysctl -w
fluentd のインストール
ダウングレードした td-agent 0.10.45 を入れる、理由は最新版がまだアレなので。
$ sudo su
# curl -L http://toolbelt.treasuredata.com/sh/install-redhat.sh | sh
$ sudo yum remove td-agent-1.1.20-0.x86_64
$ sudo yum install td-agent-1.1.19-0.x86_64
$ td-agent --version
td-agent 0.10.45
で、yum の fastestmirror を導入していたり update すると折角ダウングレードしたのが最新化されてしまうので /etc/yum.conf
に以下を追加する。
exclude=td-*
受信側(コレクター側)の設定
elasticsearch のプラグインを導入
受信側(コレクター側)に fluentd の elasticsearch プラグインを導入、gemで入れるとき libcurl-devel, gcc が必須です。
# yum install libcurl-devel gcc
# /usr/lib64/fluent/ruby/bin/gem install fluent-plugin-elasticsearch
Elasticsearch をインストール
外部レポジトリの追加(EPEL)をおこないます。また Elasticsearch には java が必要なのでそれもインストールします(個人的には、java 入れるの凄い嫌だけどw)。あとは形態素解析器の Kuromoji プラグインもついでにインストールしてもよさげかもしれません。
# rpm --import http://packages.elasticsearch.org/GPG-KEY-elasticsearch
# vi /etc/yum.repos.d/elasticsearch.repo
[elasticsearch-1.1]
name=Elasticsearch repository for 1.1.x packages
baseurl=http://packages.elasticsearch.org/elasticsearch/1.1/centos
gpgcheck=1
gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch
enabled=1
# yum install elasticsearch java-1.7.0-openjdk
# chkconfig --add elasticsearch
# chkconfig elasticsearch on
# service elasticsearch start
んでもって、動作をチェックする。
$ curl -X GET http://localhost:9200/
{
"status" : 200,
"name" : "Wilbur Day",
"version" : {
"number" : "1.1.2",
"build_hash" : "e511f7b28b77c4d99175905fac65bffbf4c80cf7",
"build_timestamp" : "2014-05-22T12:27:39Z",
"build_snapshot" : false,
"lucene_version" : "4.7"
},
"tagline" : "You Know, for Search"
}
Apache のインストール
ここは、いつものごとくす。ServerName を弄っておくとワーニングがでないのであれしときます。kibana を起動するだけなので nginx でもokなのでここも趣味の問題です。
# yum install httpd
# /etc/init.d/httpd start
# chkconfig httpd on
kibana のインストール
3.1.0 最新版をインストール(2014/7/4時点)。
# curl -sL https://download.elasticsearch.org/kibana/kibana/kibana-3.1.0.tar.gz | sudo tar zxf - -C /var/www/html
# mv /var/www/html/kibana-3.1.0 /var/www/html/kibana
# /etc/init.d/httpd restart
アクセス
http://localhost/kibana にアクセスして kinaba の初期画面が表示されることを確認する。
fluentd の定義
転送された内容を確認する意味で type stdout
を指定してます。 運用始める前は /var/log/td-agent/td-agent.log
に出力された内容を確認し微調整しながら理解&定義した方がいいです。
<source>
type forward
port 24224
</source>
<match apache.**>
type copy
<store>
type stdout
</store>
<store>
type elasticsearch
host elasticsearch IPアドレス
port 9200
type_name access_log_2
logstash_format true
logstash_prefix apache_access
logstash_dateformat %Y%m
</store>
</match>
送信側(エージェント側)
fluentd の定義
fluentd の apache2 プラグインを使用しデコードした内容を elasticsearch をインストールしてあるサーバに転送します。ここでも type stdout
を指定してます。 運用始める前は /var/log/td-agent/td-agent.log
を見つつ設定した方がベストです。
<source>
type tail
path /var/log/httpd/access_log
tag apache.combined
pos_file /var/log/td-agent/httpd-access.log.pos
format apache2
</source>
<match apache.**>
type copy
<store>
type stdout
</store>
<store>
type forward
buffer_chunk_limit 256m
buffer_queue_limit 128
flush_interval 5s
<server>
host elasticsearch IPアドレス
port 24224
</server>
</store>
</match>
kibana
fluentd の設定、Elasticsearch でデータが溜まってくるとようやくデータを可視化する準備が整います。ちなみにデータが蓄積されてないと kibana で解析できないというか面白くないので適当に、wget とか curl でサービス側を叩いておくこと、
kibana の使い方
次回
fluentd を多段構成にしつつ冗長化構成したりと遊んで、もとい勉強してみるつもり