ウェブサイト検索

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


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

過去数日間、このタスクは各ログの種類を個別に処理して、ほとんど手動で実行する必要がありました。幸いなことに、サーバー側のElasticsearchLogstash、およびKibanaとクライアント側のFilebeatの組み合わせは、サイドでは、かつては困難だったタスクが、今日の公園の散歩のように見えます。

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

推奨読書: Linux 用の 4 つの優れたオープンソース ログ監視および管理ツール

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

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

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 は、クライアントから送信されたログを保存します。
  2. Logstash はこれらのログを処理します。
  3. Kibana は、ログの検査と分析に役立つ Web インターフェイスを提供します。

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

まずはここの 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

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

Elasticsearch リポジトリを有効にする

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. ElasticsearchHTTP 経由の単純なリクエストに応答するかどうかを確認します。

curl -X GET http://localhost:9200

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

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

推奨読書: CentOS 7 でのシステム ログの管理 (構成、ローテーション、データベースへのインポート)

Logstash リポジトリを有効にする

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

[ 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

Kibana リポジトリを有効にする

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 をインストールして設定した後、ここに戻ります。

推奨読書: Linux の「Log.io」ツールを使用してサーバー ログをリアルタイムで監視する

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

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

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

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

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

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

3. CentOSFilebeat のリポジトリ (/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 を構成する

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

  1. パスで、どのログ ファイルを ELK サーバーに「送信」する必要があるかを指定します。
  2. 探鉱者の下:
input_type: log
document_type: syslog
  1. 出力の下:

    1. logstash で始まる行のコメントを解除します。
    2. Logstash がホストでリッスンしている ELK サーバーの IP アドレスとポートを指定します。
    3. 証明書へのパスが、上記のステップ I (Logstash セクション) で作成した実際のファイルを指していることを確認してください。

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

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

systemctl restart filebeat

クライアントに対する上記の手順が完了したら、そのまま続行してください。

ファイルビートのテスト

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

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

出力は次のようになります (/var/log/messages/var/log/secure からのメッセージが client1 からどのように受信されているかに注目してください)およびクライアント 2):

それ以外の場合は、Filebeat 設定ファイルにエラーがないか確認してください。

journalctl -xe

再起動を試行すると、Filebeat は問題のある行を指摘します。

キバナのテスト

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

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

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

後ほどさらに詳細な検索条件を入力できるようになりますのでご注意ください。次に、緑色の四角形内の星をクリックして、デフォルトのインデックス パターンとして設定します。

最後に、[検出] メニューには、ログ視覚化レポートに追加するフィールドがいくつかあります。それらの上にマウスを移動し、[追加] をクリックします。

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

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

まとめ

この記事では、CentOS 7 マシンと Debian 8 マシンの 2 つのクライアントから送信されたシステム ログを収集するために ELK スタックをセットアップする方法を説明しました。

Elasticsearch の公式ドキュメントを参照して、この設定を使用してログをより効率的に検査および分析する方法の詳細を確認できるようになりました。

ご質問がございましたら、お気軽にお問い合わせください。お返事おまちしております。