さまざまなサービスが互いに通信できるよう設定する必要があります。
ELKスタックは次の4つのサービスで構成されています。
- Filebeat:Remote Engine Gen2とELKスタック間のブリッジ、つまりLogstash
- Logstash: データを取り込み、変換してElasticsearchに送信するデータ処理パイプライン
- Elasticsearch: 検索およびアナリティクスエンジン
- Kibana: Elasticsearchのデータを可視化してElastic Stackをナビゲートするためのユーザーインターフェイス
各サービス間のリンクは次のように設定します。
手順
-
FilebeatとLogstashは同じDockerネットワークにあるため、filebeat/filebeat.ymlファイルでLogstashサーバーの場所(この例では
logstash:5044
)を設定します。
filebeat.autodiscover:
providers:
- type: docker
templates:
- condition:
contains:
docker.container.labels.filebeat_ingest: "true"
config:
- type: container
paths:
- /var/lib/docker/containers/${data.docker.container.id}/*.log
json.keys_under_root: true
json.add_error_key: true
json.message_key: message
ignore_older: 10m
output:
logstash:
hosts: [ 'logstash:5044' ]
この設定によってFilebeatはRemote Engine Gen2のログを消費し、解析のためにlogstashに送信できるようになります。
filebeat/filebeat.ymlファイルではログの検出方法も 設定されます。このケースでは、ラベルがfilebeat_ingest: true
であるコンテナーのログを検索します。
-
logstash.confファイルで、指定された
input
ポートがLogstashサーバーに対応していること、そしてfilebeat.ymlファイルで設定したポートと一致することを確認します。
-
同じくlogstash.confで、
output
値をelasticsearch
に設定し、Elasticsearchサーバのホストとポート(この例では9200
)を指定します。
input {
beats {
port => 5044
}
}
output {
elasticsearch {
hosts => '${ELASTICSEARCH_HOSTS:elasticsearch:9200}'
index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
}
}
このシンプルな入出力設定によって、KibanaはElasticsearchのホストとポートの組み合わせに接続し、Logstashからのデータを読み取ることができるようになります。