この記事では、Amazon EC2 上に Elastic Stack 8.x (Elasticsearch、Logstash、Kibana、Filebeat) をインストールしたときの手順を、備忘録として、またこれから同じことをやろうとしている方への参考としてまとめました。 実際に体験したつまずきポイントや工夫した点も交え、実践的な内容を目指しています。
本題に入る前に Elastic Stack とは?
各コンポーネントの役割は以下のとおりです。
- Filebeat: EC2 サーバー内のログファイルを読み取る。
- Logstash: Filebeat から受け取ったログを Elasticsearch 用に成形し転送する。
- Elasticsearch: ログをインデックス化し、保存・検索できる状態にする。
- Kibana: Elasticsearch に保存されたログをダッシュボードで可視化する。
Elastic Stack は、インフラ監視、アプリケーションパフォーマンス管理、セキュリティ分析など、幅広い用途で活用されています。
1. 前提条件の整理
- 使用OS:Amazon Linux 2
- インスタンスタイプ:t2.medium(2vCPU、4GB RAM)
- 必要なポート:
- 22(SSH用)
- 5044(Filebeat→Logstash)
- 9200(Elasticsearch)
- 5601(Kibana)
- Java 11が必要(Amazon Correttoを使用)
ここで気をつけたのは、初期設定でセキュリティグループにこれらのポートを忘れずに開けること。忘れると、後々アクセスできなくなって手間取ります。
Network setting –> Edit –> Security Group Rules
2. EC2インスタンスを起動
AWSマネジメントコンソールからEC2ダッシュボードに入り、「Launch instance」を選びました。
選択した構成:
- AMI:Amazon Linux 2(64-bit Arm)
- インスタンスタイプ:t2.medium(コストパフォーマンスがよい)
- キーペア作成:新しい.pemファイルを作成し、すぐに安全な場所に保存
- ストレージ:20GB以上を推奨(ログが増えるので余裕をもたせました)
そしてセキュリティグループでは、自分のグローバルIPアドレスを指定して、前述のポートだけ開けました。
3. SSH接続と初期パッケージの準備
ターミナルから以下で接続:
chmod 400 my-key.pem
ssh -i my-key.pem ec2-user@<EC2 IP>
その後、パッケージを最新にしてJava 11をインストール。
sudo yum update -y
sudo rpm --import https://yum.corretto.aws/corretto.key
sudo curl -L -o /etc/yum.repos.d/corretto.repo https://yum.corretto.aws/corretto.repo
sudo yum install -y java-11-amazon-corretto
java -versionでちゃんと入ったか確認。
4. Elasticsearchをインストール
Elasticの公式リポジトリを登録し、インストールします。
sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
以下の内容で.repoファイルを作成:
sudo tee /etc/yum.repos.d/elasticsearch.repo <<EOF
[elasticsearch]
name=Elasticsearch repository
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
EOF

そしてインストール:
sudo yum install -y elasticsearch
インストール中に表示されるメッセージの中にパスワードが書かれています。後で必要なのでメモっておきます。

設定ファイルの変更
sudo nano /etc/elasticsearch/elasticsearch.yml
以下を追加:
network.host: *.*.*.* curl https://checkip.amazonaws.com で返ってくるIPを使う.privateIPを使う
discovery.seed_hosts: []

xpack.security.enabled: trueのまま進みます。
起動:
sudo systemctl enable elasticsearch
sudo systemctl start elasticsearch

アクセス時はcurlにユーザー名とパスワードを指定:
curl -u elastic:<PASSWORD> https://localhost:9200 --insecure

設定ファイルは以下のようにしました。
sudo nano /etc/logstash/conf.d/logstash.conf
input {
beats {
port => 5044
}
}
output {
if [@metadata][pipeline] {
elasticsearch {
hosts => ["https://***.**.**.**:9200"]
user => "elastic"
password => "パスワード"
ssl => true
ssl_certificate_verification => false
manage_template => false
index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
pipeline => "%{[@metadata][pipeline]}"
}
} else {
elasticsearch {
hosts => ["https://***.**.**.**:9200"]
user => "elastic"
password => "パスワード"
ssl => true
ssl_certificate_verification => false
manage_template => false
index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
}
}
}

有効にし起動させる。
sudo systemctl enable logstash
sudo systemctl start logstash
sudo systemctl status logstash

5. Kibanaをインストール
sudo yum install -y kibana
起動と自動起動設定:

sudo systemctl enable kibana
sudo systemctl start kibana
Elasticsearch 8.x 以降では、Kibana の内部動作に、広範な権限を持つ elastic ユーザーではなく、より権限が限定されたサービスアカウントトークンまたは専用のロールベースのユーザーアカウントを設定する必要があります。セキュリティ強化と不要な権限付与を防ぐための変更です。
kibana は “elastic” をユーザー名として使用できないため、専用の kibana ユーザーを新規作成します:
curl -u elastic:'<パスワード>' -k -X POST https://localhost:9200/_security/user/kibana_system_user \
-H "Content-Type: application/json" \
-d '{
"password": "KibanaSecure123!",
"roles": ["kibana_system"],
"full_name": "Kibana internal service user"
}'
設定ファイル:
sudo nano /etc/kibana/kibana.yml
変更する箇所:
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["https://localhost:9200"]
elasticsearch.username: "kibana_system_user"
elasticsearch.password: "KibanaSecure123!"
elasticsearch.ssl.verificationMode: none

sudo systemctl restart kibana
ブラウザでKibanaを確認。
http://<パブリックIPv4>:5601
Kibanaを起動する際に、usernameとpasswordの入力を求められます。このとき、elasticsearchのインストール中に画面に表示されたpasswordを入力します。
6. Filebeatの導入と連携
sudo yum install -y filebeat
sudo nano /etc/filebeat/filebeat.yml
設定ファイル(重要!インデント注意):
elastic outputセッションでコメントアウトする箇所:
# output.elasticsearch:
# hosts: ["localhost:9200"]
logstash outputセッションでアンコメントする箇所:
output.logstash:
hosts: ["localhost:5044"]
他、変える箇所:
filebeat.inputs:
- type: log
id: my-filestream-id
enabled: true
paths:
- /var/log/*.log
- /var/log/messages
- /var/log/secure
- /var/log/cron
- /var/log/cloud-init.log
- /var/log/cloud-init-output.log
起動してステータス確認:
sudo systemctl enable filebeat
sudo systemctl start filebeat
sudo systemctl status filebeat
ログを収集するシステムモジュールを有効に:
sudo filebeat modules enable system
システムモジュール設定ファイルを開く:
sudo nano /etc/filebeat/modules.d/system.yml
以下のファイルセットが有効になっている(true に設定されている)ことを確認。
# Module: system
# Docs: https://www.elastic.co/guide/en/beats/filebeat/8.17/filebeat-module-system.html
- module: system
# Syslog
syslog:
enabled: true
# Set custom paths for the log files. If left empty,
# Filebeat will choose the paths depending on your OS.
#var.paths:
# Use journald to collect system logs
#var.use_journald: false
# Authorization logs
auth:
enabled: true
# Set custom paths for the log files. If left empty,
# Filebeat will choose the paths depending on your OS.
#var.paths:
# Use journald to collect auth logs
#var.use_journald: false
変更を反映するために、以下のコマンドを実行:
$ sudo filebeat setup --pipelines --modules system
Exiting: module system is configured but has no enabled filesets
7. ダッシュボード連携と仕上げ
index managmentを設定:
sudo filebeat setup \
-E output.logstash.enabled=false \
-E output.elasticsearch.hosts=["https://localhost:9200"] \
-E output.elasticsearch.username=elastic \
-E output.elasticsearch.password=<PASSWORD> \
-E output.elasticsearch.ssl.verification_mode=none \
-E setup.kibana.host="http://localhost:5601"
Kibanaが立ち上がっている事を確認し、次Kibanaのdashboards と ingest pipelinesを設定。
sudo filebeat setup \
-E output.logstash.enabled=false \
-E output.elasticsearch.hosts=["https://172.**.40.11:9200"] \
-E output.elasticsearch.username=elastic \
-E output.elasticsearch.password=パスワード \
-E output.elasticsearch.ssl.verification_mode=none \
-E setup.kibana.host="http://localhost:5601"
sudo systemctl start filebeat
sudo systemctl enable filebeat
インデックスをチェックして、Elasticsearch が Filebeat からデータを受信していることを確認。
curl -XGET "https://172.**.40.11:9200/_cat/indices?v" \
-u elastic:パスワード \
--insecure
8. 動作確認
ブラウザ上のKibanaからDiscoverに移動し、filebeat-*を指定。
KibanaのDiscoverからfilebeat-*インデックスを確認できれば成功です!

最後に
Elastic Stackを使い始める方のために、構築手順と役立つ情報をまとめました。内容に誤りや不足があるかもしれません。ご意見やご質問があれば、問い合わせフォームよりご連絡ください。
以下のコマンドは役立ちました:
journalctl -u elasticsearch
ps aux | grep elasticsearch
SSH接続が切断されないように、SSH config ファイルを編集して、スリープモードに入るまでの時間を延長します。
nano ~/.ssh/config
以下のブロックを追加:
Host *
ServerAliveInterval 60
ServerAliveCountMax 5