2026年6月30日

2026年6月30日

ELKスタック(Elasticsearch+Logstash+Kibana)の構築方法

はじめに

WordPressのNginx/Apacheアクセスログを可視化したい・ELKスタックのインストール手順がわからない・Elasticsearchが起動しない・Kibanaに接続できないといった問題の解決方法を解説します。

症状・原因

  • Elasticsearchが起動しない(メモリ不足・JVMヒープサイズの設定不足)
  • KibanaがElasticsearch is not availableエラーを出す(接続設定のミス)
  • Logstashの設定ファイルの構文エラー
  • ログファイルの権限エラーでFilebeatがログを読めない

解決手順

ステップ1:前提条件を確認する

# ✅ Java のインストール確認(Elasticsearch/Logstash に必要)
java -version
# → openjdk version "17.x.x"

# ✅ Java をインストール
sudo apt install openjdk-17-jdk -y

# ✅ メモリを確認(ELKスタック全体で最低4GB推奨)
free -h
# → Mem: 8.0Gi ← 8GB推奨

# ✅ Elastic の GPG キーを追加
curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | \
    sudo gpg --dearmor -o /usr/share/keyrings/elastic-keyring.gpg

# ✅ APT リポジトリを追加
echo "deb [signed-by=/usr/share/keyrings/elastic-keyring.gpg] \
    https://artifacts.elastic.co/packages/8.x/apt stable main" | \
    sudo tee /etc/apt/sources.list.d/elastic-8.x.list

sudo apt update

ステップ2:Elasticsearch をインストール・設定する

# ✅ Elasticsearch をインストール
sudo apt install elasticsearch -y

# ✅ JVM ヒープサイズを設定(メモリの半分を目安)
sudo nano /etc/elasticsearch/jvm.options.d/heap.options
-Xms2g
-Xmx2g
# ✅ elasticsearch.yml を設定
sudo nano /etc/elasticsearch/elasticsearch.yml
# ✅ シングルノード設定
network.host: 127.0.0.1  # ローカルのみアクセス許可
http.port: 9200
discovery.type: single-node
xpack.security.enabled: false  # 開発環境では無効化
# ✅ 起動・確認
sudo systemctl enable elasticsearch
sudo systemctl start elasticsearch
curl http://localhost:9200
# → { "name": "...", "cluster_name": "elasticsearch", ... }

ステップ3:Logstash を設定する

# ✅ Logstash をインストール
sudo apt install logstash -y

# ✅ Nginx ログを解析する Logstash パイプラインを作成
sudo nano /etc/logstash/conf.d/nginx.conf
# ✅ Logstash パイプライン設定(Nginx ログ用)
input {
  file {
    path => "/var/log/nginx/access.log"
    start_position => "beginning"
    type => "nginx_access"
  }
}

filter {
  if [type] == "nginx_access" {
    grok {
      match => {
        "message" => '%{IPORHOST:remote_addr} - %{DATA:remote_user} \[%{HTTPDATE:time_local}\] "%{WORD:method} %{DATA:request} HTTP/%{NUMBER:http_version}" %{NUMBER:status} %{NUMBER:bytes_sent} "%{DATA:http_referer}" "%{DATA:http_user_agent}"'
      }
    }
    date {
      match => ["time_local", "dd/MMM/yyyy:HH:mm:ss Z"]
      target => "@timestamp"
    }
    mutate {
      convert => { "status" => "integer" }
      convert => { "bytes_sent" => "integer" }
    }
  }
}

output {
  elasticsearch {
    hosts => ["http://localhost:9200"]
    index => "nginx-logs-%{+YYYY.MM.dd}"
  }
}
# ✅ 設定の構文チェック
sudo /usr/share/logstash/bin/logstash --config.test_and_exit \
    -f /etc/logstash/conf.d/nginx.conf

# ✅ Logstash を起動
sudo systemctl enable logstash
sudo systemctl start logstash

ステップ4:Kibana を設定する

# ✅ Kibana をインストール
sudo apt install kibana -y

# ✅ kibana.yml を設定
sudo nano /etc/kibana/kibana.yml
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://localhost:9200"]
# ✅ Kibana を起動
sudo systemctl enable kibana
sudo systemctl start kibana

# ✅ 起動確認(起動に1-2分かかる)
curl -sI http://localhost:5601
# → HTTP/1.1 302 Found ← Kibana にリダイレクト

# ✅ Nginx で Kibana へのリバースプロキシを設定
sudo nano /etc/nginx/sites-available/kibana.conf
server {
    listen 80;
    server_name kibana.example.com;

    # Basic 認証で保護
    auth_basic "Kibana";
    auth_basic_user_file /etc/nginx/.htpasswd;

    location / {
        proxy_pass http://localhost:5601;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

ステップ5:Filebeat で WordPress ログを収集する

# ✅ Filebeat をインストール(Logstash の代わりに軽量エージェントとして使用)
sudo apt install filebeat -y

# ✅ filebeat.yml を設定
sudo nano /etc/filebeat/filebeat.yml
filebeat.inputs:
  - type: log
    enabled: true
    paths:
      - /var/log/nginx/access.log
      - /var/log/nginx/error.log
    fields:
      service: wordpress
      environment: production

output.elasticsearch:
  hosts: ["localhost:9200"]
  index: "wordpress-logs-%{+YYYY.MM.dd}"
# ✅ Filebeat を起動
sudo systemctl enable filebeat
sudo systemctl start filebeat

# ✅ Elasticsearch にデータが届いているか確認
curl http://localhost:9200/wordpress-logs-*/_count
# → { "count": 1250, ... }

# ✅ ログのパーミッション修正(Filebeat がログを読めるように)
sudo usermod -aG adm filebeat
sudo systemctl restart filebeat

注意事項

  • Elasticsearchは最低2GBのヒープメモリが必要です。メモリが不足するとOOMキラーに終了させられます。VPSの場合は最低4GB以上のメモリプランを選択してください
  • デフォルトでKibanaはポート5601でアクセス可能です。必ずBasic認証やIPアドレス制限で保護してから公開してください

まとめ

ELKスタックの構築は①Java 17インストール・Elasticリポジトリ追加・メモリ確認(最低4GB)、②Elasticsearchインストール・JVMヒープ設定(メモリ半分)・network.host:127.0.0.1でローカル限定・起動確認、③Logstashインストール・Nginxログ用grokパターン設定・dateフィルターでタイムスタンプ変換・Elasticsearchへ出力、④Kibanaインストール・elasticsearch.hosts設定・Nginx Basic認証リバースプロキシで保護、⑤Filebeat(軽量エージェント)でWordPressログを収集・Elasticsearchへ直接出力・ログ読み取り権限(admグループ)設定の手順で構築します。

お気軽にご相談ください

お見積りへ お問い合わせへ