我想知道什么是最容易的方式转发我的docker集装箱日志到一个ELK服务器,到目前为止,我已经尝试了search互联网后的解决scheme根本没有工作。
基本上我有一个使用docker-compose运行的docker镜像,这个容器不会在本地logging任何东西(它由不同的服务组成,但它们都不是logstash或者其他东西),但是我通过docker-compose logs docker logs -tf imageName看到了日志docker-compose logs docker logs -tf imageName或者docker-compose logs 。 由于我用compose启动容器,因此无法使用--logs-driver选项(至less我不知道如何)。
因此,我想知道是否有人可以指导我如何将日志转发到ELK容器。
提前致谢,
问候
scheme :
感谢madeddie,我可以通过以下方式来解决我的问题,提到我使用了他在post中提到的基本的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文件,以映射每个我将日志发送到logstash监听的upd端口
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
此configuration并在logstash.conf添加了gelf {}条目使其正常工作,正确设置logstash.conf服务的IP地址也很重要。
问候!
Docker撰写了关键字logging: source
logging: driver: syslog options: syslog-address: "tcp://192.168.0.42:123"
所以如果你知道从那里去哪里,就去做吧。
如果不是的话,我可以build议您查看docker的gelf日志驱动程序和logstash gelfinput插件
如果你想使用这个基本的ELK-stack-in-containers设置,你可以更新docker-compose文件并添加端口- "12201:12201/udp"到logstash。
编辑logstash.confinput部分以:
input { tcp { port => 5000 } gelf { } }
然后将容器configuration为使用日志logging驱动程序gelf (而不是syslog)和选项gelf-address=udp://ip_of_logstash:12201 (而不是syslog-address)。
唯一需要注意的是Docker将如何findLogstash容器的IP地址或主机名。 你可以通过docker-compose命名,Docker链接或者手动来解决这个问题。
Docker和ELK是强大的,灵活的,但也是大而复杂的野兽。 准备投入一些认真的时间,在阅读和实验。
不要害怕在探索所有这些时打开新的(并且最好是非常具体的)问题。