Logstashによるログ収集システムの構築

Logstashによるログ収集システムの構築

はじめに

以前の記事では、Fluentdによるログ収集システムの構築方法を解説しました。前回の記事でも取り上げたElasticSearchの開発元のElasticsearch社が推奨するLogstashによるログ収集システムの構築方法を解説します。

前提条件

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

  1. サーバー要件

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

    サーバーLogstashサーバーLogstashクライアント
    ホスト名logstash-serverlogstash-client
    IPアドレス10.0.2.15(eth0)
    192.168.0.50(eth1)
    10.0.2.15(eth0)
    192.168.0.30(eth1)
    OSCentOS 6.5 x86_64 minimal ubuntu-13.10 i386 server
    HDD8GB(SCSI)
    RAM512MB
    Apache2.2.15
    OpenJDK1.7.0

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

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

    パッケージLogstashサーバーLogstashクライアント
    ElasticSearch0.90.11n/a
    Kibana3.0.0milestone5n/a
    Redis2.8.6n/a
    Logstash1.3.3

システム構成

Logstashによるログ収集システムは、下記のサービスから構成されています。

サーバー要素役割
Logstashサーバー Kibanaelasticsearchが保存したログの検索を行う、ウエブインターフェース。
elasticsearch受信した各種ログを保存する。
IndexerBrokerが送信したログを受信し、elasticsearchに送信する。
BrokerShipperが送信したログを受信し、Indexerに送信する。
LogstashクライアントShipper収集したログをBrokerに送信する。

4019-01

サーバーセットアップ

公式ドキュメントに従ってKibana,elasticsearch,Indexder,Brokerをセットアップします。

  1. 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
    
    4019-02
  2. EstaticSearchのインストール

    公式サイトからCentOS用のRPMパッケージをダウンロードし、インストールします。

    $ wget -q --no-check-certificate https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-0.90.11.noarch.rpm
    $ sudo rpm -ivh elasticsearch-0.90.11.noarch.rpm
    $ rm -f elasticsearch-0.90.11.noarch.rpm
    
    4019-03

    出力されたログを確認します。

    $ cat /var/log/elasticsearch/elasticsearch.log
    
    [vagrant@logstash-server ~]$ cat /var/log/elasticsearch/elasticsearch.log
    [2014-02-26 14:35:59,173][INFO ][node                     ] [Ezekiel Sims] version[0.90.11], pid[3066], build[11da1ba/2014-02-03T15:27:39Z]
    [2014-02-26 14:35:59,174][INFO ][node                     ] [Ezekiel Sims] initializing ...
    [2014-02-26 14:35:59,186][INFO ][plugins                  ] [Ezekiel Sims] loaded [], sites []
    [2014-02-26 14:36:03,267][INFO ][node                     ] [Ezekiel Sims] initialized
    [2014-02-26 14:36:03,268][INFO ][node                     ] [Ezekiel Sims] starting ...
    [2014-02-26 14:36:03,470][INFO ][transport                ] [Ezekiel Sims] bound_address {inet[/0:0:0:0:0:0:0:0:9300]}, publish_address {inet[/10.0.2.15:9300]}
    [2014-02-26 14:36:06,625][INFO ][cluster.service          ] [Ezekiel Sims] new_master [Ezekiel Sims][CLCPsyjvQqu27CfbLHaSJg][inet[/10.0.2.15:9300]], reason: zen-disco-join (elected_as_master)
    [2014-02-26 14:36:06,718][INFO ][discovery                ] [Ezekiel Sims] elasticsearch/CLCPsyjvQqu27CfbLHaSJg
    [2014-02-26 14:36:06,759][INFO ][http                     ] [Ezekiel Sims] bound_address {inet[/0:0:0:0:0:0:0:0:9200]}, publish_address {inet[/10.0.2.15:9200]}
    [2014-02-26 14:36:06,760][INFO ][node                     ] [Ezekiel Sims] started
    [2014-02-26 14:36:06,796][INFO ][gateway                  ] [Ezekiel Sims] recovered [0] indices into cluster_state
    
  3. Broker(Redis)のインストール

    公式サイトから、アーカイブをダウンロードし、ビルドします。

    $ curl -sL http://download.redis.io/releases/redis-2.8.6.tar.gz | tar zxf -
    $ cd redis-2.8.6 && make 1> /dev/null 2>& 1
    $ sudo make install
    $ make clean 1> /dev/null 2>& 1
    
    4019-05
  4. Broker設定

    redis.confを参考にして、下記の内容の設定ファイルを作成します。

    $ sudo vi /etc/broker.conf
    
    daemonize yes                 # デーモン起動
    port 6379                     # 待ち受けポート
    maxmemory 128mb               # 最大使用メモリ
    maxclients 100                # 最大接続クライアント(Indexer)数
    pidfile /var/run/broker.pid   # PIDファイル
    logfile /var/log/broker.log   # ログファイル
    
    4019-06

    なお、#以降のコメントは設定内容をわかり易く記述したものですので、作成する設定ファイルには記述しないで下さい。

  5. システムパラメータの変更
    $ echo "vm.overcommit_memory=1" | sudo tee -a /etc/sysctl.conf
    $ sudo sysctl vm.overcommit_memory=1
    
    4019-07
  6. 自動起動スクリプト作成

    自動起動スクリプトのひな型を参考にして、起動スクリプトを作成します。

    $ sudo cp /usr/share/doc/initscripts-9.03.40/sysvinitfiles /etc/init.d/broker
    $ sudo chmod 0755 /etc/init.d/broker
    $ sudo vi /etc/init.d/broker
    
    4019-08 4019-09 4019-10
  7. サービス起動と自動起動設定
    $ sudo chkconfig --add /etc/init.d/broker
    $ chkconfig broker --list
    $ sudo service broker start
    
    4019-11
  8. ログ確認
    $ cat /var/log/broker.log
    
    4019-12
  9. Indexer(logstash)のインストール

    公式サイトから、JARファイルをダウンロードします。

    $ sudo mkdir -p /opt/logstash
    $ sudo curl -sLo /opt/logstash/logstash-1.3.3-flatjar.jar https://download.elasticsearch.org/logstash/logstash/logstash-1.3.3-flatjar.jar
    
    4019-13
  10. Indexer設定

    下記の内容の設定ファイルを作成します。

    $ sudo vi /etc/indexer.conf
    
    input {
      redis {
        host => "127.0.0.1"
        data_type => "list"
        key => "logstash"
        codec => json
      }
    }
    output {
      stdout { debug => true debug_format => "json"}
    
      elasticsearch {
        host => "127.0.0.1"
      }
    }
    
    4019-14
  11. 自動起動スクリプト作成

    自動起動スクリプトのひな型を参考にして、起動スクリプトを作成します。

    $ sudo cp /usr/share/doc/initscripts-9.03.40/sysvinitfiles /etc/init.d/indexer
    $ sudo chmod 0755 /etc/init.d/indexer
    $ sudo vi /etc/init.d/indexer
    
    4019-15 4019-16 4019-17
  12. 設定ファイルの作成

    Indexer起動時に読み込む、設定ファイルを作成します。

    $ sudo vi /etc/sysconfig/indexer
    
    conffile=${conffile-/etc/indexer.conf}
    jarfile=${jarfile-/opt/logstash/logstash-1.3.3-flatjar.jar}
    
    4019-18
  13. サービス起動と自動起動設定
    $ sudo chkconfig --add /etc/init.d/indexer
    $ chkconfig indexer --list
    $ sudo service indexer start
    
    4019-19
  14. ログ確認

    Indexerの起動ログを確認します。

    $ cat /var/log/indexer.log
    
    4019-20

    Indexerが正常に起動すると、elasticsearchのログにクライアントが追加された旨のログが出力されます。

    $ cat /var/log/elasticsearch/elasticsearch.log
    
    4019-21

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

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

クライアントでは、Shipperをセットアップします。

  1. Shipper(logstash)のインストール

    公式サイトから、JARファイルをダウンロードします。

    $ sudo mkdir -p /opt/logstash
    $ sudo curl -sLo /opt/logstash/logstash-1.3.3-flatjar.jar https://download.elasticsearch.org/logstash/logstash/logstash-1.3.3-flatjar.jar
    
    4019-22
  2. Shipper設定

    下記の内容の設定ファイルを作成します。

    $ sudo vi /etc/shipper.conf
    
    input {
      file {
        type => "apache"
    #   path => "/var/log/httpd/access_log"    # for CentOS
        path => "/var/log/apache2/access.log"  # for Ubuntu
      }
    }
    filter {
      if [type] == "apache" {
        grok {
          match => { "message" => "%{COMBINEDAPACHELOG}" }
        }
      }
    }
    output {
      stdout { codec => rubydebug }
      redis { host => "192.168.0.50" data_type => "list" key => "logstash" }
    }
    
    4019-23
  3. 自動起動スクリプト作成

    自動起動スクリプトのひな型を参考にして、起動スクリプトを作成します。

    $ sudo cp /etc/init.d/skeleton /etc/init.d/shipper
    $ sudo chmod 0755 /etc/init.d/shipper
    $ sudo vi /etc/init.d/shipper
    
    4019-24 4019-25 4019-26 4019-27 4019-28
  4. サービス起動と自動起動設定
    $ sudo /usr/lib/insserv/insserv shipper 1> /dev/null 2>& 1
    $ ls /etc/*.d/*shipper
    $ sudo service shipper start
    
    4019-29
  5. ログ確認

    Shipperの起動ログを確認します。

    $ cat /var/log/shipper.log
    
    4019-30

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

動作確認

システムのセットアップが全て終了しましたので、動作確認を行います。

  1. curlによるHTTPアクセス

    CygwinTerminalから、クライアントに対してHTTPアクセスを行います。

    $ curl http://192.168.0.30/
    
    4019-31

    アクセスすると、Shipper→Broker→Indexer→elasticsearchの順にログが出力されますので、データが書き込まれているか確認できます。

    4019-32 4019-33 4019-34
  2. ab2によるHTTPアクセス

    同様に、ab2(Apache Benchimark)コマンドを用いてアクセスします。

    $ ab2 -n 10 -c 10 http://192.168.0.30/
    
    4019-36
  3. Kibanaよるデータ確認

    ブラウザで下記のサイトにアクセスし、(Logstash Dashboard)をクリックすると、グラグが表示されます。

    http://192.168.0.50/kibana/
    
    4019-40 4019-41

まとめ

ここまで、Logstashによるログ収集システムの構築方法を解説しました。Logstashは、設定ファイルの記述しやすさと、公式サイト上で公開されている豊富なドキュメントと設定例を用いて、簡単にシステムを構築できます。本記事を参考にして、情報システムのログ管理を再検討しては如何でしょうか。

Comments are closed.