テクノロジーガイド

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

4 min read チュートリアル 更新されました 18 Oct 2025
CentOS 8 に Elastic Stack をインストールする手順
CentOS 8 に Elastic Stack をインストールする手順

このチュートリアルでは、CentOS 8 サーバーに Elastic Stack(Elasticsearch、Logstash、Kibana)を導入し、クライアント側の Ubuntu/CentOS に Filebeat を設定してログを収集・可視化する手順を詳述します。基本的なリバースプロキシ(Nginx)とベーシック認証の設定、Logstash の grok フィルタ、Filebeat モジュールの有効化、テスト方法、運用に必要なチェックリストとトラブルシューティングも含みます。

Elastic Stack の構成図

重要: この記事は 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

dnf でリポジトリ一覧を確認している様子

リポジトリが表示されればインストール準備完了です。


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

Elasticsearch を起動している様子

動作確認:

curl -XGET 'http://127.0.0.1:9200/?pretty'

期待される挙動: クラスター名、ノード情報、バージョンなどが JSON で返る。

Elasticsearch への接続テスト結果

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

Kibana をインストールしている様子

サービス状態確認:

systemctl status kibana
netstat -plntu

Kibana はデフォルトで TCP 5601 で待ち受けます。

Kibana のステータス確認画面


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

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

Logstash を設定している様子

ステータス確認:

systemctl status logstash
netstat -plntu

Logstash はデフォルトで TCP 5044 を待ち受けます。

Logstash ステータス画面

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 を CentOS にインストールしている様子

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

apt の https トランスポートをインストールしている様子

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 の結果例:

CentOS の Filebeat 結果

Ubuntu の結果例:

Ubuntu の Filebeat 結果

接続先 IP(例)は 10.5.5.12 など環境に合わせてください。


Step 7 - Kibana での確認とインデックス作成

ブラウザで Nginx の公開アドレスにアクセスします:

http://elk.hakase-labs.io/

ベーシック認証を通過して Kibana にログインします。

Kibana ログイン画面

Kibana ダッシュボードにログイン後、Filebeat が作成したインデックスに接続します。”Connect to your Elasticsearch index” を選び、filebeat-* インデックスパターンを作成します。タイムフィールドは @timestamp を選択します。

作成後、Discover(検索)でログが表示されることを確認します。

Kibana のダッシュボード画面

インデックスパターン作成画面

タイムフィールド選択画面

Discover で Filebeat クライアントから届いたログが確認できれば一通りの流れは完了です。

Discover で Filebeat のログを確認

CentOS のログ例:

CentOS 8 のログ表示

Ubuntu のログ例:

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 等)
    • ログのスキーマ(フィールド名、タイムスタンプ)を標準化

セキュリティ強化(推奨手順)

  1. Elasticsearch と Kibana 間、Logstash と Elasticsearch 間、Filebeat と Logstash 間に TLS を導入。自己署名でも良いが、可能なら内部 CA を利用。
  2. Elasticsearch のユーザー管理を有効化して、最小権限のロールを付与。
  3. Kibana は Nginx で TLS 終端し、強い暗号スイートを使用。
  4. ファイアウォールで必要なポートのみ開放(例: 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(チェックリスト)

  1. 毎日: Elasticsearch ノードのヘルスを確認(_cluster/health)
  2. 週次: インデックスサイズと割当を確認し、古いインデックスを削除/ロールオーバー
  3. 重大障害発生時: 直近の設定変更をロールバック、サービス再起動、ログ収集
  4. 定期バックアップ: 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

共有する: X/Twitter Facebook LinkedIn Telegram
著者
編集

類似の素材

Linux負荷監視: atop入門と実践ガイド
監視

Linux負荷監視: atop入門と実践ガイド

EVE Onlineのパケットロス対策ガイド
ネットワーク

EVE Onlineのパケットロス対策ガイド

電源ボタンなしでAndroidを安全にシャットダウンする方法
Android

電源ボタンなしでAndroidを安全にシャットダウンする方法

Windows 10で.NET Runtime Optimizationの高CPUを修正
Windows 10

Windows 10で.NET Runtime Optimizationの高CPUを修正

iPhoneで天気アプリをモバイル回線でも更新する方法
使い方

iPhoneで天気アプリをモバイル回線でも更新する方法

Windows 11でタスクバーのピン操作を無効化する方法
Windows

Windows 11でタスクバーのピン操作を無効化する方法