はじめに
以前の記事では、Fluentdによるログ収集システムの構築方法を解説しました。前回の記事でも取り上げたElasticSearchの開発元のElasticsearch社が推奨するLogstashによるログ収集システムの構築方法を解説します。
前提条件
構築に必要なサーバー要件および、パッケージは下記のとおりです。
1.サーバー要件
サーバー要件は、次のとおりです。
| サーバー | 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 | ← |
2.ダウンロードまたは、インストールするパッケージ
ダウンロードまたは、インストールするパッケージは、次のとおりです。
| パッケージ | 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をセットアップします。
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

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

出力されたログを確認します。
$ 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

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 # ログファイル

なお、#以降のコメントは設定内容をわかり易く記述したものですので、作成する設定ファイルには記述しないで下さい。
5.システムパラメータの変更
$ echo "vm.overcommit_memory=1" | sudo tee -a /etc/sysctl.conf $ sudo sysctl vm.overcommit_memory=1

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



7.サービス起動と自動起動設定
$ sudo chkconfig --add /etc/init.d/broker $ chkconfig broker --list $ sudo service broker start

8.ログ確認
$ cat /var/log/broker.log

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

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"
}
}

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



12.設定ファイルの作成
Indexer起動時に読み込む、設定ファイルを作成します。
$ sudo vi /etc/sysconfig/indexer
conffile=${conffile-/etc/indexer.conf}
jarfile=${jarfile-/opt/logstash/logstash-1.3.3-flatjar.jar}

13.サービス起動と自動起動設定
$ sudo chkconfig --add /etc/init.d/indexer $ chkconfig indexer --list $ sudo service indexer start

14.ログ確認
Indexerの起動ログを確認します。
$ cat /var/log/indexer.log

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

以上で、サーバーセットアップは終了です。
クライアントセットアップ
クライアントでは、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

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" }
}

3.自動起動スクリプト作成
自動起動スクリプトのひな型を参考にして、起動スクリプトを作成します。
$ sudo cp /etc/init.d/skeleton /etc/init.d/shipper $ sudo chmod 0755 /etc/init.d/shipper $ sudo vi /etc/init.d/shipper





4.サービス起動と自動起動設定
$ sudo /usr/lib/insserv/insserv shipper 1> /dev/null 2>& 1 $ ls /etc/*.d/*shipper $ sudo service shipper start

5.ログ確認
Shipperの起動ログを確認します。
$ cat /var/log/shipper.log

以上で、クライアントセットアップは終了です。
動作確認
システムのセットアップが全て終了しましたので、動作確認を行います。
1.curlによるHTTPアクセス
CygwinTerminalから、クライアントに対してHTTPアクセスを行います。
$ curl http://192.168.0.30/

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



2.ab2によるHTTPアクセス
同様に、ab2(Apache Benchimark)コマンドを用いてアクセスします。
$ ab2 -n 10 -c 10 http://192.168.0.30/

3.Kibanaよるデータ確認
ブラウザで下記のサイトにアクセスし、(Logstash Dashboard)をクリックすると、グラグが表示されます。
http://192.168.0.50/kibana/


まとめ
ここまで、Logstashによるログ収集システムの構築方法を解説しました。Logstashは、設定ファイルの記述しやすさと、公式サイト上で公開されている豊富なドキュメントと設定例を用いて、簡単にシステムを構築できます。本記事を参考にして、情報システムのログ管理を再検討しては如何でしょうか。
本ブログは、Git / Subversion のクラウド型ホスティングサービス「tracpath(トラックパス)」を提供している株式会社オープングルーヴが運営しています。
開発の効率化をしたい!もっと便利なツールを使いたい!そんなお悩みをtracpathで解決!
「tracpath(トラックパス)」は、企業内の情報システム部門や、ソフトウェア開発・アプリケーション開発チームに対して、開発の効率化を支援し、品質向上を実現します。
さらに、システム運用の効率化・自動化支援サービスも提供しています。
”つくる情熱を支えるサービス”を提供し、まるで専属のインフラエンジニアのように、あなたのチームを支えていきます。



















No Comments