私のドッカーコンテナーログをELKサーバーに転送する最も簡単な方法は何かを知りたいのですが、これまでのところ、インターネットを検索した後に試したソリューションがまったく機能しませんでした。
基本的に私はdocker-composeを使用して実行するDockerイメージを持っています。このコンテナーはローカルで何もログに記録しません(さまざまなサービスで構成されていますが、それらのいずれもlogstashなどではありません)docker logs -tf imageName
またはdocker-compose logs
。私はコンテナをcomposeで開始しているので、dockerの--logs-driver
オプションを使用できません(または、少なくともその方法がわかりません)。
したがって、たとえば、そのログをELKコンテナーに転送する方法について、誰かが私に少し啓蒙してくれるのではないかと思っていました。
前もって感謝します、
よろしく
[〜#〜]ソリューション[〜#〜]:
次の方法で問題を解決するために達成できたmadeddieのおかげで、madeddieが彼の投稿で提案した基本的なELK-stack-in-containersを使用したことを述べました。
最初に、コンテナのdocker-compose.yml
ファイルを更新して、ロギングリファレンスのエントリを追加します。これは、madeddieが教えてくれたように、サービスごとにエントリを含めました。私のdocker-composeのスニペットは次のようになります
version: '2'
services:
mosquitto:
image: ansi/mosquitto
ports:
- "1883:1883" # Public access to MQTT
- "12202:12202" #mapping logs
logging:
driver: gelf
options:
gelf-address: udp://localhost:12202
redis:
image: redis
command: redis-server --appendonly yes
ports:
- "6379:6379" # No public access to Redis
- "12203:12203" #mapping logs
volumes:
- /home/dockeruser/redis-data:/data
logging:
driver: gelf
options:
gelf-address: udp://localhost:12203
次に、ログを転送できるようにするために、サービスごとに異なるポート番号を使用する必要がありました。
最後に、elkコンテナdocker-compose.yml
ファイルを更新して、ログを送信していた各updポートを、logstashがリッスンするポートにマップしました
logstash:
build: logstash/
command: logstash -f /etc/logstash/conf.d/logstash.conf
volumes:
- ./logstash/config:/etc/logstash/conf.d
ports:
- "5000:5000"
- "12202:12201/udp" #mapping mosquitto logs
- "12203:12201/udp" #mapping redis logs
この構成とgelf {}
へのlogstash.conf
のエントリの追加により、DockerサービスのIPアドレスを適切に設定することが重要になります。
リガード!
Docker composeにはロギングキーワードがあります: source
logging:
driver: syslog
options:
syslog-address: "tcp://192.168.0.42:123"
だから、そこからどこへ行くべきかわかっているなら、それを求めてください。
そうでない場合は、 gelf
logging driver for docker と logstash gelf input plugin を調べることをお勧めします
たとえば this 基本的なELK-stack-in-containersセットアップを使用する場合、docker-composeファイルを更新し、ポート- "12201:12201/udp"
をlogstashに追加します。
logstash.conf
入力セクションを次のように編集します。
input {
tcp {
port => 5000
}
gelf {
}
}
次に、ロギングドライバーgelf
(syslogではなく)とオプションgelf-address=udp://ip_of_logstash:12201
(syslog-addressの代わり)を使用するようにコンテナーを構成します。
DockerがLogstashコンテナーのIPアドレスまたはホスト名を見つける方法は、注意する必要がある唯一の魔法です。 docker-composeネーミング、Dockerリンク、または手動で解決できます。
DockerとELKは強力で柔軟ですが、大きくて複雑な獣でもあります。本を読んだり、実験したりするために、真剣に時間をかける準備をしてください。
これらすべてを調査するときに出くわす新しい(できれば非常に具体的な)質問を開くことを恐れないでください。