はじめに
以前の記事では、Fluentdによるログ収集システムの構築方法を解説しました。前回の記事でも取り上げたElasticSearchの開発元のElasticsearch社が推奨するLogstashによるログ収集システムの構築方法を解説します。
前提条件
構築に必要なサーバー要件および、パッケージは下記のとおりです。
- サーバー要件
サーバー要件は、次のとおりです。
サーバー Logstashサーバー Logstashクライアント ホスト名 logstash-server logstash-client IPアドレス 10.0.2.15(eth0)
192.168.0.50(eth1)10.0.2.15(eth0)
192.168.0.30(eth1)OS CentOS 6.5 x86_64 minimal ubuntu-13.10 i386 server HDD 8GB(SCSI) ← RAM 512MB ← Apache 2.2.15 ← OpenJDK 1.7.0 ← - ダウンロードまたは、インストールするパッケージ
ダウンロードまたは、インストールするパッケージは、次のとおりです。
パッケージ Logstashサーバー Logstashクライアント ElasticSearch 0.90.11 n/a Kibana 3.0.0milestone5 n/a Redis 2.8.6 n/a Logstash 1.3.3 ←
システム構成
Logstashによるログ収集システムは、下記のサービスから構成されています。
サーバー | 要素 | 役割 |
---|---|---|
Logstashサーバー | Kibana | elasticsearchが保存したログの検索を行う、ウエブインターフェース。 |
elasticsearch | 受信した各種ログを保存する。 | |
Indexer | Brokerが送信したログを受信し、elasticsearchに送信する。 | |
Broker | Shipperが送信したログを受信し、Indexerに送信する。 | |
Logstashクライアント | Shipper | 収集したログをBrokerに送信する。 |
サーバーセットアップ
公式ドキュメントに従ってKibana,elasticsearch,Indexder,Brokerをセットアップします。
- 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
- 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
出力されたログを確認します。
$ 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
- 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
- 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 # ログファイル
なお、#以降のコメントは設定内容をわかり易く記述したものですので、作成する設定ファイルには記述しないで下さい。
- システムパラメータの変更
$ echo "vm.overcommit_memory=1" | sudo tee -a /etc/sysctl.conf $ sudo sysctl vm.overcommit_memory=1
- 自動起動スクリプト作成
自動起動スクリプトのひな型を参考にして、起動スクリプトを作成します。
$ 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
- サービス起動と自動起動設定
$ sudo chkconfig --add /etc/init.d/broker $ chkconfig broker --list $ sudo service broker start
- ログ確認
$ cat /var/log/broker.log
- 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
- 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" } }
- 自動起動スクリプト作成
自動起動スクリプトのひな型を参考にして、起動スクリプトを作成します。
$ 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
- 設定ファイルの作成
Indexer起動時に読み込む、設定ファイルを作成します。
$ sudo vi /etc/sysconfig/indexer
conffile=${conffile-/etc/indexer.conf} jarfile=${jarfile-/opt/logstash/logstash-1.3.3-flatjar.jar}
- サービス起動と自動起動設定
$ sudo chkconfig --add /etc/init.d/indexer $ chkconfig indexer --list $ sudo service indexer start
- ログ確認
Indexerの起動ログを確認します。
$ cat /var/log/indexer.log
Indexerが正常に起動すると、elasticsearchのログにクライアントが追加された旨のログが出力されます。
$ cat /var/log/elasticsearch/elasticsearch.log
以上で、サーバーセットアップは終了です。
クライアントセットアップ
クライアントでは、Shipperをセットアップします。
- 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
- 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" } }
- 自動起動スクリプト作成
自動起動スクリプトのひな型を参考にして、起動スクリプトを作成します。
$ sudo cp /etc/init.d/skeleton /etc/init.d/shipper $ sudo chmod 0755 /etc/init.d/shipper $ sudo vi /etc/init.d/shipper
- サービス起動と自動起動設定
$ sudo /usr/lib/insserv/insserv shipper 1> /dev/null 2>& 1 $ ls /etc/*.d/*shipper $ sudo service shipper start
- ログ確認
Shipperの起動ログを確認します。
$ cat /var/log/shipper.log
以上で、クライアントセットアップは終了です。
動作確認
システムのセットアップが全て終了しましたので、動作確認を行います。
- curlによるHTTPアクセス
CygwinTerminalから、クライアントに対してHTTPアクセスを行います。
$ curl http://192.168.0.30/
アクセスすると、Shipper→Broker→Indexer→elasticsearchの順にログが出力されますので、データが書き込まれているか確認できます。
- ab2によるHTTPアクセス
同様に、ab2(Apache Benchimark)コマンドを用いてアクセスします。
$ ab2 -n 10 -c 10 http://192.168.0.30/
- Kibanaよるデータ確認
ブラウザで下記のサイトにアクセスし、(Logstash Dashboard)をクリックすると、グラグが表示されます。
http://192.168.0.50/kibana/
まとめ
ここまで、Logstashによるログ収集システムの構築方法を解説しました。Logstashは、設定ファイルの記述しやすさと、公式サイト上で公開されている豊富なドキュメントと設定例を用いて、簡単にシステムを構築できます。本記事を参考にして、情報システムのログ管理を再検討しては如何でしょうか。