Logstash は、ELK スタックにおいてログデータの収集、変換、転送を担当する重要なコンポーネントです。本稿では、Logstash のインストール手順から、Elasticsearch への出力設定、そして軽量な収集 agent である Filebeat との連携構成について解説します。
1. Logstash のインストール
公式配布サイトから適切なバージョンのアーカイブファイルを入手します。
https://www.elastic.co/downloads/logstash
ダウンロードしたファイルをサーバーへ転送し、展開します。
tar -xzf logstash-8.11.2-linux-x86_64.tar.gz
2. パイプラインの動作検証
Logstash のパイプラインは、入力(input)、フィルタ(filter)、出力(output)の 3 要素で構成されます。インストールが正常か確認するため、標準入力から受け取ったデータを標準出力へ表示する最小構成のパイプラインを実行します。
./bin/logstash -e 'input { stdin { } } output { stdout { codec => rubydebug } }'
コマンド実行後、任意の文字列を入力し、整形された出力が返されれば環境構築は成功です。
3. Elasticsearch への出力設定
実際に運用する設定ファイルを作成します。Beats 入力および TCP 入力を受け付け、条件に応じてインデックス名を動的に生成する構成です。
cd logstash-8.11.2/config/
vim pipeline.conf
input {
beats {
port => 5044
}
tcp {
port => 5000
codec => json
}
}
filter {
if [service_id] {
mutate {
add_tag => ["custom_service"]
}
}
}
output {
if "custom_service" in [tags] {
elasticsearch {
hosts => ["http://10.10.20.5:9200"]
index => "logs-%{[service_id]}-%{+YYYY.MM.dd}"
}
} else {
elasticsearch {
hosts => ["http://10.10.20.5:9200"]
index => "logs-default-%{+YYYY.MM.dd}"
}
}
}
4. Filebeat との連携構成
分散システム環境では、アプリケーションサーバーごとにログファイルが出力されます。Logstash は Java で動作するためリソース消費が大きいため、各アプリケーションサーバーに直接導入するのは非効率です。代わりに、Go 言語で構築され軽量な Filebeat を各サーバーに配置し、ログを収集して中央の Logstash へ転送する構成が一般的です。
Filebeat の入手先:
https://www.elastic.co/downloads/beats/filebeat
展開とディレクトリ移動:
tar -xzf filebeat-8.11.2-linux-x86_64.tar.gz
cd filebeat-8.11.2-linux-x86_64/
設定ファイルの編集:
vim filebeat.yml
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/app/application.log
fields:
service_id: web_frontend
output.logstash:
hosts: ["10.10.20.100:5044"]
ここでは、アプリケーションが出力するログパスを指定し、追加フィールドとしてサービス識別子を定義しています。出力先は Logstash が待ち受けているアドレスです。
Filebeat の起動:
sudo chown root filebeat.yml
sudo ./filebeat -e -c filebeat.yml > filebeat.log 2>&1 &
これにより、ログデータは Filebeat から Logstash へ渡され、最終的に Elasticsearch へ格納されます。収集状況は Kibana ダッシュボードまたは Elasticsearch 用の管理ツールを通じて確認可能です。