はじめに
本ブログでは、サーバー運用監視やログの集積方法について取り上げて来ましたが、集積したログの可視化についてはあまり取り上げていません。そこで今回は、最近注目され人気が高まっているKibana+ElasticSearch+Fluentdを用いたログの可視化方法について解説します。
Kibanaとは
Kibanaは、米国Elasticsearch社が開発し、公開している検索エンジンElasticSearchをウェブから利用するためのウェブフロントエンドです。ElasticSearchは、Apache Lucenceをベースに開発された検索エンジンであり、Googleを始めとして多くの企業が利用しています。
前提条件
構築に必要なサーバー要件および、パッケージは下記のとおりです。
- サーバー要件
サーバー要件は、次のとおりです。
サーバー Kibanaサーバー Kibanaクライアント ホスト名 kibana-server td-centos td-ubuntu IPアドレス 192.168.0.50 192.168.0.10 192.168.0.20 OS CentOS-6.5 x86_64 minimai CentOS-6.5 i386 minimai ubuntu-13.10 i386 server Apache 2.2.15 ← ← td-agent n/a 0.10.41 ← - ダウンロードまたは、インストールするパッケージ
ダウンロードまたは、インストールするパッケージは、次のとおりです。
パッケージ Kibanaサーバー Kibanaクライアント OpenJDK 1.7.0 n/a ElasticSearch 1.0.0 n/a Kibana 3.0.0milestone5 n/a fluent-plugin-elasticsearch n/a 0.2.0
Kibanaサーバーのセットアップ
- OpenJDKのインストール
$ sudo yum -y install java-1.7.0-openjdk
[vagrant@kibana-server ~]$ sudo yum -y install java-1.7.0-openjdk Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: www.ftp.ne.jp * extras: www.ftp.ne.jp * updates: www.ftp.ne.jp Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package java-1.7.0-openjdk.x86_64 1:1.7.0.51-2.4.4.1.el6_5 will be installed --> Processing Dependency: libjpeg = 6b for package: 1:java-1.7.0-openjdk-1.7.0.51-2.4.4.1.el6_5.x86_64
libXau.x86_64 0:1.0.6-4.el6 libXext.x86_64 0:1.3.1-2.el6 libXfont.x86_64 0:1.4.5-3.el6_5 libXi.x86_64 0:1.6.1-3.el6 libXrender.x86_64 0:0.9.7-2.el6 libXtst.x86_64 0:1.2.1-2.el6 libasyncns.x86_64 0:0.8-1.1.el6 libfontenc.x86_64 0:1.0.5-2.el6 libjpeg-turbo.x86_64 0:1.2.1-3.el6_5 libogg.x86_64 2:1.1.4-2.1.el6 libpng.x86_64 2:1.2.49-1.el6_2 libsndfile.x86_64 0:1.0.20-5.el6 libvorbis.x86_64 1:1.2.3-4.el6_2.1 libxcb.x86_64 0:1.8.1-1.el6 pulseaudio-libs.x86_64 0:0.9.21-14.el6_3 rhino.noarch 0:1.7-0.7.r2.2.el6 ttmkfdir.x86_64 0:3.0.9-32.1.el6 tzdata-java.noarch 0:2013i-2.el6 xorg-x11-font-utils.x86_64 1:7.2-11.el6 xorg-x11-fonts-Type1.noarch 0:7.2-9.1.el6 Complete!
- ElasticSearchのインストール
$ wget -q --no-check-certificate https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.0.0.noarch.rpm $ sudo rpm -ivh elasticsearch-1.0.0.noarch.rpm $ rm -f elasticsearch-1.0.0.noarch.rpm
[vagrant@kibana-server ~]$ sudo rpm -ivh elasticsearch-1.0.0.noarch.rpm 準備中... ########################################### [100%] 1:elasticsearch ########################################### [100%] ### NOT starting on installation, please execute the following statements to configure elasticsearch to start automatically using chkconfig sudo /sbin/chkconfig --add elasticsearch ### You can start elasticsearch by executing sudo service elasticsearch start [vagrant@kibana-server ~]$ rm -f elasticsearch-1.0.0.noarch.rpm
- サービス起動と自動起動設定
$ sudo service elasticsearch start $ sudo chkconfig elasticsearch on
- Kibanaのインストール
公式サイトから、最新のアーカイブをダウンロードし、ApacheのDocumentRootに展開します。
$ curl -sL https://download.elasticsearch.org/kibana/kibana/kibana-3.0.0milestone5.tar.gz | sudo tar zxf - -C /var/www/html $ sudo mv /var/www/html/kibana-3.0.0milestone5 /var/www/html/kibana
以上で、Kibanaサーバーのセットアップは終了です。
ブラウザで、下記のURLにアクセスすると、ダッシュボードが表示されます。
http://192.168.0.50/kibana/
Kibanaクライアントのセットアップ
Kibanaクライアントをtd-centos,td-ubuntuの順にセットアップします。
td-centosのセットアップ
- ElasticSearchプラグインのインストール
クライアントにインストールされたtd-agentは、ruby上で起動されますので、インストールされたruby環境にプラグインをインストールします。
$ sudo /usr/lib/fluent/ruby/bin/fluent-gem i fluent-plugin-elasticsearch --no-ri --no-rdoc
[vagrant@td-centos ~]$ sudo /usr/lib/fluent/ruby/bin/fluent-gem i fluent-plugin-elasticsearch --no-ri --no-rdoc Fetching: fluent-plugin-elasticsearch-0.2.0.gem (100%) Fetching: sigdump-0.2.2.gem (100%) Successfully installed fluent-plugin-elasticsearch-0.2.0 Successfully installed sigdump-0.2.2 2 gems installed
- td-agentの設定
Apacheのアクセスログをtailプラグインを用いて監視し、イベントタグを付与したログをElasticSearchに送信します。
matchディレクティブに指定したlogstash_formatは、ElasticSearchが推奨するログ収集ツールであるLogStashの互換ログとしてログを送信するために指定します。
また、tag_keyでは、@log_nameを指定しています。
これにより、ElasticSearchに送信したログから、sourceディレクティブで指定したtagの設定値を用いて、検索することができます。$ sudo vi /etc/td-agent/td-agent.conf
# # Apache2アクセスログファイルを入力イベントとして定義 # <source> type tail # 入力プラグイン(tail) path /var/log/httpd/access_log # アクセスログのパス tag td-centos.apache.access # マッチしたログに付与する検索タグ format apache2 # ログ検索書式(apache2) # ログ読み込み位置記録ファイル pos_file /var/log/td-agent/httpd-access.log.pos </source> # # ソースタグにマッチするログをElasticSearchに送信する # <match *.apache.*> type elasticsearch # 出力プラグイン指定(elasticsearch) include_tag_key true # tagキーを使用する tag_key @log_name # tagキーを使用して絞り込み検索を行う host 192.168.0.50 # 送信先サーバーアドレス port 9200 # サーバー待ち受けポート logstash_format true # LogStash形式のログを送信 flush_interval 10s # ログ送信間隔(10秒) </match>
- アクセス権の確認と設定
td-agentは、td-agentユーザーで起動されますので、アクセスするログによって読み込みに失敗することがありますので、入力するアクセスログのアクセス権を確認し、必要ならアクセス権を設定します。
$ ls -ld /var/log/httpd $ ls -ld /var/log/httpd/access_log
[vagrant@td-centos ~]$ ls -ld /var/log/httpd drwx------ 2 root root 4096 2月 21 10:07 2014 /var/log/httpd/ [vagrant@td-centos ~]$ ls -ld /var/log/httpd/access_log ls: cannot access /var/log/httpd/access_log: 許可がありません
Otherに対してフォルダへのアクセス権が無いため、再設定します。
$ sudo chmod 0755 /var/log/httpd $ ls -ld /var/log/httpd/access_log
[vagrant@td-centos ~]$ sudo chmod 0755 /var/log/httpd [vagrant@td-centos ~]$ ls -ld /var/log/httpd/access_log -rw-r--r-- 1 root root 0 2月 21 10:07 2014 /var/log/httpd/access_log
- サービス起動と自動起動設定
$ sudo service td-agent start $ sudo chkconfig td-agent on
- td-agentログ確認
td-agentのログを確認し、エラーが無いか確認します。
$ cat /var/log/td-agent/td-agent.log
以上で、td-centosクライアントのセットアップは終了です。
td-ubuntuのセットアップ
基本的なセットアップ方法は、td-centosと同一です。
- ElasticSearchプラグインのインストール
$ sudo /usr/lib/fluent/ruby/bin/fluent-gem i fluent-plugin-elasticsearch --no-ri --no-rdoc
- td-agentの設定
td-centosのセットアップで指定した内容のうち、下記の項目を修正します。
path /var/log/apache2/access.log # アクセスログのパス tag td-ubuntu.apache.access # マッチしたログに付与する検索タグ
- アクセス権の確認と設定
$ ls -ld /var/log/apache2 $ ls -ld /var/log/apache2/access.log
$ sudo chmod 0755 /var/log/apache2 $ sudo chmod 0644 /var/log/apache2/access.log $ ls -ld /var/log/apache2/access.log
- サービス再起動
Unbuntuでは、td-agentをインストールすると自動起動されますので、サービスを再起動します。
$ sudo service td-agent restart
- td-agentログ確認
$ cat /var/log/td-agent/td-agent.log
以上で、td-ubuntuクライアントのセットアップは終了です。
アクセスログの確認
ここまでの作業で、Kibanaサーバーとクライアントがセットアップできましたので、2台のクライアントにHTTPリクエストを実行して、ブラウザ上でログを確認します。
なお、HTTPリクエストはCygwinTerminal上にインストールしたApache2に含まれるab2(Apache2 Benchmark)コマンドを用いて行います。
- HTTPリクエストの実行
td-centosおよび、td-ubuntuに対して同時接続数100、リクエスト数をそれぞれ20,000、10,000回としてリクエストを実行します。
$ ab2 -n 20000 -c 100 http://192.168.0.10/ $ ab2 -n 10000 -c 100 http://192.168.0.20/
punio@PAPA ~ $ ab2 -n 20000 -c 100 http://192.168.0.10/ This is ApacheBench, Version 2.3 < $Revision: 655654 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking 192.168.0.10 (be patient) Completed 2000 requests Completed 4000 requests Completed 6000 requests Completed 8000 requests Completed 10000 requests Completed 12000 requests Completed 14000 requests Completed 16000 requests Completed 18000 requests Completed 20000 requests Finished 20000 requests
$ ab2 -n 10000 -c 100 http://192.168.0.20/ This is ApacheBench, Version 2.3 < $Revision: 655654 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking 192.168.0.20 (be patient) Completed 1000 requests Completed 2000 requests Completed 3000 requests Completed 4000 requests Completed 5000 requests Completed 6000 requests Completed 7000 requests Completed 8000 requests Completed 9000 requests Completed 10000 requests Finished 10000 requests
- アクセスログの確認
ブラウザに表示されたダッシュボードからLogstash Dashboardをクリックすると、アクセス状況が確認できます。
クライアントに指定したtagを検索ボックスに入力すると、クライアントごとのアクセス状況が確認できます。
まとめ
ここまで、Kibanaを用いてログを可視化する方法について解説しました。ElasticSearchは、今回ログ収集に使用したFluentdだけで無く、LogStashやGraylog2など数多くのツールとの連携が可能です。本記事を参考に、サーバーログのリアルタイム監視と可視化を検討しては如何でしょうか。