Ubuntu 14.04にGraylog2をインストールしてログを集中管理する方法
紹介
このチュートリアルでは、Graylog2(v0.20.2)のインストールと、システムのsyslogを集中管理するための設定を行います。Graylog2は、SSHログインや異常活動の監視からアプリケーションのデバッグまで、多くのユースケースを持つ強力なログ管理および分析ツールです。これは、Elasticsearch、Java、MongoDB、およびScalaに基づいています。
注意: このチュートリアルは、古いバージョンのGraylog2に関するものです。新しいバージョンは、こちらで入手できます: Ubuntu 14.04にGraylog 1.xをインストールする方法。
Graylog2を使用してさまざまなログを収集および監視することは可能ですが、この記事ではsyslogの収集に焦点を当てます。また、Graylog2の基本を示すために、すべてのコンポーネントを1台のサーバーにインストールします。
Graylog2 コンポーネントについて
Graylog2には4つの主要なコンポーネントがあります:
- Graylog2 サーバーノード: メッセージを受信および処理するワーカーとして機能し、他のすべての非サーバーコンポーネントと通信します。そのパフォーマンスはCPUに依存します。
- Elasticsearchノード: すべてのログ/メッセージを保存します。そのパフォーマンスはRAMおよびディスクI/Oに依存します。
- MongoDB: メタデータを保存し、あまり負荷がかかりません
- ウェブインターフェース: ユーザーインターフェース
こちらがGraylog2コンポーネントの図です(メッセージは他のサーバーから送信されることに注意してください):
非常に基本的なセットアップの場合、すべてのコンポーネントを同じサーバーにインストールできます。より大規模で本番環境のセットアップの場合、高可用性機能を設定することが賢明です。なぜなら、サーバー、Elasticsearch、またはMongoDBのコンポーネントが停止した場合、その停止中に生成されたメッセージをGraylog2が収集できなくなるからです。
前提条件
このチュートリアルで説明されているセットアップには、少なくとも2GBのRAMを持つUbuntu 14.04のVPSが必要です。また、ルートアクセスも必要です(Ubuntu 14.04の初期サーバーセットアップの手順1-4)。
RAMが2GB未満のVPSを使用すると、すべてのGraylog2コンポーネントを起動することができません。
ソフトウェアのインストールを始めましょう!
MongoDBをインストールする
MongoDBのインストールは簡単で迅速です。次のコマンドを実行して、MongoDBの公開GPGキーをaptにインポートします:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10
MongoDBのソースリストを作成します:
echo 'deb http://downloads-distro.mongodb.org/repo/debian-sysvinit dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list
aptパッケージデータベースを更新します:
sudo apt-get update
このコマンドでMongoDBの最新の安定版をインストールしてください:
sudo apt-get install mongodb-org
MongoDBは現在稼働中です。次はJava 7のインストールに進みましょう。
Java 7をインストールする
ElasticsearchはJava 7が必要なので、今それをインストールします。elasticsearch.orgで推奨されているので、Oracle Java 7をインストールします。ただし、OpenJDKを選択した場合でも問題なく動作するはずです。
Oracle Java PPAをaptに追加します:
sudo add-apt-repository ppa:webupd8team/java
aptパッケージデータベースを更新します:
sudo apt-get update
このコマンドを使ってOracle Java 7の最新の安定版をインストールし、表示されるライセンス契約に同意してください。
sudo apt-get install oracle-java7-installer
Java 7がインストールされたので、Elasticsearchをインストールしましょう。
Elasticsearchをインストールする
Graylog2 v0.20.2はElasticsearch v.0.90.10を必要とします。以下のコマンドを使ってダウンロードしてインストールしてください:
cd ~; wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-0.90.10.deb
sudo dpkg -i elasticsearch-0.90.10.deb
Elasticsearchのcluster.name設定を変更する必要があります。Elasticsearchの設定ファイルを開いてください:
sudo vi /etc/elasticsearch/elasticsearch.yml
cluster.nameを指定しているセクションを見つけて、それをコメント解除し、デフォルト値を「graylog2」に置き換えて、次のようになるようにします:
cluster.name: graylog2
Elasticsearchインスタンスへの外部アクセス(ポート9200)を制限したいでしょう。これにより、外部の人がデータを読み取ったり、HTTP APIを通じてElasticsearchクラスターをシャットダウンしたりできなくなります。network.bind_hostを指定している行を見つけて、それをコメント解除して次のようにします:
network.bind_host: localhost
次に、動的スクリプトを無効にするために、ファイルのどこかに次の行を追加します:
script.disable_dynamic: true
保存して終了します。次に、Elasticsearchを再起動して変更を反映させます。
sudo service elasticsearch restart
数秒後に、Elasticsearchが正しく動作しているかテストするために以下を実行してください:
curl -XGET 'http://localhost:9200/_cluster/health?pretty=true'
Elasticsearchが稼働しているので、Graylog2サーバーをインストールしましょう。
Graylog2サーバーをインストールする
必要な他のソフトウェアをインストールしたので、Graylog2サーバーをインストールしましょう。Graylog2サーバーv0.20.2を/optにインストールします。まず、このコマンドを使ってGraylog2アーカイブを/optにダウンロードします:
cd /opt; sudo wget https://github.com/Graylog2/graylog2-server/releases/download/0.20.2/graylog2-server-0.20.2.tgz
それからアーカイブを抽出してください:
sudo tar xvf graylog2-server-0.20.2.tgz
新しく作成されたディレクトリへのシンボリックリンクを作成して、ディレクトリ名を簡略化しましょう:
sudo ln -s graylog2-server-0.20.2 graylog2-server
設定ファイルの例を適切な場所、/etcにコピーしてください。
sudo cp /opt/graylog2-server/graylog2.conf.example /etc/graylog2.conf
pwgenをインストールします。これを使ってパスワードの秘密鍵を生成します。
sudo apt-get install pwgen
今、adminパスワードとシークレットキーを設定する必要があります。パスワードシークレットキーは、graylog2.confで、password_secretパラメータによって設定されます。ランダムなキーを生成し、次の2つのコマンドを使ってGraylog2の設定に挿入できます:
SECRET=$(pwgen -s 96 1)
sudo -E sed -i -e 's/password_secret =.*/password_secret = '$SECRET'/' /etc/graylog2.conf
管理者のパスワードは、希望のパスワードの shasum を作成し、それを Graylog2 設定ファイルの root_password_sha2 パラメータに割り当てることで設定されます。次のコマンドを使用して、ハイライトされた「password」を自分のパスワードに置き換えて、希望のパスワードの shasum を作成してください。sed コマンドがそれを Graylog2 設定に挿入します:
パスワード=$ (echo -n パスワード | shasum -a 256 | awk ‘{print $1}’) sudo -E sed -i -e ‘s/root_password_sha2 =.*/root_password_sha2=‘$PASSWORD’/’ /etc/graylog2.conf 管理者パスワードが設定されたので、Graylog2の設定を開いていくつかの変更を行いましょう:
sudo vi /etc/graylog2.conf
あなたは、上記の手順で実行したコマンドのために、password_secretとroot_password_sha2にランダムな文字列があることに気づくべきです。次に、Graylog2のWebインターフェースがサーバーと通信する方法であるrest_transport_uriを設定します。すべてのコンポーネントを1台のサーバーにインストールするため、値を127.0.0.1、またはlocalhostに設定しましょう。rest_transport_uriを探してコメントを解除し、その値を以下のように変更します:
rest_transport_uri=http://127.0.0.1:12900/
次に、このサーバーで実行されているのは一つのElasticsearchシャードだけなので、elasticsearch_shardsの値を1に変更します:
elasticsearch_shards=1
保存して終了します。これで私たちのGraylog2サーバーは設定され、起動する準備が整いました。
オプション: 試してみたい場合は、以下のコマンドを実行してください:
sudo java -jar /opt/graylog2-server/graylog2-server.jar --debug
たくさんの出力が表示されるはずです。次の行のような出力が表示されると、Graylog2サーバーが正しく構成されたことがわかります。
2014-06-06 14:16:13,420 INFO : org.graylog2.Core - Started REST API at <http://127.0.0.1:12900/>
2014-06-06 14:16:13,421 INFO : org.graylog2.Main - Graylog2 up and running.
テストを終了してシェルに戻るには、CTRL-Cを押してください。
次に、Graylog2の初期化スクリプトをインストールします。graylog2ctlを/etc/init.dにコピーしてください。
sudo cp /opt/graylog2-server/bin/graylog2ctl /etc/init.d/graylog2
スタートアップスクリプトを更新して、Graylog2のログを/var/logに置き、Graylog2サーバーのJARファイルを/opt/graylog2-serverで探すために、次の2つのsedコマンドを実行します。
sudo sed -i -e 's/GRAYLOG2_SERVER_JAR=${GRAYLOG2_SERVER_JAR:=graylog2-server.jar}/GRAYLOG2_SERVER_JAR=${GRAYLOG2_SERVER_JAR:=/opt/graylog2-server/graylog2-server.jar}/' /etc/init.d/graylog2 sudo sed -i -e 's/LOG_FILE=${LOG_FILE:=log/graylog2-server.log}/LOG_FILE=${LOG_FILE:=/var/log/graylog2-server.log}/' /etc/init.d/graylog2 次に、スタートアップスクリプトをインストールします。
sudo update-rc.d graylog2 defaults
これでサービスコマンドを使ってGraylog2サーバーを起動できます:
sudo service graylog2 start
次のステップは、Graylog2のウェブインターフェースをインストールすることです。今それをやりましょう!
Graylog2ウェブインターフェイスをインストールする
以下のコマンドを使用して、/optにGraylog2 v.0.20.2のウェブインターフェースをダウンロードしてインストールします。
cd /opt; sudo wget https://github.com/Graylog2/graylog2-web-interface/releases/download/0.20.2/graylog2-web-interface-0.20.2.tgz
sudo tar xvf graylog2-web-interface-0.20.2.tgz
新しく作成されたディレクトリへのシンボリックリンクを作成して、ディレクトリ名を簡略化しましょう:
sudo ln -s graylog2-web-interface-0.20.2 graylog2-web-interface
次に、ウェブインターフェースの秘密鍵、すなわち application.secret パラメータを graylog2-web-interface.conf で設定します。Graylog2 サーバーの設定と同様に、別のキーを生成し、sedを使って次のように挿入します:
SECRET=$(pwgen -s 96 1)
sudo -E sed -i -e 's/application\.secret=""/application\.secret="'$SECRET'"/' /opt/graylog2-web-interface/conf/graylog2-web-interface.conf
次に、このコマンドを使ってウェブインターフェースの構成ファイルを開いてください。
sudo vi /opt/graylog2-web-interface/conf/graylog2-web-interface.conf
さて、ウェブインターフェースの設定を更新して、graylog2-server.uris パラメータを指定する必要があります。これは、サーバーのREST URIのカンマ区切りリストです。私たちはGraylog2サーバーノードが1つしかないので、その値はGraylog2サーバーの設定にあるrest_listen_uri と一致する必要があります(すなわち、「http://127.0.0.1:12900/ 」)。
graylog2-server.uris="http://127.0.0.1:12900/"
Graylog2のウェブインターフェースは現在構成されています。テストするために起動しましょう:
sudo /opt/graylog2-web-interface-0.20.2/bin/graylog2-web-interface
次の2行が表示された時に、正しく開始されたことがわかります:
[info] play - Application started (Prod)
[info] play - Listening for HTTP on /0:0:0:0:0:0:0:0:9000
ウェブインターフェースを終了するには、CTRL-C を押してください。次に、スタートアップスクリプトをインストールします。自分で作成するか、このチュートリアルのために私が作成したものをダウンロードすることができます。スクリプトをホームディレクトリにダウンロードするには、次のコマンドを使用します:
cd ~; wget https://assets.linux-console.net/articles/graylog2/graylog2-web
次に、それを/etc/init.dにコピーし、所有者をrootに変更し、パーミッションを755に設定します:
sudo cp ~/graylog2-web /etc/init.d/
sudo chown root:root /etc/init.d/graylog2-web
sudo chmod 755 /etc/init.d/graylog2-web
今、このコマンドでウェブインターフェースの初期化スクリプトをインストールできます:
sudo update-rc.d graylog2-web defaults
Graylog2ウェブインターフェースを開始します:
sudo service graylog2-web start
これでGraylog2のウェブインターフェースを使用できます。今すぐそれを使いましょう。
Graylog2を構成してsyslogメッセージを受信する
Graylog2ウェブインターフェースにログインする
お気に入りのブラウザで、VPSのパブリックIPアドレスのポート9000にアクセスしてください。
http://gl2_public_IP:9000/ ログイン画面が表示されるはずです。ユーザー名に「admin」と入力し、前に設定した管理者パスワードを入力してください。
ログインすると、次のような画面が表示されます:
点滅する赤い「1」は通知です。これをクリックすると、実行中の入力がないノードがあるというメッセージが表示されます。では、UDP経由でsyslogメッセージを受信するための入力を追加しましょう。
Syslog UDP入力を作成する
syslog メッセージを受信するために入力を追加するには、右側の System メニューの Inputs をクリックしてください。
今、ドロップダウンメニューからSyslog UDPを選択し、新しい入力を開始をクリックしてください。
「新しい入力 Syslog UDP を開始」ウィンドウがポップアップします。次の情報を入力してください:
- タイトル: syslog
- ポート:514
- バインドアドレス:
gl2_private_IP
次に起動をクリックしてください。
現在、ローカル入力の実行セクションに「syslog」という名前の入力が表示されているはずです(その入力には「実行中」と書かれた緑のボックスが表示されているはずです)。
現在、私たちのGraylog2サーバーは、あなたのサーバーからのsyslogメッセージを受け取る準備が整いました。それでは、サーバーを設定して、syslogメッセージをGraylog2に送信しましょう。
rsyslogを設定してGraylog2サーバーに送信する
Graylog2にsyslogメッセージを送信したいすべてのサーバーで、次の手順を実行してください。
次のコマンドで /etc/rsyslog.d に rsyslog 構成ファイルを作成します。私たちはそれを 90-graylog2.conf と呼びます。
sudo vi /etc/rsyslog.d/90-graylog2.conf
このファイルでは、syslogメッセージをGraylog2サーバーに送信するためにrsyslogを設定するために、次の行を追加します(gl2_private_IPをGraylog2サーバーのプライベートIPアドレスに置き換えてください):
$template GRAYLOGRFC5424,“<%pri%>%protocol-version% %timestamp:::date-rfc3339% %HOSTNAME% %app-name% %procid% %msg%\n ” . @保存して終了します。このファイルは今後、rsyslogの設定の一部として読み込まれます。変更を反映させるために、rsyslogを再起動する必要があります。
sudo service rsyslog restart
監視したいすべてのサーバーでrsyslogの設定が完了したら、Graylog2のウェブインターフェイスに戻りましょう。
Graylog2 ソースの表示
お気に入りのブラウザで、VPSのパブリックIPアドレスのポート9000にアクセスしてください。
http://gl2_public_IP:9000/ ソースを上部バーでクリックしてください。設定したrsyslogのすべてのサーバーのリストが表示されます。以下はその例です:
ソースのホスト名は左側にあり、Graylog2によって受信されたメッセージの数は右側にあります。
Graylog2データの検索
Graylog2にメッセージを一定期間収集させた後、メッセージを検索できるようになります。例として「sshd」を検索して、私たちのサーバーでどのようなSSHアクティビティが行われているかを見てみましょう。こちらが結果の一部です:
ご覧の通り、私たちの例の検索結果は、さまざまなサーバーのsshdログと多くの失敗したrootログイン試行を明らかにしました。あなたの結果は異なるかもしれませんが、無許可のユーザーがどのようにしてあなたのサーバーにアクセスしようとしているかを含む多くの問題を特定するのに役立つでしょう。
すべてのソースにおける基本的な検索機能に加えて、特定のホストのログや特定の時間枠で検索することもできます。
Graylog2でデータを検索することは便利です。たとえば、インシデントが発生した後にサーバーや複数のサーバーのログをレビューしたい場合です。中央集中的なログ管理により、関連するインシデントを関連付けることが容易になります。なぜなら、発生したすべてのイベントを見るために複数のサーバーにログインする必要がないからです。
検索バーの使い方についての詳細情報は、公式ドキュメントをご覧ください:検索バーの説明
結論
Graylog2の設定が完了したので、他の機能を自由に探求してください。他の種類のログをGraylog2に送信し、抽出器を設定する(またはlogstashのようなソフトウェアでログのフォーマットを変更する)ことで、ログをより構造化し、検索可能にすることができます。また、コンポーネントを分離し、冗長性を追加してパフォーマンスと可用性を高めることで、Graylog2環境を拡張することも検討できます。
頑張って!





