Kibana+ElasticSearch+Fluentdによるリアルタイムログ可視化の方法

Kibanaによるログ可視化の方法

はじめに

本ブログでは、サーバー運用監視やログの集積方法について取り上げて来ましたが、集積したログの可視化についてはあまり取り上げていません。そこで今回は、最近注目され人気が高まっているKibanaElasticSearchFluentdを用いたログの可視化方法について解説します。

time-based comparisons

make sense of your data

empower more team members

Kibanaとは

Kibanaは、米国Elasticsearch社が開発し、公開している検索エンジンElasticSearchをウェブから利用するためのウェブフロントエンドです。ElasticSearchは、Apache Lucenceをベースに開発された検索エンジンであり、Googleを始めとして多くの企業が利用しています。

4018-01

前提条件

構築に必要なサーバー要件および、パッケージは下記のとおりです。

  1. サーバー要件

    サーバー要件は、次のとおりです。

    サーバーKibanaサーバーKibanaクライアント
    ホスト名kibana-servertd-centostd-ubuntu
    IPアドレス192.168.0.50192.168.0.10192.168.0.20
    OSCentOS-6.5 x86_64 minimai CentOS-6.5 i386 minimaiubuntu-13.10 i386 server
    Apache2.2.15
    td-agentn/a0.10.41

  2. ダウンロードまたは、インストールするパッケージ

    ダウンロードまたは、インストールするパッケージは、次のとおりです。

    パッケージKibanaサーバーKibanaクライアント
    OpenJDK1.7.0n/a
    ElasticSearch1.0.0n/a
    Kibana3.0.0milestone5n/a
    fluent-plugin-elasticsearchn/a0.2.0

Kibanaサーバーのセットアップ

  1. 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!
    
  2. 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
    
    4018-04
    [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
    
  3. サービス起動と自動起動設定
    $ sudo service elasticsearch start
    $ sudo chkconfig elasticsearch on
    
    4018-06
  4. 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
    
    4018-07
  5. 以上で、Kibanaサーバーのセットアップは終了です。

    ブラウザで、下記のURLにアクセスすると、ダッシュボードが表示されます。

    http://192.168.0.50/kibana/
    
    4018-08

Kibanaクライアントのセットアップ

Kibanaクライアントをtd-centos,td-ubuntuの順にセットアップします。

td-centosのセットアップ

  1. 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
    
  2. 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>
    
    4018-11
  3. アクセス権の確認と設定

    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
    
  4. サービス起動と自動起動設定
    $ sudo service td-agent start
    $ sudo chkconfig td-agent on
    
    4018-14
  5. td-agentログ確認

    td-agentのログを確認し、エラーが無いか確認します。

    $ cat /var/log/td-agent/td-agent.log
    
    4018-15
  6. 以上で、td-centosクライアントのセットアップは終了です。

td-ubuntuのセットアップ

基本的なセットアップ方法は、td-centosと同一です。

  1. ElasticSearchプラグインのインストール
    $ sudo /usr/lib/fluent/ruby/bin/fluent-gem i fluent-plugin-elasticsearch --no-ri --no-rdoc
    
    4018-17
  2. td-agentの設定

    td-centosのセットアップで指定した内容のうち、下記の項目を修正します。

    path /var/log/apache2/access.log  # アクセスログのパス
    tag td-ubuntu.apache.access       # マッチしたログに付与する検索タグ
    
    4018-18
  3. アクセス権の確認と設定
    $ ls -ld /var/log/apache2
    $ ls -ld /var/log/apache2/access.log
    
    4018-19
    $ sudo chmod 0755 /var/log/apache2
    $ sudo chmod 0644 /var/log/apache2/access.log
    $ ls -ld /var/log/apache2/access.log
    
    4018-20
  4. サービス再起動

    Unbuntuでは、td-agentをインストールすると自動起動されますので、サービスを再起動します。

    $ sudo service td-agent restart
    
    4018-21
  5. td-agentログ確認
    $ cat /var/log/td-agent/td-agent.log
    
  6. 4018-22

    以上で、td-ubuntuクライアントのセットアップは終了です。

アクセスログの確認

ここまでの作業で、Kibanaサーバーとクライアントがセットアップできましたので、2台のクライアントにHTTPリクエストを実行して、ブラウザ上でログを確認します。
なお、HTTPリクエストはCygwinTerminal上にインストールしたApache2に含まれるab2(Apache2 Benchmark)コマンドを用いて行います。

  1. 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
    
  2. アクセスログの確認

    ブラウザに表示されたダッシュボードからLogstash Dashboardをクリックすると、アクセス状況が確認できます。

    4018-25 4018-26 4018-27 4018-28

    クライアントに指定したtagを検索ボックスに入力すると、クライアントごとのアクセス状況が確認できます。

まとめ

ここまで、Kibanaを用いてログを可視化する方法について解説しました。ElasticSearchは、今回ログ収集に使用したFluentdだけで無く、LogStashGraylog2など数多くのツールとの連携が可能です。本記事を参考に、サーバーログのリアルタイム監視と可視化を検討しては如何でしょうか。

Comments are closed.