Rancher平台内如何做容器日志收集(一)_微服务
优采云 发布时间: 2021-07-25 06:38Rancher平台内如何做容器日志收集(一)_微服务
介绍文档参考。对于一个完整的容器平台,容器日志采集也是一个重要的环节。尤其是在微服务架构盛行的情况下,很多程序的访问监控和健康检查都依赖于日志信息的采集。由于Docker的存在,容器平台中的日志采集方式不同于传统的方式。日志的输出和采集不同于传统的方法。它曾经非常不同。本文讨论如何在 Rancher 平台中采集容器日志。目前容器日志采集解决方案的现状概述,无非两种方式:一、直接采集Docker标准输出,通过Docker日志驱动(log driver)可以发送到相应的采集程序; 二、 非标准输出,延续传统的日志写入方式。容器中的服务直接将日志写入Log文件,通过Docker卷映射形式将日志文件映射到Host。 log采集程序直接采集映射的Log文档。 三、通Journald 采集二进制日志数据。 PS:标准输出:通过docker logs查看的日志信息。在Ubuntu OS下,该信息默认保存在以容器ID为前缀的-json.log文件中的/var/lib/docker/containers路径下以容器ID命名的文件夹中。非标准输出:根据Docker容器的特点,容器启动后必须有服务保持前台运行。
如果一个容器需要运行多个服务,那么按照启动顺序,前面的服务必须在后台运行。因此,这些后台运行的服务生成的日志默认无法作为标准输出获取,生成的日志默认会保存在/var/log目录下。第一种方法很简单,可以直接配置相关的日志驱动(Log driver),但是这种方法有一些缺点:当宿主机的容器密度比较高的时候,对Docker Engine的压力比较大,毕竟,容器标准输出必须经过Docker Engine处理。虽然原则上我们希望遵循每个容器部署一个服务的原则,但有时在特殊情况下,容器中存在多个业务服务是不可避免的。这时候很难实现所有服务的标准输出日志,这就需要使用传统的方式来采集日志。虽然我们可以选择多种 Log Drivers,但有些 Log Drivers 会破坏 Docker 原生体验。例如,日志输出到其他日志服务器后,docker logs 将看不到容器日志。基于以上考虑,一个完整的日志采集程序必须同时满足标准输出采集和日志卷(非标准输出)采集或通过journald进行二进制日志数据采集。当然,在完整的日志系统中,不仅仅是采集,还有日志存储和UI展示。日志存储的开源实现有很多,一般用户都会有自己喜欢的选择。 UI展示对各个公司的要求就更高了,很难形成更好的标准,一般都是通过定制的方式来解决的。因此,本文提出的主要解决方案是 log采集 解决方案。当然,开源的实现是对接在存储和UI展示上的。没有特殊要求,也可以有完整的体验。
Rancher(json-file driver)下的解决方案介绍如上图所示。 ElasticSearch & Kibana 可以直接用于日志存储和 UI 展示。日志采集,如前所述,需要连接两种采集模式(标准输出日志和非标准输出)。本方案中,日志采集部分使用了Fluentd & Logging Helper的组合。 Fluentd 是一个非常通用的日志采集 程序,性能卓越。与Logstash相比,在同样的压力下,它的内存消耗要少得多。为了保证 Dokcer 和 Rancher 体验的完整性,Docker Log Driver 选择 Json-file 或 Journald 的原因是:一、json-file 和 journald 比较常见; 二、这两个驱动,docker Logs还是可以有内容输出的,保证了体验的完整性。实施流程方案实施流程:Fluentd对接Json-file或Journald驱动,获取标准输出日志数据或二进制日志数据; Logging Helper可以理解为Fluentd的助手,可以识别容器日志卷(非标准输出)映射的路径,并通知Fluentd进行采集。 Fluentd 采集数据后,将数据传输并存储到 ES,最后 Kibana 直接将数据显示在 ES 中。下面开始讲解整个程序的部署过程。先用一张图来描述整体的部署结构,如下:
方案部署 ElasticSearch & Kibana 部署 Web 登录 Rancher,进入应用商店,搜索 ElasticSearch,建议安装2.x 版本。
点击查看详情。进入后,修改最后一个Public端口。默认为 80 端口。更改为其他端口以避免端口冲突。然后进入应用商店,搜索 Kibana。
在配置选项中,需要选择Elasticsearch-clients
最后一个Public端口根据实际情况修改,避免冲突。
服务正常启动后,即可通过该端口访问Kibana网页。
Rancher日志服务部署 目前Rancher日志不在官方仓库,需要使用Rancher日志,需要添加自定义存储地址。点击小图管理系统设置进入,点击添加应用商店,名称:rancher-logging 地址:branch:master 最后点击保存,返回应用商店。在应用商店输入log进行搜索:
点击查看详情进入并进入配置页面:本例中除了Elasticsearch源的配置如图所示,保持默认:
以上部署完成后,部署一些应用,生成一些访问日志,在Kibana界面可以看到:
如果要使用日志卷方式,需要在Service启动时配置Volume,Volume名称需要与之前设置的Volume Pattern一致: