CentOS / RHEL 7にElasticsearch、Logstash、およびKibana(ELKスタック)をインストールする方法


Linuxでシステムログの検査と分析を担当している、または過去に担当したことがある場合は、複数のサービスを同時に監視していると、そのタスクが悪夢になる可能性があることをご存知でしょう。

以前は、そのタスクはほとんど手動で実行する必要があり、各ログタイプは個別に処理されていました。幸い、サーバー側のElasticsearch、Logstash、Kibanaと、クライアント側のFilebeatの組み合わせにより、かつては困難だったタスクが今日の公園を散歩しているように見えます。

最初の3つのコンポーネントは、ELKスタックと呼ばれるものを形成します。その主な目的は、複数のサーバーから同時にログを収集することです(集中ログとも呼ばれます)。

組み込みのJavaベースのWebインターフェースを使用すると、ログを一目ですばやく検査して、比較とトラブルシューティングを容易にすることができます。これらのクライアントログは、ファイルビートによって中央サーバーに送信されます。ファイルビートは、ログ配布エージェントとして説明できます。

これらすべての要素がどのように組み合わされているかを見てみましょう。テスト環境は、次のマシンで構成されます。

Central Server: CentOS 7 (IP address: 192.168.0.29). 2 GB of RAM.
Client #1: CentOS 7 (IP address: 192.168.0.100). 1 GB of RAM.
Client #2: Debian 8 (IP address: 192.168.0.101). 1 GB of RAM.

ここで提供されるRAM値は厳密な前提条件ではありませんが、中央サーバーにELKスタックを正常に実装するための推奨値であることに注意してください。クライアントのRAMが少なくても、たとえあったとしても、大きな違いはありません。

サーバーへのELKスタックのインストール

ELKスタックをサーバーにインストールすることから始めましょう。また、各コンポーネントの機能について簡単に説明します。

  1. Elasticsearch stores the logs that are sent by the clients.
  2. Logstash processes those logs.
  3. Kibana provides the web interface that will help us to inspect and analyze the logs.

次のパッケージを中央サーバーにインストールします。まず、ELKコンポーネントの依存関係であるJava JDKバージョン8(アップデート102、この記事の執筆時点で最新のもの)をインストールします。

ここのJavaダウンロードページで最初にチェックして、利用可能な新しいアップデートがあるかどうかを確認することをお勧めします。

# yum update
# cd /opt
# 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/8u102-b14/jre-8u102-linux-x64.rpm"
# rpm -Uvh jre-8u102-linux-x64.rpm

インストールが正常に完了したかどうかを確認する時間:

# java -version

Elasticsearch、Logstash、およびKibanaの最新バージョンをインストールするには、次のように手動でyumのリポジトリを作成する必要があります。

1.Elasticsearchの公開GPGキーをrpmパッケージマネージャーにインポートします。

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

2.リポジトリ構成ファイル elasticsearch.repo に次の行を挿入します。

[elasticsearch]
name=Elasticsearch repository
baseurl=http://packages.elastic.co/elasticsearch/2.x/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1

3.Elasticsearchパッケージをインストールします。

# yum install elasticsearch

インストールが完了すると、elasticsearchを開始して有効にするように求められます。

4.サービスを開始して有効にします。

# systemctl daemon-reload
# systemctl enable elasticsearch
# systemctl start elasticsearch

5.ファイアウォールのTCPポート9200を通過するトラフィックを許可します。

# firewall-cmd --add-port=9200/tcp
# firewall-cmd --add-port=9200/tcp --permanent

6.ElasticsearchがHTTPを介した単純なリクエストに応答するかどうかを確認します。

# curl -X GET http://localhost:9200

上記のコマンドの出力は次のようになります。

上記の手順を完了してから、Logstashに進んでください。 LogstashとKibanaの両方がElasticsearchGPGキーを共有しているため、パッケージをインストールする前にキーを再インポートする必要はありません。

7.次の行をリポジトリ構成ファイル logstash.repo に挿入します。

[logstash]
name=Logstash
baseurl=http://packages.elasticsearch.org/logstash/2.2/centos
gpgcheck=1
gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch
enabled=1

8.Logstashパッケージをインストールします。

# yum install logstash

9. /etc/pki/tls/openssl.cnf [v3_ca] セクションの下の次の行に、ELKサーバーのIPアドレスに基づいたSSL証明書を追加します。 >:

[ v3_ca ]
subjectAltName = IP: 192.168.0.29

10。365日間有効な自己署名証明書を生成します。

# cd /etc/pki/tls
# openssl req -config /etc/pki/tls/openssl.cnf -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt

11. Logstashの入力、出力、およびフィルターファイルを構成します。

入力: /etc/logstash/conf.d/input.conf を作成し、次の行を挿入します。これは、Logstashがクライアントからのビートを処理する方法を「学習」するために必要です。前の手順で概説したように、証明書とキーへのパスが正しいパスと一致していることを確認してください。

input {
  beats {
	port => 5044
	ssl => true
	ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
	ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
  }
}

出力( /etc/logstash/conf.d/output.conf )ファイル:

output {
  elasticsearch {
	hosts => ["localhost:9200"]
	sniffing => true
	manage_template => false
	index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
	document_type => "%{[@metadata][type]}"
  }
}

フィルタ( /etc/logstash/conf.d/filter.conf )ファイル。簡単にするためにsyslogメッセージをログに記録します。

filter {
if [type] == "syslog" {
	grok {
  	match => { "message" => "%{SYSLOGLINE}" }
	}

	date {
match => [ "timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
}
  }
}

12.Logstash構成ファイルを確認します。

# service logstash configtest

13.logstashを開始して有効にします。

# systemctl daemon-reload
# systemctl start logstash
# systemctl enable logstash

14. Logstashがクライアント(TCPポート5044)からログを取得できるようにファイアウォールを構成します。

# firewall-cmd --add-port=5044/tcp
# firewall-cmd --add-port=5044/tcp --permanent

14.リポジトリ構成ファイル kibana.repo に次の行を挿入します。

[kibana]
name=Kibana repository
baseurl=http://packages.elastic.co/kibana/4.4/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1

15.Kibanaパッケージをインストールします。

# yum install kibana

16.Kibanaを起動して有効にします。

# systemctl daemon-reload
# systemctl start kibana
# systemctl enable kibana

17.別のコンピューターからKibanaのWebインターフェースにアクセスできることを確認します(TCPポート5601でのトラフィックを許可します)。

# firewall-cmd --add-port=5601/tcp
# firewall-cmd --add-port=5601/tcp --permanent

18. Kibana( http://192.168.0.29:5601 )を起動して、Webインターフェイスにアクセスできることを確認します。

クライアントにFilebeatをインストールして構成した後、ここに戻ります。

クライアントサーバーにFilebeatをインストールする

クライアント#1に対してこれを行う方法を示します(後でクライアント#2についても繰り返し、ディストリビューションに該当する場合はパスを変更します)。

1.サーバーからクライアントにSSL証明書をコピーします。

# scp /etc/pki/tls/certs/logstash-forwarder.crt [email protected]:/etc/pki/tls/certs/

2.Elasticsearchの公開GPGキーをrpmパッケージマネージャーにインポートします。

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

3. CentOSベースのディストリビューションでFilebeatのリポジトリ( /etc/yum.repos.d/filebeat.repo )を作成します。

[filebeat]
name=Filebeat for ELK clients
baseurl=https://packages.elastic.co/beats/yum/el/$basearch
enabled=1
gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
gpgcheck=1

4.Debianとその派生物にFilebeatをインストールするようにソースを設定します。

# aptitude install apt-transport-https
# echo "deb https://packages.elastic.co/beats/apt stable main" > /etc/apt/sources.list.d/filebeat.list
# aptitude update

5.Filebeatパッケージをインストールします。

# yum install filebeat        [On CentOS and based Distros]
# aptitude install filebeat   [On Debian and its derivatives]

6.Filebeatを起動して有効にします。

# systemctl start filebeat
# systemctl enable filebeat

ここで注意が必要です。 Filebeatの設定はYAMLファイルに保存されるため、厳密なインデントが必要です。 /etc/filebeat/filebeat.yml を次のように編集するときは、これに注意してください。

  1. Under paths, indicate which log files should be “shipped” to the ELK server.
  2. Under prospectors:
input_type: log
document_type: syslog
  1. Under output:
    1. Uncomment the line that begins with logstash.
    2. Indicate the IP address of your ELK server and port where Logstash is listening in hosts.
    3. Make sure the path to the certificate points to the actual file you created in Step I (Logstash section) above.

    上記の手順を次の画像に示します。

    変更を保存してから、クライアントでFilebeatを再起動します。

    # systemctl restart filebeat
    

    クライアントで上記の手順を完了したら、お気軽に続行してください。

    クライアントからのログが正常に送受信できることを確認するには、ELKサーバーで次のコマンドを実行します。

    # curl -XGET 'http://localhost:9200/filebeat-*/_search?pretty'
    

    出力は次のようになります(/ var/log/messagesおよび/ var/log/secureからのメッセージがclient1およびclient2からどのように受信されているかに注意してください)。

    それ以外の場合は、Filebeat構成ファイルでエラーを確認してください。

    # journalctl -xe
    

    Filebeatを再起動しようとすると、問題のある行が表示されます。

    ログがクライアントによって送信され、サーバーで正常に受信されていることを確認した後。 Kibanaで最初に行う必要があるのは、インデックスパターンを構成し、それをデフォルトとして設定することです。

    リレーショナルデータベースのコンテキストでは、インデックスを完全なデータベースとして記述することができます。 filebeat- * を使用します(または、公式ドキュメントで説明されているように、より正確な検索条件を使用できます)。

    [インデックス名またはパターン]フィールドに filebeat- * と入力し、[作成]をクリックします。

    後で、よりきめ細かい検索条件を入力できるようになることに注意してください。次に、緑色の長方形内の星をクリックして、デフォルトのインデックスパターンとして構成します。

    最後に、[検出]メニューには、ログ視覚化レポートに追加するいくつかのフィールドがあります。それらにカーソルを合わせて、[追加]をクリックするだけです。

    結果は、上記のように画面の中央領域に表示されます。 Kibanaに慣れるために、自由に遊んでください(ログレポートのフィールドを追加および削除してください)。

    デフォルトでは、Kibanaは過去15分間に処理されたレコードを表示します(右上隅を参照)が、別の時間枠を選択することでその動作を変更できます。

    概要

    この記事では、CentOS7とDebian8の2台のクライアントから送信されたシステムログを収集するようにELKスタックを設定する方法について説明しました。

    これで、Elasticsearchの公式ドキュメントを参照し、このセットアップを使用してログをより効率的に検査および分析する方法の詳細を見つけることができます。

    ご不明な点がございましたら、お気軽にお問い合わせください。我々はあなたからの連絡を楽しみにしています。