如何收集K8S容器化部署的服务的日志?

news/2024/7/4 8:10:27 标签: kubernetes, docker, 容器, 云原生

做开发的同学都知道日志的重要性,日志的种类一般有接口日志、错误日志、关键步骤日志、用户操作日志等。本文主要详细讲解使用kubernetes容器化部署的服务该如何记录和收集日志。

一、使用标准输出方式

将想要记录的日志内容输出到stdout或stderr即可(DockerEngine本身具有LogDriver 功能,可通过配置不同的LogDriver将容器的stdout通过DockerEngine写入到日志系统),由DockerEngine将日志写入到日志系统。

这种方式的优点是使用简单,但是缺点也十分明显。所有的输出都混在一个流中,无法像文件一样分类输出,一个应用中一般都有几种类型的日志,这些日志的格式、用途不一,混在同一个流中将很难做分类和分析。

虽然使用Stdout是Docker官方推荐的方式,但是仅限于简单的场景。这种方式可定制化、灵活性、资源隔离性都比较差,一般不建议在生产环境中使用。

二、服务直写方式

在服务代码中将日志直接发送到日志系统(集成所使用日志系统的SDK或者自己实现SDK)。

这种方式的优点是日志文件不需要临时存储到磁盘,也不需要部署额外的日志采集Agent,可根据业务特点进行定制,不受集群规模限制。

缺点是日志直写会占用一定的服务器资源,例如cpu、内存、特别是网络IO,会影响服务的整体性能。

三、DaemonSet方式

通过修改Deployment文件使服务容器和宿主机共享一个目录,服务将日志输出这个目录下面。使用DaemonSet方式在每个node节点上面运行一个日志采集agent(例如filebeat、fluentd、logstash等)采集这个节点上指定目录下的所有日志文件到日志系统。

这种方式的优点资源相对占用要小很多,也可以做到日志分类采集,日志采集几乎不影响服务的性能。缺点是扩展性受限。

四、Sidecar 方式

通过修改Deployment文件在一个pod里面运行两个容器,一个容器运行服务,另一个容器运行日志采集agent,并且让这两个容器共享同一个目录,服务将日志输出这个目录下面,日志采集agent采集这个目录下的所有的日志文件到日志系统。

这种方式的优点是日志采集容器和业务服务容器是独立的,系统资源不会相互影响 ,灵活性强,不受集群规模限制。

缺点是资源相对占用较多,因为针对每一个服务都要部署一个独立的agent容器,运维成本也相对较高。

小结

本文详细讲解了采集kubernetes容器化部署的服务日志的四种方法,每种方法都有优缺点和对应的使用场景,需要根据实际场景选择最合适的方式。


http://www.niftyadmin.cn/n/251762.html

相关文章

AcWing第 100 场周赛

4953. 比赛 n 个人参加乒乓球比赛。 比赛一共进行了 n−1 场。 每场比赛举办方都需要准备 2b1 瓶水,其中 2b 瓶水给选手(每场比赛 2 人参加,每人 b 瓶),1 瓶水给裁判。 此外,所有参加比赛的 n 名选手&a…

微服务 - Consul服务注册中心

概述 上篇说到构建良好的架构,依托于基础设施建设(自动化测试、自动化部署、服务监控,服务发现、配置中心等等),决定成败的往往是基础设施建设,所以从搭建一个注册中心和配置中心开始我们新一阶段的启程。 注册中心 注册中心选型…

Virtual Private Network

目录 一:VPN问答 二:实验 一:VPN问答 1.什么是数据认证,有什么作用,有哪些实现的技术手段? 数据认证是指通过一系列验证过程检查数据的完整性、真实性、可靠性和准确性,以确保这些数据来自于已知或可信…

【Unity入门】16.脚本引用组件

【Unity入门】脚本引用组件 大家好,我是Lampard~~ 欢迎来到Unity入门系列博客,所学知识来自B站阿发老师~感谢 (一)脚本引用普通组件 (1)点击控制音频播放 还记得我们的车载音乐AudioSource吗?…

Java集合操作工具:some、any以及every

最近学习PAIP的时候,顺便看了下回味了下Common Lisp,注意到几个实用的集合操作函数,本文记录下在Java中的实现。 场景 我想大家在平常开发中应该经常遇到这样场景:想要从集合中找到符合某个条件的元素,或者判断集合中…

Java资料

这些工具伴随着Java一起出现,在各自辉煌之后还在一直使用。 Apache Ant:基于XML的构建管理工具。cglib:字节码生成库。GlassFish:应用服务器,由Oracle赞助支持的Java EE参考实现。Hudson :持续集成服务器&…

C++中的this指针

目录 this指针的作用 如何使用this指针 this指针的使用注意事项 总结 在C中,this指针是一个指向当前对象的指针。它是一个隐式参数,指向当前正在执行的成员函数的对象。在函数内部,可以使用this指针来访问对象的成员变量和成员函数。 thi…

PYTHON 函数 continue 和break 的功能

# break: 结束所有本层循环 直接跳出本层循环 结束循环,不会在执行循环内部,break以下的语句,也不会再去执行判断条件 案例:while True:user input("请输入用户名 ")if user myy:print("用户名正确")brea…