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グループ)設定の手順で構築します。