Fluentd+ElasticSearchによるログ可視化の方法

2014年02月21日 23時17分

201402212317OELC00.png

はじめに

Fluentdによるログ収集システムの構築では、Fluentdを使ってログ収集システムを構築しましたが、収集したログを可視化することはできません。そこで今回は、Kibana+ElasticSearch+Fluentdを用いたログ可視化の方法を解説します。

Kibanaとは

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

前提条件

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

  1. 作業環境
    OSWindows 7 Ultimate 32bit
    CygwinSetup Version 2.831
    VirtualBox4.3.6 r91406
    Vagrant1.4.1
  2. サーバー要件
    サーバーKibanaサーバーKibanaクライアント
    ホスト名kibana-servertd-centostd-ubuntu
    IPアドレス192.168.0.50192.168.0.10192.168.0.20
    OSCentOS 6.5 x86_64 minimaiCentOS-6.5 i386 minimaiubuntu 13.10 i386 server
    Apache2.2.15
    td-agentn/a0.10.41
  3. 導入するパッケージ
    パッケージ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
    
    201402212317OELC01.png
    201402212317OELC02.png
  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
    
    201402212317OELC03.png
    201402212317OELC04.png
  3. サービス起動と自動起動設定
    $ sudo service elasticsearch start
    $ sudo chkconfig elasticsearch on
    
    201402212317OELC05.png
  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
    
    201402212317OELC06.png

    以上で、Kibanaサーバーのセットアップは終了です。

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

    http://192.168.0.50/kibana/
    
    201402212317OELC07.png

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
    
    201402212317OELC08.png
  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>
    
    201402212317OELC09.png
  3. アクセス権の確認と設定

    td-agentは、td-agentユーザーで起動されますので、アクセスするログによって読み込みに失敗することがありますので、入力するアクセスログのアクセス権を確認し、必要ならアクセス権を設定します。

    $ ls -ld /var/log/httpd
    $ ls -ld /var/log/httpd/access_log
    
    201402212317OELC10.png

    Otherに対してフォルダへのアクセス権が無いため、再設定します。

    $ sudo chmod 0755 /var/log/httpd
    $ ls -ld /var/log/httpd/access_log
    
    201402212317OELC11.png
  4. サービス起動と自動起動設定
    $ sudo service td-agent start
    $ sudo chkconfig td-agent on
    
    201402212317OELC12.png
  5. td-agentログ確認

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

    $ cat /var/log/td-agent/td-agent.log
    

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

td-ubuntuのセットアップ

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

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

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

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

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

    $ sudo service td-agent restart
    
    201402212317OELC17.png
  5. td-agentログ確認
    $ cat /var/log/td-agent/td-agent.log
    

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

アクセスログの確認

ここまでの作業で、Kibanaサーバーとクライアントがセットアップできましたので、2台のクライアントにHTTPリクエストを実行して、ブラウザ上でログを確認します。
なお、HTTPリクエストはCygwin上にインストールした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/
    
    201402212317OELC18.png
    201402212317OELC19.png
  2. アクセスログの確認

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

    201402212317OELC20.png
    201402212317OELC21.png

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

    201402212317OELC22.png
    201402212317OELC23.png