云采集(运维上的日志目录路径及应用配置方案(一))
优采云 发布时间: 2022-02-14 09:12云采集(运维上的日志目录路径及应用配置方案(一))
有很多选项,其中一些在下面列出:
1、sidecar sidecar 模式,在每个 pod 中部署一个 filebeat sidecar 容器(共享空的 dir 卷进行日志记录采集)
2、应用容器pod中的直接部署日志采集agent for 采集;
3、打印到控制台,从主机的docker日志文件到采集(读取本地文件,不推荐)
4、打印到控制台,通过宿主机的docker日志驱动进入采集(二进制直接输出);
5、挂载k8s的flex volume,将log文件写入flex volume目录,然后从host到采集log文件。
...
注意:上面提到的host都是以DaemonSet的形式部署的,即一个Node节点(通常是物理机)部署一个DaemonSet pod节点。
主要从性能、操作维护方便、满足各种需求等方面考虑。5 这个方案(FlexVolume)比较好:
1)在性能方面,基于挂载的卷,日志直接放在磁盘上,容器内无代理,无开销,日志不经过docker log驱动,因此不会保存额外的副本。
2)采集都占用宿主机的资源。与每个pod部署一个agent相比,host上只部署一个agent来设置采集当前主机的所有pod,效率非常高。
3)在运维方面,每个应用都可以配置一个日志挂载目录,实际挂载目录会根据pod区分(自动)。也就是说,对于应用来说,只需要配置一个日志目录路径(这个是必须的),然后在宿主机上配置应用的日志采集进行运维。两者都是必要的步骤,而且再简单不过了。
满足需求,
1、日志文件放在磁盘上,可以永久存档(有些业务有这个要求),直接备份文件很方便。
2、查看日志,可以在统一的日志平台查看,也可以登录容器或主机,用tail查看。
3、日志采集配置,可根据应用名称等灵活处理,与普通日志文件采集方式相同。
那么我们来谈谈其他几种解决方案的缺点:
1)sidecar 模式上面已经讲过了。每个pod部署一个agent,估计占用30M资源。与一主机一代理相比,总资源占用率高出数倍。假设一台宿主机,如果部署 100 个 pod,宿主机的总内存消耗为 30×100M。
容器采集agent模式下的2)部署日志和sidecar模式有同样的缺点。占用资源较多,不方便统一管理。
3)基于主机DaemonSet日志驱动方式,日志一方面会被代理采集,另一方面通过日志驱动写入本地日志系统,双重消耗,不适合大型日志量大,而且最致命 是的,只能采集控制台打印的日志!(所有的日志都混在一起,无法分类),那么容器中的日志文件呢?
我们研究了市场上的各种日志解决方案。像阿里云这样的logtail功能强大,但是很多都是定制的,需要定制k8s组件。
阿里巴巴的k8s日志采集方案的“底层原理”还没有介绍,但是看起来和方案5的FlexVolume很像,也可以通过配置日志路径来采集。不像 sidecar,因为这会在 pod 中添加一个代理容器。
注意:我们使用的 FlexVolume 方案是 Rancher fluentd 提供的,提供了自动创建 FlexVolume 卷并挂载到 pod 的日志目录的功能,使用起来非常方便。
另外,我遇到了一个特殊的需求:
1、测试运维还是习惯在linux控制台看日志,同时打开10多个ssh接口一起看。
我的回答是:使用统一的日志平台,比如kibana,配置后查看日志的体验和控制台差不多。可以准实时刷新,功能比tail命令更强大。例如,如果您看到某个键日志,您可以暂停它。,可以来回翻页和查询,这是tail中没有的。并且在同一页面的下拉菜单中,可以在不同的应用程序之间进行切换,类似于切换SSH标签页的便利性。如果您想在一页上“同时”显示多个应用程序,您实际上可以做到。为您想要查看的多个应用程序构建聚合索引。特别是,您可以创建“*”来匹配所有应用程序,然后自己过滤它们。如果一定要挑剔,实时性不如控制台,还有一定的学习成本。关于实时性能,EFK(filebeat)延迟问题:kibana页面最多只能每5秒刷新一次。大概需要15秒左右,很不舒服,但是应该还有很大的优化空间,比如访问kafka,使用SSD硬盘等等。
还有一种方案,容器内外通用,我认为是最好的方案:(需要实现条件)
应用通过日志组件Appender直接将日志发送到最近的高速Loghub
也可以看看:
阿里云开源的各种Java日志组件的appender:
以上是针对Java的。同样,其他语言也有自己的日志组件,也可以实现类似的功能。
综上所述,最好的方案是在上述方案5中挂载FlexVolume+应用内日志组件直挖,相当于阿里云目前最先进的采集方案(阿里云只根据自己定制的方案5)平台),应用内日志采集使用自己的Logtail服务)。