序章

このチュートリアルでは、CentOS7にGraylogv1.3.x(Graylog2と呼ばれることもあります)をインストールし、システムのsyslogを一元化された場所に収集するように構成する方法について説明します。 Graylogは、SSHログインや異常なアクティビティの監視からアプリケーションのデバッグまで、多くのユースケースを持つ強力なログ管理および分析ツールです。 これは、Elasticsearch、Java、およびMongoDBに基づいています。

Graylogを使用してさまざまなログを収集および監視することは可能ですが、このチュートリアルの範囲をsyslog収集に限定します。 また、Graylogの基本を示しているため、すべてのコンポーネントを1台のサーバーにインストールします。

グレイログコンポーネントについて

グレイログには4つの主要なコンポーネントがあります。

  • Graylogサーバーノード:メッセージを受信して処理し、他のすべての非サーバーコンポーネントと通信するワーカーとして機能します。 そのパフォーマンスはCPUに依存します
  • Elasticsearchノード:すべてのログ/メッセージを保存します。 そのパフォーマンスはRAMとディスクI/Oに依存します
  • MongoDB :メタデータを保存し、負荷をあまりかけません
  • Webインターフェイス:ユーザーインターフェイス

次に、Graylogコンポーネントの図を示します(メッセージは他のサーバーから送信されることに注意してください)。

Basic Graylog Setup

このチュートリアルでは、すべてのコンポーネントを同じサーバーにインストールして、非常に基本的なGraylogセットアップを実装します。 大規模な本番環境のセットアップでは、パフォーマンス上の理由から、コンポーネントを別々のサーバーにインストールするようにセットアップすることをお勧めします。

前提条件

このチュートリアルで説明するセットアップには、少なくとも2GBのRAMを搭載したCentOS7サーバーが必要です。 ルートまたはスーパーユーザーアクセスも必要です( CentOS 7 を使用したサーバーの初期設定の手順1〜4)。

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

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

MongoDBをインストールします

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

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

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

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

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

  1. sudo yum install -y mongodb-org

次に、MongoDBを起動します。

  1. sudo systemctl restart mongod

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

Javaをインストールする

ElasticsearchとLogstashにはJavaが必要なので、今すぐインストールします。 Elasticsearchが推奨する最新バージョンのOracleJava8をインストールします。 ただし、そのルートを選択する場合は、OpenJDKで正常に機能するはずです。 このセクションの手順に従うことは、JavaSEのOracleBinaryLicenseAgreementに同意することを意味します。

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

  1. 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をインストールします(別のリリースをダウンロードした場合は、ここでファイル名に置き換えてください)。

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

これで、Javaが/usr/java/jdk1.8.0_73/jre/bin/javaにインストールされ、/usr/bin/javaからリンクされるはずです。

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

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

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

Elasticsearchをインストールする

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

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

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

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

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

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

  1. sudo yum -y install elasticsearch

Elasticsearchがインストールされました。 構成を編集しましょう:

  1. sudo vi /etc/elasticsearch/elasticsearch.yml

cluster.nameを指定するセクションを見つけます。 コメントを外し、デフォルト値を「graylog-development」に置き換えると、次のようになります。

Elasticsearch.yml —1/2
cluster.name: graylog-development

Elasticsearchインスタンス(ポート9200)への外部アクセスを制限して、部外者がHTTPAPIを介してデータを読み取ったりElasticsearchクラスターをシャットダウンしたりできないようにする必要があります。 network.hostを指定する行を見つけてコメントを外し、その値を「localhost」に置き換えて、次のようにします。

Elasticsearch.yml — 2 of 2
network.host: localhost

elasticsearch.ymlを保存して終了します。

次にElasticsearchを起動します。

  1. sudo systemctl restart elasticsearch

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

  1. sudo systemctl enable elasticsearch

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

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

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

Graylogサーバーをインストールします

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

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

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

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

  1. sudo yum -y install graylog-server

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

  1. sudo yum -y install epel-release
  2. sudo yum -y install pwgen

次に、adminパスワードと秘密鍵を構成する必要があります。 パスワード秘密鍵は、 server.conf で、password_secretパラメーターによって構成されます。 次の2つのコマンドを使用して、ランダムキーを生成し、Graylog構成に挿入できます。

  1. SECRET=$(pwgen -s 96 1)
  2. sudo -E sed -i -e 's/password_secret =.*/password_secret = '$SECRET'/' /etc/graylog/server/server.conf

admin パスワードは、目的のパスワードのshasumを作成し、Graylog構成ファイルのroot_password_sha2パラメーターに割り当てることによって割り当てられます。 次のコマンドを使用して、目的のパスワードのシャサムを作成します。強調表示された「パスワード」を独自のパスワードに置き換えます。 sedコマンドは、それをGraylog構成に挿入します。

  1. PASSWORD=$(echo -n password | sha256sum | awk '{print $1}')
  2. sudo -E sed -i -e 's/root_password_sha2 =.*/root_password_sha2 = '$PASSWORD'/' /etc/graylog/server/server.conf

管理者パスワードが設定されたので、Graylog構成を開いて、いくつかの変更を加えましょう。

  1. sudo vi /etc/graylog/server/server.conf

上記の手順で実行したコマンドにより、password_secretroot_password_sha2にはランダムな文字列が含まれていることがわかります。

次に、rest_transport_uriを構成します。これは、GraylogWebインターフェイスがサーバーと通信する方法です。 すべてのコンポーネントを単一のサーバーにインストールするため、値を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 of 4
elasticsearch_shards = 1

次に、elasticsearch_cluster_nameの値を「graylog-development」(Elasticsearch cluster.nameと同じ)に変更します。

/etc/graylog/server/server.conf —3/4
elasticsearch_cluster_name = graylog-development

次の2行のコメントを解除して、マルチキャストの代わりにユニキャストを使用してElasticsearchインスタンスを検出します。

/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が構成され、開始する準備が整いました。

次のサービスコマンドを使用してGraylogサーバーを起動します。

  1. sudo systemctl start graylog-server

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

GraylogWebをインストールします

次のコマンドを使用してGraylogWebをインストールします。

sudo yum -y install graylog-web

次に、Webインターフェイスの秘密鍵であるweb.confapplication.secretパラメーターを構成します。 Graylogサーバー構成で行ったように、別のキーを生成し、次のようにsedで挿入します。

  1. SECRET=$(pwgen -s 96 1)
  2. sudo -E sed -i -e 's/application\.secret=""/application\.secret="'$SECRET'"/' /etc/graylog/web/web.conf

次に、次のコマンドを使用して、Webインターフェイス構成ファイルを開きます。

  1. sudo vi /etc/graylog/web/web.conf

次に、Webインターフェイスの構成を更新して、graylog2-server.urisパラメーターを指定する必要があります。 これは、サーバーのRESTURIのコンマ区切りのリストです。 グレイログサーバーノードは1つしかないため、値はグレイログサーバー構成のrest_listen_uriの値と一致する必要があります(つまり、 「http://127.0.0.1:12900/」)。

/etc/graylog/web/web.confの抜粋
graylog2-server.uris="http://127.0.0.1:12900/"

これで、GraylogWebインターフェイスが構成されました。 GraylogWebインターフェイスを起動します。

  1. sudo systemctl restart graylog-web

これで、GraylogWebインターフェイスを使用できます。 今それをしましょう。

syslogメッセージを受信するようにGraylogを構成する

GraylogWebインターフェイスにログインします

お気に入りのWebブラウザーで、サーバーのパブリックIPアドレスのポート9000に移動します。

In a web browser:
http://graylog_public_IP:9000/

ログイン画面が表示されます。 以前に設定したユーザー名と管理者パスワードとしてadminを入力します。

ログインすると、次のようなメッセージが表示されます。

Graylog Dashboard

上部の赤い数字は通知です。 それをクリックすると、実行中の入力がないノードがあることを示すメッセージが表示されます。 ここで、UDPを介してsyslogメッセージを受信するための入力を追加しましょう。

SyslogUDP入力を作成する

syslogメッセージを受信するための入力を追加するには、トップメニューのシステムドロップダウンをクリックします。

次に、ドロップダウンメニューから入力を選択します。

ドロップダウンメニューからSyslogUDP を選択し、新しい入力の起動ボタンをクリックします。

「新しい入力を起動します: SyslogUDP」モーダルウィンドウがポップアップ表示されます。 次の情報を入力します(バインドアドレスをサーバーのプライベートIPアドレスに置き換えます)。

  • タイトル: syslog
  • ポート: 8514
  • バインドアドレス: graylog_private_IP

次に、起動をクリックします。

これで、ローカル入力セクションに「syslog」という名前の入力が表示されます(横に「実行中」と表示された緑色のボックスが表示されます)。

Graylog syslog input

これで、Graylogサーバーは、サーバーからポート8514でsyslogメッセージを受信する準備が整いました。 ここで、syslogメッセージをGraylogに送信するようにサーバーを構成しましょう。

SyslogをGraylogサーバーに送信するようにRsyslogを構成する

すべてのクライアントサーバーで、syslogメッセージをGraylogに送信するサーバーで、次の手順を実行します。

/etc/rsyslog.dにrsyslog構成ファイルを作成します。 私たちは私たちを90-graylog.confと呼びます:

  1. sudo vi /etc/rsyslog.d/90-graylog.conf

このファイルに、次の行を追加して、syslogメッセージをGraylogサーバーに送信するようにrsyslogを構成します(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"
*.* @graylog_private_IP:8514;GRAYLOGRFC5424

保存して終了します。 このファイルは、今後rsyslog構成の一部としてロードされます。 次に、変更を有効にするためにrsyslogを再起動する必要があります。

  1. sudo systemctl restart rsyslog

監視するすべてのサーバーでrsyslogの構成が完了したら、GraylogWebインターフェイスに戻ります。

グレイログソースの表示

お気に入りのWebブラウザーで、サーバーのパブリックIPアドレスのポート9000に移動します。

In a web browser:
http://graylog_public_IP:9000/

トップバーのソースをクリックします。 rsyslogを構成したすべてのサーバーのリストが表示されます。

ソースのホスト名は左側にあり、Graylogによって受信されたメッセージの数は右側にあります。

グレイログデータの検索

しばらくの間Graylogにメッセージを収集させた後、メッセージを検索できるようになります。 例として、「sshd」を検索して、サーバーでどのようなSSHアクティビティが発生しているかを確認しましょう。 結果の抜粋は次のとおりです。

Graylog Example Search

ご覧のとおり、検索結果の例では、さまざまなサーバーのsshdログが明らかになり、rootログインの試行に多くの失敗がありました。 結果は異なる場合がありますが、権限のないユーザーがサーバーにアクセスしようとしている方法など、多くの問題を特定するのに役立ちます。

すべてのソースの基本的な検索機能に加えて、特定のホストのログを特定の時間枠で検索できます。

インシデントが発生した後に1つまたは複数のサーバーのログを確認する場合など、Graylogのデータを検索すると便利です。 一元化されたロギングにより、発生したすべてのイベントを確認するために複数のサーバーにログインする必要がないため、関連するインシデントの関連付けが容易になります。

検索バーの仕組みの詳細については、公式ドキュメントをご覧ください: Graylog Searching

結論

これでGraylogが設定されたので、Graylogが提供する他の機能を自由に調べてください。 他の種類のログをGraylogに送信し、エクストラクタを設定して(または、logstashなどのソフトウェアでログを再フォーマットして)、ログをより構造化して検索できるようにすることができます。 コンポーネントを分離し、冗長性を追加してパフォーマンスと可用性を向上させることにより、Graylog環境の拡張を検討することもできます。

幸運を!