CentOS7にGraylog1.xをインストールする方法
序章
このチュートリアルでは、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コンポーネントの図を示します(メッセージは他のサーバーから送信されることに注意してください)。
このチュートリアルでは、すべてのコンポーネントを同じサーバーにインストールして、非常に基本的なGraylogセットアップを実装します。 大規模な本番環境のセットアップでは、パフォーマンス上の理由から、コンポーネントを別々のサーバーにインストールするようにセットアップすることをお勧めします。
前提条件
このチュートリアルで説明するセットアップには、少なくとも2GBのRAMを搭載したCentOS7サーバーが必要です。 ルートまたはスーパーユーザーアクセスも必要です( CentOS 7 を使用したサーバーの初期設定の手順1〜4)。
RAMが2GB未満の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が推奨する最新バージョンのOracleJava8をインストールします。 ただし、そのルートを選択する場合は、OpenJDKで正常に機能するはずです。 このセクションの手順に従うことは、JavaSEのOracleBinaryLicenseAgreementに同意することを意味します。
ホームディレクトリに移動し、次のコマンドを使用してOracle Java 8(Update 73、この記事の執筆時点で最新)JDKRPMをダウンロードします。
- 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より前のバージョンでのみ動作するため、Elasticsearch1.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」に置き換えると、次のようになります。
cluster.name: graylog-development
Elasticsearchインスタンス(ポート9200)への外部アクセスを制限して、部外者がHTTPAPIを介してデータを読み取ったりElasticsearchクラスターをシャットダウンしたりできないようにする必要があります。 network.host
を指定する行を見つけてコメントを外し、その値を「localhost」に置き換えて、次のようにします。
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
をインストールしましょう。
まず、次のコマンドを使用して、GraylogRPMパッケージをシステムにダウンロードします。
- 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
パラメーターに割り当てることによって割り当てられます。 次のコマンドを使用して、目的のパスワードのシャサムを作成します。強調表示された「パスワード」を独自のパスワードに置き換えます。 sedコマンドは、それをGraylog構成に挿入します。
- PASSWORD=$(echo -n password | 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
を構成します。これは、GraylogWebインターフェイスがサーバーと通信する方法です。 すべてのコンポーネントを単一のサーバーにインストールするため、値を127.0.0.1
またはlocalhost
に設定しましょう。 rest_transport_uri
を見つけてコメントを外し、次のように値を変更します。
rest_transport_uri = http://127.0.0.1:12900/
次に、Elasticsearchシャード(このサーバーで実行されている)が1つしかないため、elasticsearch_shards
の値を1に変更します:
elasticsearch_shards = 1
次に、elasticsearch_cluster_name
の値を「graylog-development」(Elasticsearch cluster.name
と同じ)に変更します。
elasticsearch_cluster_name = graylog-development
次の2行のコメントを解除して、マルチキャストの代わりにユニキャストを使用してElasticsearchインスタンスを検出します。
elasticsearch_discovery_zen_ping_multicast_enabled = false
elasticsearch_discovery_zen_ping_unicast_hosts = 127.0.0.1:9300
保存して終了します。 これで、graylog-server
が構成され、開始する準備が整いました。
次のサービスコマンドを使用してGraylogサーバーを起動します。
- sudo systemctl start graylog-server
次のステップは、GraylogWebインターフェースをインストールすることです。 今それをやろう!
GraylogWebをインストールします
次のコマンドを使用してGraylogWebをインストールします。
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
次に、Webインターフェイスの構成を更新して、graylog2-server.uris
パラメーターを指定する必要があります。 これは、サーバーのRESTURIのコンマ区切りのリストです。 グレイログサーバーノードは1つしかないため、値はグレイログサーバー構成のrest_listen_uri
の値と一致する必要があります(つまり、 「http://127.0.0.1:12900/」)。
graylog2-server.uris="http://127.0.0.1:12900/"
これで、GraylogWebインターフェイスが構成されました。 GraylogWebインターフェイスを起動します。
- sudo systemctl restart graylog-web
これで、GraylogWebインターフェイスを使用できます。 今それをしましょう。
syslogメッセージを受信するようにGraylogを構成する
GraylogWebインターフェイスにログインします
お気に入りのWebブラウザーで、サーバーのパブリックIPアドレスのポート9000
に移動します。
In a web browser:http://graylog_public_IP:9000/
ログイン画面が表示されます。 以前に設定したユーザー名と管理者パスワードとしてadmin
を入力します。
ログインすると、次のようなメッセージが表示されます。
上部の赤い数字は通知です。 それをクリックすると、実行中の入力がないノードがあることを示すメッセージが表示されます。 ここで、UDPを介してsyslogメッセージを受信するための入力を追加しましょう。
SyslogUDP入力を作成する
syslogメッセージを受信するための入力を追加するには、トップメニューのシステムドロップダウンをクリックします。
次に、ドロップダウンメニューから入力を選択します。
ドロップダウンメニューからSyslogUDP を選択し、新しい入力の起動ボタンをクリックします。
「新しい入力を起動します: SyslogUDP」モーダルウィンドウがポップアップ表示されます。 次の情報を入力します(バインドアドレスをサーバーのプライベートIPアドレスに置き換えます)。
- タイトル:
syslog
- ポート:
8514
- バインドアドレス:
graylog_private_IP
次に、起動をクリックします。
これで、ローカル入力セクションに「syslog」という名前の入力が表示されます(横に「実行中」と表示された緑色のボックスが表示されます)。
これで、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
このファイルに、次の行を追加して、syslogメッセージをGraylogサーバーに送信するようにrsyslogを構成します(graylog_private_IP
をGraylogサーバーのプライベートIPアドレスに置き換えます)。
$template GRAYLOGRFC5424,"<%pri%>%protocol-version% %timestamp:::date-rfc3339% %HOSTNAME% %app-name% %procid% %msg%\n"
*.* @graylog_private_IP:8514;GRAYLOGRFC5424
保存して終了します。 このファイルは、今後rsyslog構成の一部としてロードされます。 次に、変更を有効にするためにrsyslogを再起動する必要があります。
- sudo systemctl restart rsyslog
監視するすべてのサーバーでrsyslogの構成が完了したら、GraylogWebインターフェイスに戻ります。
グレイログソースの表示
お気に入りのWebブラウザーで、サーバーのパブリックIPアドレスのポート9000
に移動します。
In a web browser:http://graylog_public_IP:9000/
トップバーのソースをクリックします。 rsyslogを構成したすべてのサーバーのリストが表示されます。
ソースのホスト名は左側にあり、Graylogによって受信されたメッセージの数は右側にあります。
グレイログデータの検索
しばらくの間Graylogにメッセージを収集させた後、メッセージを検索できるようになります。 例として、「sshd」を検索して、サーバーでどのようなSSHアクティビティが発生しているかを確認しましょう。 結果の抜粋は次のとおりです。
ご覧のとおり、検索結果の例では、さまざまなサーバーのsshdログが明らかになり、rootログインの試行に多くの失敗がありました。 結果は異なる場合がありますが、権限のないユーザーがサーバーにアクセスしようとしている方法など、多くの問題を特定するのに役立ちます。
すべてのソースの基本的な検索機能に加えて、特定のホストのログを特定の時間枠で検索できます。
インシデントが発生した後に1つまたは複数のサーバーのログを確認する場合など、Graylogのデータを検索すると便利です。 一元化されたロギングにより、発生したすべてのイベントを確認するために複数のサーバーにログインする必要がないため、関連するインシデントの関連付けが容易になります。
検索バーの仕組みの詳細については、公式ドキュメントをご覧ください: Graylog Searching
結論
これでGraylogが設定されたので、Graylogが提供する他の機能を自由に調べてください。 他の種類のログをGraylogに送信し、エクストラクタを設定して(または、logstashなどのソフトウェアでログを再フォーマットして)、ログをより構造化して検索できるようにすることができます。 コンポーネントを分離し、冗長性を追加してパフォーマンスと可用性を向上させることにより、Graylog環境の拡張を検討することもできます。
幸運を!