はじめに
Logstash+ElasticSearchによるログ可視化の方法では、Logstashをログ収集サービスとして使いました。今回は、ログ収集サービスとして、Graylog2を用いたログ可視化の方法を解説します。
2014年03月03日 22時16分
Logstash+ElasticSearchによるログ可視化の方法では、Logstashをログ収集サービスとして使いました。今回は、ログ収集サービスとして、Graylog2を用いたログ可視化の方法を解説します。
Graylog2は、ドイツのTORCH社が開発するログ集中管理システムです。 Graylog2は、TCP/UDPを使ったログ集積を行うSplunkと同等の機能を持つ管理システムですが、Splunkが商用ソフトウエアであるのに対し、Graylog2は、オープンソースで提供されています。
構築に必要なサーバー要件および、導入パッケージは下記のとおりです。
OS | Windows 7 Ultimate 32bit |
Cygwin | Setup Version 2.831 |
VirtualBox | 4.3.6 r91406 |
Vagrant | 1.4.1 |
サーバー | Graylog2サーバー | Graylog2クライアント |
---|---|---|
ホスト名 | graylog2-server | graylog2-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 | CentOS 6.5 i386 minimal |
HDD | 8GB(SCSI) | |
RAM | 1024MB | 512MB |
Apache | 2.2.15 | |
OpenJDK | 1.7.0 | n/a |
ElasticSearch | 0.90.11 | |
mongo-10gen-server | 2.4.9 | |
mongo-10gen | 2.4.9 | |
その他のパッケージ | wget git openssl-devel java-1.7.0-openjdk-devel |
パッケージ | Graylog2サーバー | Graylog2クライアント |
---|---|---|
Ruby | 2.1.1 | n/a |
graylog2-server | 0.20.1 | |
graylog2-web | 0.20.1 | |
pwgen | 2.06 | |
perl-Digest-SHA | 5.47 |
Graylog2サーバーでは、rubyのバージョン1.9以上が必要ですが、CentOSの標準リポジトリからインストール可能なrubyのバージョンが1.8.7のため、2.1.1をインストールします。
$ git clone git://github.com/sstephenson/rbenv.git ~/.rbenv $ git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build $ sudo ~/.rbenv/plugins/ruby-build/bin/ruby-build 2.1.1 /usr
$ ruby -v && gem -v $ sudo gem i bundle --no-ri --no-rdoc
elasticsearchおよび、graylog2はJava VM上で動作するため、実メモリ以上のメモリを確保できるようにシステムパラメータを変更します。
$ echo "vm.overcommit_memory=1" | sudo tee -a /etc/sysctl.conf $ sudo sysctl vm.overcommit_memory=1
クラスター名および、ノードのユニキャスト検索に必要なIPアドレスを設定します。
$ sudo vi /etc/elasticsearch/elasticsearch.yml
cluster.name: graylog2 discovery.zen.ping.multicast.enabled: false discovery.zen.ping.unicast.hosts: ["127.0.0.1", "192.168.0.50"]
設定が終了したら、elasticsearchを再起動します。
$ sudo service elasticsearch restart
指定したクラスター名でログが生成されます。
$ cat /var/log/elasticsearch/graylog2.log
サーバーがアクセスするデータベースおよび、MongoDBの管理者ユーザーとGraylog2のユーザーを作成します。
$ mongo
mongoシェルが起動したら、下記のコマンドを実行します。
> use admin > db.addUser('admin','admin123') > db.auth('admin','admin123') > use graylog2 > db.addUser('loguser','loguser123') > db.auth('loguser','loguser123') > exit
jaxxstorm氏のサイトから、CentOS用のパッケージをインストールします。
$ sudo rpm -ivh https://github.com/jaxxstorm/graylog2-server-rpm/releases/download/0.20.1/graylog2-server-0.20.1-1.el6.noarch.rpm
EPELリポジトリから、pwgenをインストールします。
$ sudo rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/pwgen-2.06-5.el6.x86_64.rpm
graylog2-serverの設定に必要なシークレットパスワードを作成します。
$ pwgen -s 64 1
CentOSにインストールされているsha1sumは、SHA-1のハッシュ値しか計算できないため、SHA-256が計算できるshasumを標準リポジトリからインストールします。
$ sudo yum -q -y install perl-Digest-SHA
設定ファイルに指定するadminユーザーのパスワードハッシュ値(SHA-256)を計算します。
$ echo -n password | shasum -a 256
graylog2サーバーを設定します。
password_secretおよび、root_password_sha2には、先ほど算出した値を設定して下さい。
また、elasticsearch_max_docs_per_indexおよび、elasticsearch_max_number_of_indicesのデフォルト値は、実運用では問題ありませんが、動作確認を行うには大きすぎるため変更しています。
$ sudo vi /etc/graylog2/server.conf
node_id_file = /etc/graylog2/server-node-id password_secret = S7O7MDm5eZJnqwXM3r2JVsA9fqQz3v1NpbGUpMg59mKhzs01dYe9sUNX7xUMAd7g root_password_sha2 = 5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8 rest_transport_uri = http://127.0.0.1:12900/ #elasticsearch_max_docs_per_index = 20000000 elasticsearch_max_docs_per_index = 5 #elasticsearch_max_number_of_indices = 20 elasticsearch_max_number_of_indices = 2 elasticsearch_shards = 1 elasticsearch_cluster_name = graylog2 #elasticsearch_node_data = true elasticsearch_transport_tcp_port = 9350 elasticsearch_discovery_zen_ping_multicast_enabled = false elasticsearch_discovery_zen_ping_unicast_hosts = 127.0.0.1:9300 mongodb_useauth = true mongodb_user = loguser mongodb_password = loguser123
設定が終了したら、コンソール上で動作確認します。
$ sudo java -jar /opt/graylog2/server/graylog2-server.jar -f /etc/graylog2/server.conf
graylog2Webインターフェースで入力ソースを指定する際、1024以下のポート番号にアクセスする必要があるため、起動ユーザーをデフォルトのgraylog2からrootに変更します。
$ sudo vi /etc/sysconfig/graylog2-server
GL_USER=root
graylog2-serverを起動します。
$ sudo service graylog2-server start
起動ログを確認します。
$ cat /var/log/graylog2/server.log
$ sudo rpm -ivh https://github.com/jaxxstorm/graylog2-web-rpm/releases/download/0.20.1/graylog2-web-0.20.1-1.el6.noarch.rpm
application.secretにserver.confで指定した、password_secretと同じ値を設定します。
$ sudo vi /etc/graylog2/web.conf
graylog2-server.uris="http://127.0.0.1:12900/" application.secret="S7O7MDm5eZJnqwXM3r2JVsA9fqQz3v1NpbGUpMg59mKhzs01dYe9sUNX7xUMAd7g" timezone="Asia/Tokyo"
設定が終了したら、コンソール上でWeb-Interfaceを起動します。
$ sudo /opt/graylog2/web/bin/graylog2-web-interface -Dconfig.file=/etc/graylog2/web.conf
起動したら、ブラウザで下記のサイトにアクセスして動作確認します。
http://192.168.0.50:9000/
ログインに必要なUsernameおよび、Passwordは、server.conf内で指定したユーザー名とパスワードを使用します。
graylog2-webを起動します。
$ sudo service graylog2-web start
起動ログを確認します。
cat /var/log/graylog2/web.log
インストールしたgraylog2-serverおよび、graylog2-webの起動スクリプトには、起動優先度および、停止優先度が指定されていないため、graylog2-serverのブート時にエラーが発生します。このため、起動スクリプトに優先度を指定します。
$ sudo vi /etc/rc.d/init.d/graylog2-server /etc/rc.d/init.d/graylog2-web
各々のスクリプトに、下記の行を追加します。
# chkconfig: 2345 90 15 # chkconfig: 2345 95 15
登録済みの起動スクリプトを一旦削除し、修正した起動スクリプトを登録します。
$ sudo chkconfig --del graylog2-server $ sudo chkconfig --del graylog2-web $ sudo chkconfig --add graylog2-server $ sudo chkconfig --add graylog2-web
再登録後、サーバーを再起動してブートログを確認すると、graylog2-serverおよび、graylog2-webが最後に起動されたことが確認できます。
$ cat /var/log/boot.log
以上で、サーバーセットアップは終了です。