摘要:本文就探讨一下,平台内如何做容器日志收集。当然完整的日志体系中,并不仅仅是采集,还需要有日志存储和展现。是可以理解微的助手,它可以识别容器内的日志卷文件,通知进行采集。
引言
一个完整的容器平台,容器日志都是很重要的一环。尤其在微服务架构大行其道状况下,程序的访问监控健康状态很多都依赖日志信息的收集,由于Docker的存在,让容器平台中的日志收集和传统方式很多不一样,日志的输出和采集点收集和以前大有不同。本文就探讨一下,Rancher平台内如何做容器日志收集。
当前现状纵览当前容器日志收集的场景,无非就是两种方式:一是直接采集Docker标准输出,容器内的服务将日志信息写到标准输出,这样通过Docker的log driver可以发送到相应的收集程序中;二是延续传统的日志写入方式,容器内的服务将日志直接写到普通文件中,通过Docker volume将日志文件映射到Host上,日志采集程序就可以收集它。
第一种方式足够简单,直接配置相关的Log Driver就可以,但是这种方式也有些劣势:
当主机的容器密度比较高的时候,对Docker Engine的压力比较大,毕竟容器标准输出都要通过Docker Engine来处理。
尽管原则上,我们希望遵循一容器部署一个服务的原则,但是有时候特殊情况不可避免容器内有多个业务服务,这时候很难做到所有服务都向标准输出写日志,这就需要用到前面所说的第二种场景模式。
虽然我们可以先选择很多种Log Driver,但是有些Log Driver会破坏Docker原生的体验,比如docker logs无法直接看到容器日志。
基于以上考虑,一个完整的日志方案必须要同时满足标准输出和日志卷两种模式才可以。当然完整的日志体系中,并不仅仅是采集,还需要有日志存储和UI展现。日志存储有很多种开源的实现,这个一般用户都会有自己钟情的选择,而UI展现更是各家有各家的需求,很难形成比较好的标准,一般都是通过定制化方式解决。所以此文主要展现的方案是日志采集方案,当然在存储和UI展现上会对接开源实现,没有特殊需求的情况下,也可以拥有一个完整的体验。
Rancher下的解决方案如上面图中所示,日志存储和UI展现可以直接使用ElasticSearch & Kibana,日志采集方面如之前所分析,需要对接两种采集模式,所以这部分采用Fluentd & Logging Helper的组合,Fluentd是很通用的日志采集程序,拥有优异的性能,相对Logstash来说同等压力下,其内存消耗要少很多。Logging Helper是可以理解微Fluentd的助手,它可以识别容器内的日志卷文件,通知Fluentd进行采集。此外,由于要保证Dokcer和Rancher体验的完整性,在Docker Log Driver的选型上支持json-file和journald,其原因:一是json-file和journald相对来说比较常用;二是这两种驱动下,docker logs依然可以有内容输出,保证了体验的完整性。
下面开始说明,整个方案的部署过程。先用一张图来描述整体的部署结构,如下:
总共划分三个ENV,其中一个ENV部署ES & Kibana,另外两个ENV分别添加json-file驱动的主机和journald驱动的主机。详细部署过程如下:
创建三个ENV,使用Cattle引擎。设置Logging Catalog方便部署,在Admin–Settings页面中添加Catalog,地址为:https://github.com/niusmallna...
进入ES-Kibana ENV中,部署ElasticSearch & Kibana,这两个应用在Community Catalog中均可以找到,部署非常简单,需要注意的是,建议选择Elasticsearch 2.x,Kibana中的Elasicsearch Source选择elasticseach-clients:
分配两台主机并安装Docker,其中Log Driver分别选择json-file和journald,并将主机添加到各自的ENV中。 在这两个ENV中添加External Link指向之前部署的Elasticsearch地址:
然后在Jsonfile & Journald ENV中添加Rancher Logging应用,打开对应的catalog,ES link指向刚才设定的External link, 其中Volume Pattern是日志卷的匹配模式,File Pattern是日志卷内的日志文件匹配模式:
以上部署完成之后,部署一些应用并产生一些访问日志,就可以在Kibana的界面中看到:
若要使用日志卷方式,则需要在service启动的时候配置volume,volume name需要匹配之前设定的Volume Pattern:
秉承一切开源的原则,相关实现可以查看一下链接:
https://github.com/niusmallna...
https://github.com/niusmallna...
https://github.com/niusmallna...
总结通过Fluentd我们可以对接很多第三方日志存储体系,但是Fluentd自身并不能完成日志采集的所有场景,所以非常需要Logging Helper的帮助。通过Logging Helper可以定制出一些额外采集规则,比如可以过滤某些容器日志等等。当然真正大规模生产环境日志平台,其实是对整个运维体系的考验, 单纯靠开源程序的组合并不能真正解决问题。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/26859.html
摘要:因此,另一种解决办法像这样的工具,则只是将和进行了结合,其功能尤其关注日志管理,比如格式检查,日志语法分析,数据改进地址地理位置信息,元数据标签等以及日志路由。 由Rancher社区维护的应用商店最近迎来了两个明星项目——SPM 和 Logsene,来自Sematext的监控与日志工具。如果你已经熟悉Logstash,Kibana,Prometheus,Grafana这些监控或日志解决...
摘要:来自用户的最佳实践分享,如何用阿里开源的日志收集工具收集机器上所有应用日志。具有如下特性一个单独的进程收集机器上所有容器的日志。无论是强大的阿里云日志服务,还是比较流行的组合,甚至是,都能把日志投递到正确的地点。 来自用户的最佳实践分享,如何用阿里开源的Docker日志收集工具fluentd-pilot收集机器上所有Docker应用日志。 fluentd-pilot简介 fluentd...
摘要:容器化应用日志收集挑战应用日志的收集分析和监控是日常运维工作重要的部分,妥善地处理应用日志收集往往是应用容器化重要的一个课题。日志来源识别采用统一应用日志收集方案,日志分散在很多不同容器的相互隔离的环境中,需要解决日志的来源识别问题。 容器化应用日志收集挑战 应用日志的收集、分析和监控是日常运维工作重要的部分,妥善地处理应用日志收集往往是应用容器化重要的一个课题。 Docker处理日志...
摘要:新近发布,中国区团队特为中国用户准备了千元大奖,邀您参与用户体验计划找,提团队珍视用户的每一个意见与反馈。新版本发布后还将经历版本完善与优化的阶段。 showImg(https://segmentfault.com/img/remote/1460000016731917?w=1600&h=900); GitLab支持、CICD优化、项目配额管理、驱散容器功能等等,Rancher 2.1...
阅读 1495·2021-10-11 10:59
阅读 1857·2021-09-09 11:36
阅读 1367·2019-08-30 15:55
阅读 1321·2019-08-29 11:20
阅读 3056·2019-08-26 13:39
阅读 1457·2019-08-26 13:37
阅读 1950·2019-08-26 12:11
阅读 1312·2019-08-23 14:28