CentOS 8 に Elastic Stack をインストールして設定する(Elasticsearch / Logstash / Kibana / Filebeat)

このチュートリアルでは、CentOS 8 サーバーに Elastic Stack(Elasticsearch、Logstash、Kibana)を導入し、クライアント側の Ubuntu/CentOS に Filebeat を設定してログを収集・可視化する手順を詳述します。基本的なリバースプロキシ(Nginx)とベーシック認証の設定、Logstash の grok フィルタ、Filebeat モジュールの有効化、テスト方法、運用に必要なチェックリストとトラブルシューティングも含みます。
重要: この記事は CentOS 8 をマスター(サーバー)として、クライアントに CentOS 8 および Ubuntu 18.04 を想定した構築手順です。プロダクション環境では必ず TLS、認証、アクセス制御、監視を有効化してください。
目的と対象読者
- 目的: CentOS 8 上に Elastic Stack をインストールしてログ収集パイプライン(Filebeat → Logstash → Elasticsearch → Kibana)を構築する。
- 想定読者: Linux (RHEL/CentOS/Ubuntu) の基本操作と systemd、vim、dnf/apt の利用に慣れている方。
この記事で扱うバリアント(検索意図の例)
- CentOS 8 Elastic Stack インストール
- ELK スタック セットアップ CentOS
- Filebeat Logstash Elasticsearch Kibana 設定
- Kibana を Nginx で保護する方法
- Logstash Grok フィルタ実装
Important: 以下のコマンドは root または sudo 権限で実行してください。OS のパッケージ管理やネットワーク設定によっては追加の変更が必要です。
前提条件
- elk-master: CentOS 8 64bit, 推奨メモリ 4GB 以上
- client01: CentOS 8 64bit, 1GB 以上
- client02: Ubuntu 18.04 64bit, 1GB 以上
- ネットワーク接続可能(ポート 9200/5601/5044/80 など)
用語(1行定義)
- Elasticsearch: 分散型全文検索エンジン。データを JSON ドキュメントで保存する。
- Logstash: イベントやログを受け取り、加工して出力するパイプラインツール。
- Kibana: Elasticsearch のデータを可視化するダッシュボード。
- Filebeat: 軽量なログシッパー(beats)。
やること(概要)
- Elastic リポジトリ追加
- Elasticsearch のインストールと基本設定
- Kibana のインストールと基本設定
- Nginx をリバースプロキシ兼ベーシック認証として設定
- Logstash のインストールと入力/フィルタ/出力設定
- Filebeat のインストール(CentOS/Ubuntu)と Logstash への転送設定
- Kibana でのインデックス作成と動作確認
- 運用チェックリスト、セキュリティ強化、トラブルシューティング
Step 1 - Elastic リポジトリを追加する
まずは Elastic 製品群(Elasticsearch、Logstash、Kibana、Beats)を公式リポジトリからインストールできるように、GPG キーとリポジトリを追加します。
GPG キーを追加:
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
リポジトリファイルを作成します:
cd /etc/yum.repos.d/
vim elasticsearch.repo
以下を貼り付けます:
[elasticsearch-7.x]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
保存して閉じたら、リポジトリ一覧を確認します:
dnf repolist
リポジトリが表示されればインストール準備完了です。
Step 2 - Elasticsearch をインストールして設定する
Elasticsearch をインストールします:
sudo dnf install elasticsearch -y
設定ファイルを編集します:
cd /etc/elasticsearch/
vim elasticsearch.yml
最低限、外部公開しない場合は次の設定をアンコメントしてローカルバインドにします:
network.host: 127.0.0.1
http.port: 9200
ヒープサイズは JVM 設定で調整できます。利用可能メモリに応じて Xms/Xmx を設定してください。
vim jvm.options
例(低メモリ環境):
-Xms512m
-Xmx512m
systemd をリロードして、起動と自動起動を有効化します:
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch
sudo systemctl start elasticsearch
動作確認:
curl -XGET 'http://127.0.0.1:9200/?pretty'
期待される挙動: クラスター名、ノード情報、バージョンなどが JSON で返る。
Notes: 本番では network.host を 0.0.0.0 にして公開する場合でも TLS と認証を必ず有効にしてください。
Step 3 - Kibana ダッシュボードをインストールして設定する
Kibana をインストールします:
sudo dnf install kibana
設定ファイルを編集します:
cd /etc/kibana/
vim kibana.yml
最低限の設定:
server.port: 5601
server.host: "127.0.0.1"
elasticsearch.url: "http://127.0.0.1:9200"
systemd に登録して起動します:
sudo systemctl enable kibana
sudo systemctl start kibana
サービス状態確認:
systemctl status kibana
netstat -plntu
Kibana はデフォルトで TCP 5601 で待ち受けます。
Step 4 - Kibana に対して Nginx をリバースプロキシとして設定する
Kibana を直接公開する代わりに、Nginx をリバースプロキシとして前段に置き、ベーシック認証で保護します。
インストール:
sudo dnf install nginx httpd-tools
Nginx 設定ファイルを作成:
cd /etc/nginx/conf.d/
vim kibana.conf
以下を貼り付けます(server_name は環境に合わせて変更してください):
server {
listen 80;
server_name elk.hakase-labs.io;
auth_basic "Restricted Access";
auth_basic_user_file /etc/nginx/.kibana-user;
location / {
proxy_pass http://127.0.0.1:5601;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
基本認証ユーザーを作成します(hakase を任意のユーザー名に置き換えてください):
sudo htpasswd -c /etc/nginx/.kibana-user hakase
Nginx 設定の文法チェックと起動:
nginx -t
systemctl enable nginx
systemctl start nginx
Important: HTTPS(TLS)を使わず HTTP で公開するのは推奨しません。本番は必ず TLS 証明書を導入してください(Lets Encrypt など)。
Step 5 - Logstash をインストールして設定する
Logstash は Beats や syslog を受け取り、grok 等でパースして Elasticsearch に出力します。
インストール:
sudo dnf install logstash
JVM ヒープを設定します:
cd /etc/logstash/
vim jvm.options
例:
-Xms512m
-Xmx512m
Logstash の設定ファイル群は /etc/logstash/conf.d/ に配置します。まず beats 入力を作成します:
cd /etc/logstash/conf.d/
vim input-beat.conf
内容:
input {
beats {
port => 5044
}
}
syslog 用の grok フィルタを作成します:
vim syslog-filter.conf
内容:
filter {
if [type] == "syslog" {
grok {
match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
add_field => [ "received_at", "%{@timestamp}" ]
add_field => [ "received_from", "%{host}" ]
}
date {
match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ]
}
}
}
Elasticsearch 出力設定:
vim output-elasticsearch.conf
内容:
output {
elasticsearch { hosts => ["127.0.0.1:9200"]
hosts => "127.0.0.1:9200"
manage_template => false
index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
document_type => "%{[@metadata][type]}"
}
}
サービスを有効化して起動します:
systemctl enable logstash
systemctl start logstash
ステータス確認:
systemctl status logstash
netstat -plntu
Logstash はデフォルトで TCP 5044 を待ち受けます。
Notes: Logstash のパフォーマンスは JVM、プラグイン、フィルタの複雑さ、バッファサイズに依存します。負荷が高い場合はパイプラインワーカー数やフィルタを見直してください。
Step 6 - クライアントに Filebeat をインストールして設定する
Filebeat を使ってクライアントから Logstash にログを流します。以下は CentOS と Ubuntu の手順です。
Filebeat を CentOS 8 にインストール
GPG キーとリポジトリを追加(マスターと同様):
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
cd /etc/yum.repos.d/
vim elasticsearch.repo
貼り付け:
[elasticsearch-7.x]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
インストール:
sudo dnf install filebeat
Filebeat を Ubuntu 18.04 にインストール
apt の https トランスポートを導入:
sudo apt install apt-transport-https
GPG キーとリポジトリ追加:
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
パッケージ更新とインストール:
sudo apt update
sudo apt install filebeat
Filebeat の設定
Filebeat の設定は /etc/filebeat/filebeat.yml にあります。まずは Elasticsearch 直結の出力を無効化し、Logstash 出力を有効にします。
cd /etc/filebeat/
vim filebeat.yml
例: Elasticsearch 出力をコメントアウトし、Logstash を指定します。
#output.elasticsearch:
# Array of hosts to connect to.
# hosts: ["127.0.0.1:9200"]
output.logstash:
# The Logstash hosts
hosts: ["10.5.5.25:5044"]
Filebeat モジュールを確認して、system モジュールを有効にします:
filebeat modules list
filebeat modules enable system
有効化されたモジュールの設定ファイルは modules.d/system.yml に作成されます。編集して syslog と auth ログのパスを OS に合わせて設定します。
CentOS 用:
# Syslog
syslog:
enabled: true
var.paths: ["/var/log/messages"]
# Authorization logs
auth:
enabled: true
var.paths: ["/var/log/secure"]
Ubuntu 用:
# Syslog
syslog:
enabled: true
var.paths: ["/var/log/syslog"]
# Authorization logs
auth:
enabled: true
var.paths: ["/var/log/auth.log"]
サービスを有効化して起動します:
systemctl enable filebeat
systemctl start filebeat
systemctl status filebeat
CentOS の結果例:
Ubuntu の結果例:
接続先 IP(例)は 10.5.5.12 など環境に合わせてください。
Step 7 - Kibana での確認とインデックス作成
ブラウザで Nginx の公開アドレスにアクセスします:
ベーシック認証を通過して Kibana にログインします。
Kibana ダッシュボードにログイン後、Filebeat が作成したインデックスに接続します。”Connect to your Elasticsearch index” を選び、filebeat-* インデックスパターンを作成します。タイムフィールドは @timestamp を選択します。
作成後、Discover(検索)でログが表示されることを確認します。
Discover で Filebeat クライアントから届いたログが確認できれば一通りの流れは完了です。
CentOS のログ例:
Ubuntu のログ例:
結果として、Filebeat の system モジュールで定義したログが Logstash を経由して Elasticsearch に登録され、Kibana で可視化できるようになりました。
運用に役立つ付録とベストプラクティス
ファクトボックス(主要デフォルト値)
- Elasticsearch デフォルト HTTP ポート: 9200
- Kibana デフォルトポート: 5601
- Logstash Beats ポート: 5044
- Filebeat の system モジュールが収集する代表ファイル: /var/log/messages, /var/log/syslog, /var/log/secure, /var/log/auth.log
- JVM ヒープの目安: 小規模検証では 512MB~2GB。本番環境ではシステムメモリの半分以下、かつ Xms = Xmx を推奨。
役割別チェックリスト
管理者(インフラ)
- リポジトリと GPG キーを全サーバに配布
- systemd のユニットを監視(restart on-failure 設定)
- 監視(Elasticsearch のヘルス、JVM メトリクス)を導入
セキュリティ担当
- Elasticsearch / Kibana / Logstash の通信に TLS を導入
- Kibana と API に認証・ RBAC(X-Pack / Elastic Security)を設定
- Nginx で最低限のベーシック認証とファイアウォール制御
開発者 / SRE
- Grok フィルタのテスト(grokdebugger 等)
- ログのスキーマ(フィールド名、タイムスタンプ)を標準化
セキュリティ強化(推奨手順)
- Elasticsearch と Kibana 間、Logstash と Elasticsearch 間、Filebeat と Logstash 間に TLS を導入。自己署名でも良いが、可能なら内部 CA を利用。
- Elasticsearch のユーザー管理を有効化して、最小権限のロールを付与。
- Kibana は Nginx で TLS 終端し、強い暗号スイートを使用。
- ファイアウォールで必要なポートのみ開放(例: 9200 は内部ネットワークのみ)。
トラブルシューティングとロールバックの手順(要約)
Elasticsearch 起動失敗
- systemctl status elasticsearch を確認
- /var/log/elasticsearch/ のログで例外を確認(メモリ不足、プラグインエラーなど)
- jvm.options の Xms/Xmx を見直す
Logstash が Beats を受け取らない
- netstat -plntu で 5044 が LISTEN になっているか
- filebeat 側の設定で output.logstash のホストとポートが正しいか
- Logstash のログ (/var/log/logstash/logstash-plain.log) を確認
Kibana にログが表示されない
- Filebeat → Logstash → Elasticsearch のフローを順に確認
- Elasticsearch にインデックスが作成されているか curl で確認: curl -XGET ‘http://127.0.0.1:9200/_cat/indices?v’
- インデックスパターンのタイムフィールドが正しいか
ロールバック: 設定を変更した直後は systemd の rollback(以前のユニットに戻す)の機能はないため、変更前の設定ファイルのバックアップを必ず保持してください(例: cp elasticsearch.yml elasticsearch.yml.bak)。
互換性と移行のヒント
- Elasticsearch のメジャーバージョン間は互換性に注意(7.x → 8.x は breaking changes が存在)。アップグレード前に公式の移行ドキュメントを確認。
- Beats と Elasticsearch/Logstash のバージョンは互換性表を参照。一般に近いメジャーバージョン同士を使用する。
代替アプローチ
- Docker コンテナや Docker Compose を使って Elastic Stack を構築する(環境の再現性が高い)。
- Elastic Cloud(ホステッド版)を使えばインフラ運用が不要になる。
- Filebeat を使わずに rsyslog や Fluentd を利用して Logstash に送ることも可能。
いつこの構成が適さないか(カウンター例)
- ログ量が非常に多く、単一ノードでは処理しきれない場合。スケールアウト設計(Elasticsearch クラスター、Logstash 複数ノード)が必要。
- セキュリティ要件で自前ホストの運用が許されない場合は、マネージドサービスを検討。
運用のための簡易 SOP(チェックリスト)
- 毎日: Elasticsearch ノードのヘルスを確認(_cluster/health)
- 週次: インデックスサイズと割当を確認し、古いインデックスを削除/ロールオーバー
- 重大障害発生時: 直近の設定変更をロールバック、サービス再起動、ログ収集
- 定期バックアップ: Snapshot を S3 等に保存
テストケース / 受入基準(抜粋)
- Filebeat を起動後、クライアントで発生した syslog イベントが 1 分以内に Kibana Discover で確認できること
- Logstash が 5044 で待ち受け、接続が確立すること
- Kibana にログイン後、filebeat-* インデックスパターンで @timestamp によるフィルタが動作すること
1行用語集(重要語)
- index: Elasticsearch のデータコンテナ(RDB のテーブルに相当)
- shard: インデックスの分割単位
- node: Elasticsearch の単一プロセス/サーバ
- cluster: Elasticsearch のノード集合
まとめ
このガイドでは、CentOS 8 に Elastic Stack を導入し、Logstash を介した Filebeat からのログ収集、Kibana による可視化までの一連の流れを説明しました。運用にあたっては TLS や認証、監視の導入を強く推奨します。障害時はログ(/var/log/ 以下)と systemd のステータスを順に確認することが最も重要です。
Reference