Fluentd + ElasticSearch + Kibana3でグラフ化

前々回にElastcSearchをインストールしましたが、
今回はFluentdとKibana3をインストールしてグラフ化してみます。

まずはFluentdのインストールメモ。
※参考
http://docs.fluentd.org/categories/installation
■Fluentdインストール

[root@onedari01 ~]# curl -L http://toolbelt.treasuredata.com/sh/install-redhat.sh | sh
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   672  100   672    0     0   2355      0 --:--:-- --:--:-- --:--:--     0
This script requires superuser access to install rpm packages.
You will be prompted for your password by sudo.
Loaded plugins: product-id, security, subscription-manager
Updating Red Hat repositories.
pgdg92                                                                   | 2.1 kB     00:00
treasuredata                                                             |  951 B     00:00
treasuredata/primary                                                     |  10 kB     00:00
treasuredata                                                                              29/29
Skipping security plugin, no data
Setting up Update Process
No Packages marked for Update
Loaded plugins: product-id, security, subscription-manager
Updating Red Hat repositories.
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package td-agent.i386 0:1.1.18-0 set to be updated
--> Processing Dependency: td-libyaml for package: td-agent
--> Processing Dependency: libyaml-1024.so.4 for package: td-agent
--> Running transaction check
---> Package td-libyaml.i386 0:0.1.4-1 set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================================
 Package                Arch             Version                 Repository                Size
================================================================================================
Installing:
 td-agent               i386             1.1.18-0                treasuredata              63 M
Installing for dependencies:
 td-libyaml             i386             0.1.4-1                 treasuredata             123 k

Transaction Summary
================================================================================================
Install       2 Package(s)
Upgrade       0 Package(s)

Total download size: 63 M
Downloading Packages:
(1/2): td-libyaml-0.1.4-1.i386.rpm                                       | 123 kB     00:00
(2/2): td-agent-1.1.18-0.i386.rpm                                        |  63 MB     01:55
------------------------------------------------------------------------------------------------
Total                                                           551 kB/s |  63 MB     01:56
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing     : td-libyaml                                                               1/2
  Installing     : td-agent                                                                 2/2
adding 'td-agent' group...
adding 'td-agent' user...
Installing default conffile  ...
prelink detected. Installing /etc/prelink.conf.d/td-agent-ruby.conf ...
Configure td-agent to start, when booting up the OS...
duration: 169(ms)
Installed products updated.

Installed:
  td-agent.i386 0:1.1.18-0

Dependency Installed:
  td-libyaml.i386 0:0.1.4-1

Complete!
[root@onedari01 ~]#
[root@onedari01 ~]# /etc/init.d/td-agent start
Starting td-agent:                                         [  OK  ]
[root@onedari01 ~]#
[root@onedari01 ~]#

ここまででFluentdを起動できました。

■プラグイン検索方法

[root@onedari01 ~]# /usr/lib/fluent/ruby/bin/fluent-gem search -r fluent-plugin

Fluentdに必要なプラグインを片っ端からインストールします。

■インストール方法

[root@onedari01 ~]# /usr/lib/fluent/ruby/bin/fluent-gem install fluent-plugin-tail-asis
[root@onedari01 ~]# /usr/lib/fluent/ruby/bin/fluent-gem install fluent-plugin-parser
[root@onedari01 ~]# /usr/lib/fluent/ruby/bin/fluent-gem install fluent-plugin-grepcounter
[root@onedari01 ~]# /usr/lib/fluent/ruby/bin/fluent-gem install fluent-plugin-file-alternative
[root@onedari01 ~]# /usr/lib/fluent/ruby/bin/fluent-gem install fluent-plugin-elasticsearch
[root@onedari01 ~]# /usr/lib/fluent/ruby/bin/fluent-gem install fluent-plugin-geoip

■geoipを使用するための準備
IPアドレスから国を判別する設定を追加します。

参考
http://y-ken.hatenablog.com/entry/fluent-plugin-geoip-v0.0.4

[root@onedari01 ~]# yum install geoip-devel
Loaded plugins: security
Setting up Install Process
No package geoip-devel available.
Nothing to do
[root@onedari01 ~]#
[root@onedari01 ~]# vi /etc/yum.repos.d/git.repo 
[dag] 
name=Dag RPM Repository for Redhat EL5 
baseurl=http://apt.sw.be/redhat/el5/en/$basearch/dag 
gpgcheck=1 
enabled=1 
gpgkey=http://dag.wieers.com/packages/RPM-GPG-KEY.dag.txt 
[root@onedari01 ~]# 
[root@onedari01 ~]# yum install geoip-devel

 3963  14/01/21 14:52:18 /usr/lib/fluent/ruby/bin/fluent-gem search -r fluent-plugin-geoip
 3964  14/01/21 14:52:29 /usr/lib/fluent/ruby/bin/fluent-gem install fluent-plugin-geoip

yumでのインストールに失敗したので設定してからやり直ししています。

■Fluentdの設定

[root@onedari01 ~]# cd /etc/td-agent/
[root@onedari01 td-agent]# vi td-agent.conf
<source>
  type tail_asis
  path /var/log/messages
  pos_file /tmp/test.pos
  tag one.dari01
</source>
<match one.dari01>
type copy
  <store>
    type parser
    add_prefix parsed
    format /^(?<time>[^ ]* *[^ ]* [^ ]*) (?<hostname>[^ ]*) (?<user>[^ ]*)\: "(?<ip>[^\"]*)" "(?<BUST>[^\"]*)" "(?<WASTE>[^\"]*)" "(?<HIP>[^\"]*)" (?<message>.*)$/
    time_format %b %e %H:%M:%S
    key_name message
  </store>
</match>
<match parsed.one.dari01>
type copy
  <store>
    type geoip
    geoip_lookup_key ip
    enable_key_country_code  geoip_country
    remove_tag_prefix parsed.
    add_tag_prefix es.
  </store>
</match>
<match es.one.dari01>
type copy
 <store>
  index_name adminpack
  type_name onedari
  type elasticsearch
  include_tag_key true
  tag_key @log_name
  host localhost
  port 9200
  logstash_format true
  flush_interval 3s
 </store>
</match>
[root@onedari01 td-agent]# service td-agent restart
Shutting down td-agent:                                    [  OK  ]
Starting td-agent:                                         [  OK  ]
[root@onedari01 td-agent]#

formatでログの形式を正規表現で指定しています。
format /^(?<time>[^ ]* *[^ ]* [^ ]*) (?<hostname>[^ ]*) ・・・・
ここがうまくできてないとログがでてきません。

■KIBANA3の設定

[root@onedari01 work]# wget https://download.elasticsearch.org/kibana/kibana/kibana-3.0.0milestone4.tar.gz
--2014-02-08 17:36:09--  https://download.elasticsearch.org/kibana/kibana/kibana-3.0.0milestone4.tar.gz
Resolving download.elasticsearch.org... 174.129.36.224, 54.225.135.194, 2406:da00:ff00::36e1:87c2, ...
Conneting to download.elasticsearch.org|174.129.36.224|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 991116 (968K) [application/octet-stream]
Saving to: `kibana-3.0.0milestone4.tar.gz'

100%[===========================================================================================================================>] 991,116      419K/s   in 2.3s

2014-02-08 17:36:12 (419 KB/s) - `kibana-3.0.0milestone4.tar.gz' saved [991116/991116]

これをApacheのドキュメントルートに設置すればOKです。

■確認
syslogにログを出力してみてKIBANAで表示されるか確認します。

[root@onedari01 logs]# logger \"202.11.122.22\" \"90\" \"53\" \"63\" \"Oh\"

適当にIPアドレスと適当な数字を入れています。
以下のコマンドでインデックスができているかを確認します。

[root@onedari01 logs]# curl http://localhost:9200/_aliases?pretty=1
{
"logstash-2014.02.08" : {
"aliases" : { }
}
}

logstash-2014.xx.xxというものが表示されればFluentdでログをとっていることがわかります。
表示されなければFluentdの正規表現を疑った方がいいです。
KIBANAでは一日ごとにインデックスを作成しているのでlogstash-YYYY.MM.DDというインデックスが
一日ごとにできていきます。

Kibana 3

IPアドレスは適当なものを入れていますが、JPとして識別されたようです。
KIBANAの表示で地図を指定すれば国に色がついてどこのIPアドレスか分かって面白いです。

今回はsyslogのメッセージを表示してみましたが、
apacheのアクセスログなんかを表示してみればいいですね。

以上