Logspout是在用于收集Docker容器日志的工具。它连接到主机上的所有容器,然后将其路由到你想让让它去的地方。它也有一个可扩展的模块系统。现在它仅捕获STDOUT和STDERR。
ELK在文章容器内日志收集方案示例已有所介绍。
所以如果你的需求是
- 所有应用日志输出都是STDOUT和STDERR
- 容器启动不带
-t
我们就可以使用Logspout + ELK的方式自动收集容器日志。
下面在容器服务中演示:
通过compose模板方式创建应用,我已经把镜像制作完成,放在阿里云HUB中,这样可以直接使用,省去了制作镜像的时间,所以使用起来实际上就是创建应用这一步了。
logbox:
image: registry.aliyuncs.com/heizi/logbox
ports:
- '5000:5000/udp'
- '9200:9200'
restart: always
hostname: logbox
kibanabox:
image: registry.aliyuncs.com/heizi/kibanabox
command: ["http://logbox:9200"]
links:
- logbox
ports:
- '5601:5601'
hostname: kibanabox
restart: always
logspout:
image: registry.aliyuncs.com/heizi/logspout
hostname: logspout
labels:
aliyun.global: true
links:
- logbox
restart: always
ports:
- '8100:8000'
volumes:
- /var/run/docker.sock:/tmp/docker.sock
command: ["syslog://logbox:5000"]
应用启动后,就可以在Kibana console看到日志