前書き

このチュートリアルでは、CentOS 7に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を備えたCentOS 7サーバーが必要です。 ルートまたはスーパーユーザーアクセスも必要です(https://www.digitalocean.com/community/articles/initial-server-setup-with-centos-7[CentOS 7での初期サーバーセットアップ]のステップ1〜4)。

2 GB未満のRAMでVPSを使用する場合、すべてのGraylogコンポーネントを起動できません。

ソフトウェアのインストールを始めましょう!

MongoDBをインストールする

MongoDBのインストールは簡単で迅速です。 次のコマンドを実行して、MongoDB公開GPGキーをrpmにインポートします。

sudo rpm --import https://www.mongodb.org/static/pgp/server-3.2.asc

MongoDBソースリストを作成します。

echo '[mongodb-org-3.2]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.2/x86_64/
gpgcheck=1
enabled=1' | sudo tee /etc/yum.repos.d/mongodb-org-3.2.repo

次のコマンドを使用して、MongoDBの最新の安定バージョンをインストールします。

sudo yum install -y mongodb-org

次に、MongoDBを起動します。

sudo systemctl restart mongod

これで、MongoDBが稼働しているはずです。 Javaのインストールに移りましょう。

Javaをインストールする

ElasticsearchとLogstashにはJavaが必要なので、今すぐインストールします。 Elasticsearchが推奨しているので、Oracle Java 8の最新バージョンをインストールします。 ただし、そのルートに進むことにした場合、OpenJDKで正常に動作するはずです。 このセクションの手順に従うことは、Java SEのOracle Binary License Agreementに同意することを意味します。

次のコマンドを使用して、ホームディレクトリに移動し、Oracle Java 8(この記事の執筆時点で最新のアップデート73)JDK RPMをダウンロードします。

wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u73-b02/jdk-8u73-linux-x64.rpm"

次に、このyumコマンドを使用してRPMをインストールします(別のリリースをダウンロードした場合は、ここでファイル名を置き換えます)。

sudo yum -y localinstall jdk-8u73-linux-x64.rpm

これで、Javaを `+ / usr / java / jdk1.8.0_73 / jre / bin / java `にインストールし、 ` / usr / bin / java +`からリンクする必要があります。

以前にダウンロードしたアーカイブファイルを削除できます。

rm ~/jdk-8u*-linux-x64.rpm

Javaがインストールされたので、Elasticsearchをインストールしましょう。

Elasticsearchをインストールする

Graylog 1.xは、Elasticsearchの2.0より前のバージョンでのみ動作するため、Elasticsearch 1.7.xをインストールします。 Elasticsearchは、Elasticのパッケージソースリストを追加することにより、パッケージマネージャーと共にインストールできます。

次のコマンドを実行して、Elasticsearch公開GPGキーをrpmにインポートします。

sudo rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch

次のコマンドを実行して、Elasticsearch用の新しいyumリポジトリファイルを作成します。

echo '[elasticsearch-1.7]
name=Elasticsearch repository for 1.7.x packages
baseurl=http://packages.elastic.co/elasticsearch/1.7/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1' | sudo tee /etc/yum.repos.d/elasticsearch.repo

次のコマンドでElasticsearchをインストールします。

sudo yum -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 systemctl restart elasticsearch

次に、次のコマンドを実行して、起動時にElasticsearchを開始します。

sudo systemctl enable elasticsearch

しばらくしてから、以下を実行してElasticsearchが正常に実行されていることをテストします。

curl -XGET 'http://localhost:9200/_cluster/health?pretty=true'

Elasticsearchが稼働しているので、Graylogサーバーをインストールしましょう。

Graylogサーバーをインストールする

他の必要なソフトウェアをインストールしたので、Graylogのサーバーコンポーネントである `+ graylog-server +`をインストールしましょう。

まず、次のコマンドを使用して、Graylog RPMパッケージをシステムにダウンロードします。

sudo rpm -Uvh https://packages.graylog2.org/repo/packages/graylog-1.3-repository-el7_latest.rpm

次に、次のコマンドで `+ graylog-server +`パッケージをインストールします。

sudo yum -y install graylog-server

パスワード秘密鍵を生成するために使用するpwgenをインストールします。

sudo yum -y install epel-release
sudo yum -y 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  | sha256sum | 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 systemctl start graylog-server

次のステップは、Graylog Webインターフェースをインストールすることです。 今すぐやろう!

Graylog Webをインストールする

次のコマンドでGraylog Webをインストールします。

sudo yum -y 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 systemctl restart 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 systemctl restart rsyslog

監視するすべてのサーバーで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環境の拡張を検討することもできます。

がんばろう!