[Docker]ELKS收集容器日志就是这么简单

场景

随着容器的大量使用,现在docker已经在很多生产环境得到实践,不过,容器的日志,状态,确是一个大问题,我们知道,一般可以使用命令docker logs 来查看一个特定的容器,那如果想要收集当前机器所有容器的日志呢?难不成还要将所有应用都标准化一个日志组件出来,然后将日志挂载到特定目录,然后使用logstash 去收集?当然,这种方式不算特别的方便,那有没有相对方便的方式呢?当然是有的

ELK

  • Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
  • Logstash是一个完全开源的工具,他可以对你的日志进行收集、过滤,并将其存储供以后使用(如,搜索。
  • Kibana 也是一个开源和免费的工具,它Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志
    上一周原理图大家更清晰一点

三个组件的功能简单来说是收集,整理,展示,其中,Elasticsearch在搜索领域相当的火,在做全文检索方面有相当好的应用,大家有兴趣的可以自己深入研究

使用

在使用前请确保安装好了docker,docker-compose,关于怎么安装,前面的文章也有讲过,如果不会,自己搜索解决,现在我们直接上docker-compose.yml文件

在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如下

这里使用tcp协议,将内容指向到B机的logstash暴露的端口,这样就可以正常的收集了

参考:https://github.com/ludekvesely/docker-logspout-elk

点赞
  • 新版的kibana已经不再免费了

    • bruce

      如果收费合理,拿来搞搞也不错- -毕竟搞技术的也要吃饭。