ウェブサイト検索

RHEL LinuxにElastic Stack(ELK)をインストールする方法


もしあなたが、Linuxのシステムログの検査と分析を担当している人、または過去に担当していた人であれば、複数のサービスが同時に監視されている場合、その作業がどれほど大変かを知っているでしょう。

昔は、その作業は主に手動で行われ、各ログタイプが別々に処理されていました。幸運なことに、サーバー側のElasticsearch、Logstash、およびKibanaの組み合わせと、クライアント側のFilebeatがあるおかげで、かつては難しかったその作業が、今日では気軽にできるようになりました。

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

Javaベースの組み込みウェブインターフェースにより、ログを迅速に確認でき、比較やトラブルシューティングが容易になります。これらのクライアントログは、ログ配送エージェントとして説明できるFilebeatによって中央サーバーに送信されます。

テスト環境

これらの要素がどのように組み合わさるか見てみましょう。私たちのテスト環境は、以下の機械で構成されます:

Central Server: RHEL with IP address 192.168.100.247
Client Machine #1: Fedora with IP address 192.168.100.133
Client Machine #2: Debian with IP address 192.168.0.134

ELKスタック(Elasticsearch、Logstash、Kibana)のRAM要件は、データ量、クエリの複雑さ、環境のサイズなどの要因によって異なる可能性があることにご注意ください。

RHELにELKスタックをインストールする方法

まず、中央サーバー(私たちのRHEL 9システム)にELKスタックをインストールすることから始めましょう。同じ手順はRockyやAlma LinuxなどのRHELベースのディストリビューションにも適用されます。

それぞれのコンポーネントが何をするのかについて、簡単に説明して理解しましょう:

  • Elasticsearch はクライアントから送信されるログを保存します。
  • Logstash はそれらのログを処理します。
  • Kibana は、ログを検査および分析するために役立つウェブインターフェースを提供します。

中央サーバーに以下のパッケージをインストールします。まず最初に、ELKコンポーネントの依存関係であるJava JDKのバージョン21(この文を書いている時点での最新バージョン)をインストールします。

まずこちらのJavaダウンロードページをチェックして、新しいアップデートが利用可能かどうかを確認した方がいいかもしれません。

yum update
cd /opt
wget https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.rpm
rpm -Uvh jdk-21_linux-x64_bin.rpm

インストールが成功したか確認する時間です:

java -version


java version "21.0.2" 2024-01-16 LTS
Java(TM) SE Runtime Environment (build 21.0.2+13-LTS-58)
Java HotSpot(TM) 64-Bit Server VM (build 21.0.2+13-LTS-58, mixed mode, sharing)

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

RHELにElasticsearchをインストールする

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

rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

2. 次の行をリポジトリ設定ファイル elasticsearch.repo に挿入してください:

[elasticsearch]
name=Elasticsearch repository for 8.x packages
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=0
autorefresh=1
type=rpm-md

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

yum install --enablerepo=elasticsearch 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. curlコマンドを使用して、HTTP経由でElasticsearchが簡単なリクエストに応答するか確認してください。

curl -X GET http://localhost:9200

上記のコマンドの出力は、次のようになるはずです:

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

RHELにLogstashをインストールする

7. 次の行をリポジトリ設定ファイル /etc/yum.repos.d/logstash.repo に挿入してください:

[logstash-8.x]
name=Elastic repository for 8.x packages
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

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

yum install logstash

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

[ v3_ca ]
subjectAltName = IP: 192.168.100.247

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を開始して有効にする:

systemctl daemon-reload
systemctl start logstash
systemctl enable logstash

13. クライアントからのログを取得するために、Logstashがファイアウォールで許可されるように設定します(TCPポート5044)。

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

RHELにKibanaをインストールする

13. 次の行をリポジトリ構成ファイル /etc/yum.repos.d/kibana.repo に挿入してください:

[kibana-8.x]
name=Kibana repository for 8.x packages
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

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

yum install kibana

15. Kibanaを開始して有効にします。

systemctl daemon-reload
systemctl start kibana
systemctl enable kibana

16. 別のコンピュータからKibanaのウェブインターフェースにアクセスできることを確認してください(TCPポート5601でのトラフィックを許可します):

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

17. ウェブインターフェースにアクセスできることを確認するためにKibanaを起動します:

http://localhost:5601
OR
http://IP.com:5601

クライアントマシンにFilebeatをインストールする

私たちは、クライアント #1に対してこれをどのように行うかを示します(その後、クライアント #2に対しても繰り返し、配信に応じて変更するパスを変更します)。

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

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

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

rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

3. RHELベースのディストリビューションに対して、Filebeatのためのリポジトリを作成します (/etc/yum.repos.d/filebeat.repo):

[elastic-8.x]
name=Elastic repository for 8.x packages
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

4. Debian系ディストリビューションにFilebeatをインストールするためのソースを設定します:

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
sudo apt-get install apt-transport-https
echo "deb https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-8.x.list

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

yum install filebeat   [On RHEL and based Distros]
apt install filebeat   [On Debian and its derivatives]

6. Filebeatを開始して有効にします:

systemctl start filebeat
systemctl enable filebeat

Filebeatを設定する

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

  • パスの下で、どのログファイルをELKサーバーに「送信」すべきかを示します。
  • 探鉱者の下で:
input_type: log
document_type: syslog
  • 出力の下:

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

上記の手順は以下の画像に示されています。

変更を保存し、その後クライアントでFilebeatを再起動してください:

systemctl restart filebeat

クライアントで上記のステップを完了したら、自由に進めてください。

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-*を入力し、その後作成をクリックします:

後でより詳細な検索条件を設定できることにご注意ください。次に、緑の矩形の中にある星をクリックして、デフォルトのインデックスパターンとして設定します:

最後に、Discoverメニューでは、ログ視覚化レポートに追加するためのいくつかのフィールドを見つけることができます。それらにカーソルを合わせてAddをクリックしてください:

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

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

要約

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

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

ご質問がありましたら、遠慮なくお尋ねください。お返事を楽しみにしています。

関連記事: