logging – 如何将Docker容器日志转发给ELK?

我想知道将docker容器日志转发到ELK服务器的最简单方法是什么,到目前为止,我在搜索互联网后尝试的解决方案根本不起作用.

基本上我有一个使用docker-compose运行的docker镜像,这个容器不会在本地记录任何东西(它由不同的服务组成,但它们都不是logstash或其他)但我看到登录docker logs -tf imageName或docker-撰写日志.由于我使用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

这个配置以及在logstash.conf中添加gelf {}的条目使它工作,同样重要的是正确设置docker服务的IP地址.

问候!

最佳答案
Docker compose有logging关键字:
source

logging: 
  driver: syslog
  options: 
    syslog-address: "tcp://192.168.0.42:123"

所以,如果你知道去哪里,那就去吧.

如果没有,我可以建议你研究gelf logging driver for dockerlogstash 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功能强大,灵活,但也是大而复杂的野兽.准备在一些严肃的时间,阅读和实验.

在探索这一切时,不要害怕打开你遇到的新问题(最好是非常具体的问题).

转载注明原文:logging – 如何将Docker容器日志转发给ELK? - 代码日志