我想知道将我的 docker 容器日志转发到 ELK 服务器的最简单方法是什么,到目前为止,我在搜索互联网后尝试的解决方案根本不起作用。
基本上我有一个使用 docker-compose 运行的 docker 映像,该容器不会在本地记录任何内容(它由不同的服务组成,但它们都不是 logstash 或其他),但我看到通过docker logs -tf imageName
或docker-compose logs
. 由于我使用 compose 启动容器,因此我无法使用(或者至少我不知道如何使用)--logs-driver
docker 选项。
因此,我想知道是否有人可以启发我一些关于如何将日志转发到例如 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 {}
此配置和添加in的条目logstash.conf
使其工作,正确设置 docker 服务的 IP 地址也很重要。
问候!
Docker compose 有 logging 关键字: source
因此,如果您知道从那里去哪里,那就去吧。
如果没有,我可以建议您查看 docker 的
gelf
日志记录驱动程序和logstash gelf 输入插件例如,如果您要使用此基本的 ELK-stack-in-containers 设置,您将更新 docker-compose 文件并将端口添加
- "12201:12201/udp"
到 logstash。logstash.conf
将输入部分编辑为:然后将您的容器配置为使用日志记录驱动程序
gelf
(不是 syslog)和选项gelf-address=udp://ip_of_logstash:12201
(而不是 syslog-address)。唯一需要注意的是 Docker 如何找到 Logstash 容器的 IP 地址或主机名。您可以通过 docker-compose 命名、Docker 链接或手动解决这个问题。
Docker 和 ELK 功能强大、灵活,但同时也是庞大而复杂的野兽。准备投入一些认真的时间,阅读和实验。
在探索这一切时,不要害怕提出新的(最好是非常具体的)问题。