前書き
このチュートリアルでは、Ubuntu 14.04にGraylog v1.3.x(Graylog2と呼ばれることもあります)をインストールし、一元化された場所でシステムのsyslogを収集するように構成する方法について説明します。 Graylogは、SSHログインや異常なアクティビティの監視からアプリケーションのデバッグに至るまで、多くのユースケースを持つ強力なログ管理および分析ツールです。 Elasticsearch、Java、およびMongoDBに基づいています。
Graylogを使用してさまざまなログを収集および監視することは可能ですが、このチュートリアルの範囲はsyslog収集に限定します。 また、Graylogの基本を示しているため、すべてのコンポーネントを単一のサーバーにインストールします。
Graylogコンポーネントについて
Graylogには4つの主要コンポーネントがあります。
-
* Graylogサーバーノード*:メッセージを受信して処理し、他のすべての非サーバーコンポーネントと通信するワーカーとして機能します。 そのパフォーマンスはCPUに依存します
-
* Elasticsearchノード*:すべてのログ/メッセージを保存します。 そのパフォーマンスはRAMとディスクI / Oに依存します
-
* MongoDB *:メタデータを保存し、あまり負荷をかけません
-
* Webインターフェイス*:ユーザーインターフェイス
Graylogコンポーネントの図を次に示します(メッセージは他のサーバーから送信されることに注意してください)。
image:https://assets.digitalocean.com/articles/graylog2/graylog_simple_setup_v2.png [Graylogの基本設定]
このチュートリアルでは、すべてのコンポーネントを同じサーバーにインストールして、非常に基本的なGraylogセットアップを実装します。 大規模な実稼働セットアップの場合、パフォーマンス上の理由から、コンポーネントを個別のサーバーにインストールするようにセットアップすることをお勧めします。
前提条件
このチュートリアルで説明するセットアップには、少なくとも2GBのRAMを備えたUbuntu 14.04サーバーが必要です。 ルートアクセスも必要です(https://www.digitalocean.com/community/articles/initial-server-setup-with-ubuntu-14-04[Ubuntu 14.04での初期サーバーセットアップ])。
2 GB未満のRAMでVPSを使用する場合、すべてのGraylogコンポーネントを起動できません。
ソフトウェアのインストールを始めましょう!
MongoDBをインストールする
MongoDBのインストールは簡単で迅速です。 次のコマンドを実行して、MongoDB公開GPGキーをaptにインポートします。
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10
MongoDBソースリストを作成します。
echo "deb http://repo.mongodb.org/apt/ubuntu "$(lsb_release -sc)"/mongodb-org/3.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.0.list
aptパッケージデータベースを更新します。
sudo apt-get update
次のコマンドを使用して、MongoDBの最新の安定バージョンをインストールします。
sudo apt-get install mongodb-org
これで、MongoDBが稼働しているはずです。 Javaのインストールに移りましょう。
Javaをインストールする
ElasticsearchにはJavaが必要なため、今すぐJavaをインストールします。 Elasticが推奨しているので、Oracle Java 8をインストールします。 ただし、そのルートに進むことにした場合、OpenJDKで正常に動作するはずです。
aptにOracle Java PPAを追加します。
sudo add-apt-repository ppa:webupd8team/java
aptパッケージデータベースを更新します。
sudo apt-get update
次のコマンドを使用して、Oracle Java 8の最新の安定バージョンをインストールします(ポップアップ表示されるライセンス契約に同意します)。
sudo apt-get install oracle-java8-installer
Javaがインストールされたので、Elasticsearchをインストールしましょう。
Elasticsearchをインストールする
Graylog 1.xは、Elasticsearchの2.0より前のバージョンでのみ動作するため、Elasticsearch 1.7.xをインストールします。 Elasticsearchは、Elasticのパッケージソースリストを追加することにより、パッケージマネージャーと共にインストールできます。
次のコマンドを実行して、Elasticsearch GPG公開キーをaptにインポートします。
wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
プロンプトがそこにぶら下がっている場合は、おそらくユーザーのパスワードを待っています( `+ sudo +`コマンドを許可するため)。 その場合は、パスワードを入力してください。
Elasticsearchソースリストを作成します。
echo "deb http://packages.elastic.co/elasticsearch/1.7/debian stable main" | sudo tee -a /etc/apt/sources.list.d/elasticsearch-1.7.x.list
aptパッケージデータベースを更新します。
sudo apt-get update
次のコマンドでElasticsearchをインストールします。
sudo apt-get -y install elasticsearch
Elasticsearchがインストールされました。 設定を編集しましょう:
sudo vi /etc/elasticsearch/elasticsearch.yml
`+ cluster.name`を指定するセクションを見つけます。 コメントを外し、デフォルト値を「graylog-development」に置き換えます。次のようになります。
elasticsearch.yml-2の1
cluster.name: graylog-development
Elasticsearchインスタンス(ポート9200)への外部アクセスを制限すると、HTTP APIを介して部外者がデータを読み取ったり、Elasticsearchクラスターをシャットダウンしたりできなくなります。 `+ network.host +`を指定する行を見つけてコメントを外し、その値を「localhost」に置き換えて、次のようにします。
elasticsearch.yml-2の2
network.host: localhost
保存して `+ elasticsearch.yml +`を終了します。
次に、Elasticsearchを開始します。
sudo service elasticsearch restart
次に、次のコマンドを実行して、起動時にElasticsearchを開始します。
sudo update-rc.d elasticsearch defaults 95 10
しばらくしてから、以下を実行してElasticsearchが正常に実行されていることをテストします。
curl -XGET 'http://localhost:9200/_cluster/health?pretty=true'
Elasticsearchが稼働しているので、Graylogサーバーをインストールしましょう。
Graylogサーバーをインストールする
他の必要なソフトウェアをインストールしたので、Graylogのサーバーコンポーネントである `+ graylog-server +`をインストールしましょう。
まず、Graylog Debianパッケージを次のコマンドを使用してホームディレクトリにダウンロードします。
cd ~
wget https://packages.graylog2.org/repo/packages/graylog-1.3-repository-ubuntu14.04_latest.deb
次に、次のコマンドを使用してパッケージをパッケージマネージャーに追加します。
sudo dpkg -i graylog-1.3-repository-ubuntu14.04_latest.deb
次に、次のコマンドで `+ graylog-server +`パッケージをインストールします。
sudo apt-get update
sudo apt-get install apt-transport-https
sudo apt-get install graylog-server
パスワード秘密鍵を生成するために使用するpwgenをインストールします。
sudo apt-get install pwgen
ここで、_admin_パスワードと秘密鍵を設定する必要があります。 パスワードの秘密鍵は、_server.conf_で `+ password_secret +`パラメーターによって設定されます。 次の2つのコマンドを使用して、ランダムキーを生成し、Graylog設定に挿入できます。
SECRET=$(pwgen -s 96 1)
sudo -E sed -i -e 's/password_secret =.*/password_secret = '$SECRET'/' /etc/graylog/server/server.conf
_admin_パスワードは、目的のパスワードの `+ shasum `を作成し、Graylog設定ファイルの ` root_password_sha2 +`パラメーターに割り当てることで割り当てられます。 次のコマンドを使用して、目的のパスワードのshasumを作成し、強調表示された「パスワード」を自分のパスワードに置き換えます。 sedコマンドはそれをGraylog設定に挿入します:
PASSWORD=$(echo -n | shasum -a 256 | awk '{print $1}')
sudo -E sed -i -e 's/root_password_sha2 =.*/root_password_sha2 = '$PASSWORD'/' /etc/graylog/server/server.conf
管理者パスワードが設定されたので、Graylog設定を開いていくつかの変更を加えましょう。
sudo vi /etc/graylog/server/server.conf
上記の手順で実行したコマンドのために、「+ password_secret 」と「 root_password_sha2 +」にはランダムな文字列が含まれていることがわかります。
ここで、 `+ rest_transport_uri `を設定します。これは、Graylog Webインターフェースがサーバーと通信する方法です。 すべてのコンポーネントを単一のサーバーにインストールするため、値を「+127.0.0.1」または「+ localhost 」に設定します。 「 rest_transport_uri +」を見つけてコメント解除し、その値を次のように変更します。
/etc/graylog/server/server.conf-1/4
rest_transport_uri = http://127.0.0.1:12900/
次に、Elasticsearchシャード(このサーバーで実行されている)が1つしかないため、 `+ elasticsearch_shards +`の値を1に変更します。
/etc/graylog/server/server.conf-2/4
elasticsearch_shards =
次に、 `+ elasticsearch_cluster_name `の値を“ graylog-development”に変更します(Elasticsearch ` cluster.name +`と同じ):
/etc/graylog/server/server.conf-3/4
elasticsearch_cluster_name = graylog-development
マルチキャストではなくユニキャストを使用してElasticsearchインスタンスを検出するには、次の2行のコメントを解除します。
/etc/graylog/server/server.conf-4/4
elasticsearch_discovery_zen_ping_multicast_enabled = false
elasticsearch_discovery_zen_ping_unicast_hosts = 127.0.0.1:9300
保存して終了します。 これで `+ graylog-server +`が設定され、起動する準備が整いました。
serviceコマンドでGraylogサーバーを起動します。
sudo start graylog-server
次のステップは、Graylog Webインターフェースをインストールすることです。 今すぐやろう!
Graylog Webをインストールする
次のコマンドでGraylog Webをインストールします。
sudo apt-get install graylog-web
次に、Webインターフェースの秘密鍵、* web.conf *の `+ application.secret`パラメーターを設定します。 Graylogサーバー構成で行ったように、別のキーを生成し、sedで挿入します。
SECRET=$(pwgen -s 96 1)
sudo -E sed -i -e 's/application\.secret=""/application\.secret="'$SECRET'"/' /etc/graylog/web/web.conf
次のコマンドを使用して、Webインターフェイス構成ファイルを開きます。
sudo vi /etc/graylog/web/web.conf
次に、ウェブインターフェースの設定を更新して、 `+ graylog2-server.uris `パラメーターを指定する必要があります。 これは、サーバーREST URIのコンマ区切りリストです。 Graylogサーバーノードは1つしかないため、値はGraylogサーバー設定の「 rest_listen_uri +」の値と一致する必要があります(つまり、 「http://127.0.0.1:12900/%22[http://127.0.0.1:12900/」])。
/etc/graylog/web/web.confの抜粋
graylog2-server.uris="http://127.0.0.1:12900/"
これで、Graylog Webインターフェイスが設定されました。 Graylog Webインターフェイスを起動します。
sudo start graylog-web
これで、Graylog Webインターフェイスを使用できます。 それでは今やろう。
syslogメッセージを受信するためのGraylogの構成
Graylog Webインターフェイスにログインします
お気に入りのWebブラウザーで、サーバーのパブリックIPアドレスのポート「9000」に移動します。
In a web browser:http://:9000/
ログイン画面が表示されます。 ユーザー名として「+ admin +」と前に設定した管理パスワードを入力します。
ログインすると、次のようなものが表示されます。
image:https://assets.digitalocean.com/articles/graylog/getting_started.png [Graylog Dashboard]
上部の赤い数字は通知です。 クリックすると、実行中の入力のないノードがあるというメッセージが表示されます。 UDP経由でsyslogメッセージを受信するための入力を追加しましょう。
Syslog UDP入力の作成
syslogメッセージを受信するための入力を追加するには、トップメニューの[システム]ドロップダウンをクリックします。
次に、ドロップダウンメニューから[入力]を選択します。
ドロップダウンメニューから[* Syslog UDP ]を選択し、[*新しい入力の起動]ボタンをクリックします。
「新しい入力を起動:Syslog UDP」モーダルウィンドウが表示されます。 次の情報を入力します(バインドアドレスの代わりにサーバーのプライベートIPアドレスを使用します):
-
タイトル:
+ syslog +
-
ポート:
+ 8514 +
-
バインドアドレス:
+ graylog_private_IP +
次に、[起動]をクリックします。
次のように、「ローカル入力」セクションに「syslog」という名前の入力が表示されます(その横に「実行中」という緑色のボックスが表示されます)。
image:https://assets.digitalocean.com/articles/graylog/inputs.png [Graylog syslog input]
これで、Graylogサーバーは、サーバーからポート `+ 8514 +`でsyslogメッセージを受信する準備ができました。 syslogメッセージをGraylogに送信するようにサーバーを設定しましょう。
SyslogをGraylogサーバーに送信するようにRsyslogを構成する
すべての*クライアントサーバー*(syslogメッセージをGraylogに送信するサーバー)で、次の手順を実行します。
/etc/rsyslog.dにrsyslog構成ファイルを作成します。 私たちは `+ 90-graylog.conf +`を呼び出します:
sudo vi /etc/rsyslog.d/90-graylog.conf
このファイルに、次の行を追加してrsyslogを設定し、syslogメッセージをGraylogサーバーに送信します( `+ graylog_private_IP +`をGraylogサーバーのプライベートIPアドレスに置き換えます):
/etc/rsyslog.d/90-graylog.conf
$template GRAYLOGRFC5424,"<%pri%>%protocol-version% %timestamp:::date-rfc3339% %HOSTNAME% %app-name% %procid% %msg%\n"
*.* @:8514;GRAYLOGRFC5424
保存して終了します。 このファイルは、今後rsyslog設定の一部としてロードされます。 次に、変更を有効にするためにrsyslogを再起動する必要があります。
sudo service rsyslog restart
監視するすべてのサーバーでrsyslogの構成が完了したら、Graylog Webインターフェイスに戻ります。
グレイログソースの表示
お気に入りのWebブラウザーで、サーバーのパブリックIPアドレスのポート「9000」に移動します。
In a web browser:http://:9000/
トップバーの[ソース]をクリックします。 rsyslogを設定したすべてのサーバーのリストが表示されます。
ソースのホスト名は左側にあり、Graylogが受信したメッセージの数は右側にあります。
Graylogデータを検索する
Graylogでしばらくメッセージを収集した後、メッセージを検索できるようになります。 例として、「sshd」を検索して、サーバーでどのような種類のSSHアクティビティが発生しているかを確認しましょう。 結果のスニペットは次のとおりです。
image:https://assets.digitalocean.com/articles/graylog/search_sshd.png [Graylogサンプル検索]
ご覧のとおり、サンプルの検索結果から、さまざまなサーバーのsshdログと、多くの失敗したルートログイン試行が明らかになりました。 結果は異なる場合がありますが、許可されていないユーザーがサーバーにアクセスしようとする方法など、多くの問題を特定するのに役立ちます。
すべてのソースの基本的な検索機能に加えて、特定のホストのログ、または特定の時間枠で検索できます。
たとえば、インシデントが発生した後に1つまたは複数のサーバーのログを確認する場合は、Graylogのデータを検索すると便利です。 集中ログを使用すると、発生したすべてのイベントを確認するために複数のサーバーにログインする必要がないため、関連するインシデントを簡単に関連付けることができます。
検索バーの機能の詳細については、公式ドキュメントをご覧ください:http://docs.graylog.org/en/1.3/pages/queries.html[Graylog Searching]
結論
Graylogがセットアップされたので、それが提供する他の機能を自由に探索してください。 他のタイプのログをGraylogに送信し、エクストラクターをセットアップ(またはlogstashなどのソフトウェアでログを再フォーマット)して、ログをより構造化および検索可能にすることができます。 また、コンポーネントを分離し、冗長性を追加してパフォーマンスと可用性を向上させることにより、Graylog環境の拡張を検討することもできます。
がんばろう!