[Docker]ELKS收集容器日志就是这么简单
场景
随着容器的大量使用,现在docker已经在很多生产环境得到实践,不过,容器的日志,状态,确是一个大问题,我们知道,一般可以使用命令docker logs
来查看一个特定的容器,那如果想要收集当前机器所有容器的日志呢?难不成还要将所有应用都标准化一个日志组件出来,然后将日志挂载到特定目录,然后使用logstash 去收集?当然,这种方式不算特别的方便,那有没有相对方便的方式呢?当然是有的
ELK
- Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
- Logstash是一个完全开源的工具,他可以对你的日志进行收集、过滤,并将其存储供以后使用(如,搜索。
- Kibana 也是一个开源和免费的工具,它Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志
上一周原理图大家更清晰一点
三个组件的功能简单来说是收集,整理,展示,其中,Elasticsearch在搜索领域相当的火,在做全文检索方面有相当好的应用,大家有兴趣的可以自己深入研究
使用
在使用前请确保安装好了docker
,docker-compose
,关于怎么安装,前面的文章也有讲过,如果不会,自己搜索解决,现在我们直接上docker-compose.yml
文件
logspout:
image: gliderlabs/logspout:v3
command: 'syslog://logstash:5000'
links:
- logstash
volumes:
- '/var/run/docker.sock:/tmp/docker.sock'
logstash:
image: ludekvesely/logstash-json
environment:
- LOGSPOUT=ignore
- DROP_NON_JSON=false
- STDOUT=true
ports:
- "5000:5000"
links:
- elasticsearch
kibana:
image: kibana
environment:
- LOGSPOUT=ignore
links:
- elasticsearch
ports:
- '5601:5601'
elasticsearch:
image: elasticsearch
environment:
- LOGSPOUT=ignore
在docker-compose.yml所在的目录下,使用命令sudo docker-compose up -d
,然后我们用浏览器打开http://127.0.0.1:5601/
,就可以看到如下的界面
如图所示,等1,2都能正常使用的时候,选择create ,这样就会创建索引,我们选中Discover页面,就会看到日志的情况
补充
有人要问了,你这只是收集本机的docker日志,如果想要将A机器的运行日志收到到B机器呢?
假定B机IP为10.10.2.52
, 机器 A的docker-compose.yml
如下
image: gliderlabs/logspout:v3
command: 'syslog+tcp://10.10.2.52:5000'
#links:
# - logstash
volumes:
- '/var/run/docker.sock:/tmp/docker.sock'
这里使用tcp协议,将内容指向到B机的logstash暴露的端口,这样就可以正常的收集了
参考:https://github.com/ludekvesely/docker-logspout-elk
- 原文作者:大鱼
- 原文链接:https://brucedone.com/archives/1024/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. 进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。