其他
Kubernetes 下日志采集、存储与处理技术实践
Kubernetes日志处理的趋势与挑战
Kubernetes的serveless化
在一个Kubernetes node上,可能会运行更大规模量级的pod,每个pod上都可能有日志或监控指标采集需求,意味着单node上的日志量会更大。 一个Kubernetes node上可能会运行更多种类的pod,日志采集来源变得多样化,各类日志的管理、打标需求越来越迫切。
日志实时性需求越来越强
告警处理。搞devops同学都深有体会,线上问题越早发现、越早处理我们就可以更淡定,处理时间拖得久了故障就可能跟着升级。实时日志帮助我们更快发现系统的异常指标,触发应急处理流程。 AIOps。目前已经有一些算法基于日志做异常点检测、趋势预测:根据日志的pattern变化态势发现正常和异常情况下各类型日志出现的分布;针对IT业务系统,给定参数因子、变量对诸如硬盘故障等问题进行建模,加以实时日志来实现故障事件预警。
日志的集中式存储
Kubernetes日志采集方案的演进
只支持标准输出 数据不能持久化 除了看做不了别的事
基于docker engine和logdriver,除了默认的标准输出,不支持应用程序的日志 日志文件rotate多次或者Kubernetes node被驱逐后数据会丢失 没法跟开源社区、云上的数据分析工具集成
一种伴生模式,在一个pod内,除了业务容器外,还有一个日志客户端容器。这个日志客户端容器负责采集pod内容器的标准输出、文件、metric数据上报服务端。
Kubernetes日志处理架构
Kubernetes官方推荐的是treasure data公司开源的fluentd,它的性能现、插件丰富度比较均衡。 社区有也不少在使用elastic公司开源的beats系列,性能不错,插件支持略少一些。针对一种数据需要部署特定的客户端程序,比如文本文件通过filebeats来采集。 也有些架构在使用logstash,ETL支持非常丰富,但是JRuby实现导致性能很差。
首先,这是一个标准的节点级采集方案,Kubernetes下fluentd等客户端的程序部署、采集配置管理是个难题,在日志采集路由、数据打标、客户端配置等问题没有针对性优化。 其次,在日志的消费上,虽然Kafka的软件生态足够丰富,但是仍然需要专业人员来维护,要做业务规划、考虑机器水位、处理硬件损坏。如果要查询分析日志,还需要有对Elastic Search系统有足够了解。我们知道在PB级数据场景下,分布式系统的性能、运维问题开始凸显,而驾驭这些开源系统需要很强的专业能力。
日志服务的Kubernetes日志架构实践
在可靠性和稳定性上,它支撑了阿里集团和蚂蚁金服多次双十一和双十二的大促。 在功能上一站式覆盖了Kafka + ElasticSearch大部分场景。 作为云上的基础设施可以方便地实现弹性伸缩,对于用户来说,大促时不需要操心买机器扩容、每天坏上数十个盘需要维修等问题。 日志服务也同样具备云的0预付成本、按需付费的特点,并且目前每月有500MB的免费额度。
作为日志基础设施,解决了各种日志数据集中化存储问题。 服务化的产品带给用户更多的易用性,与Kubernetes在serverless的目标上也是契合的。 功能上同时满足实时读写、HTAP需求,简化了日志处理的流程与架构。
采集目标多样化
采集可靠性
动态伸缩带来的挑战
采集配置易用性
部署
采集配置管理
在采集客户端层面,Kubernetes可能产生大量日志,日志采集软件需要利用机器的多个cpu核心解析、预处理日志,并通过多线程并发或者单线程异步回调的方式处理网络发送的慢IO问题。这使得日志数据不能按照机器上的事件产生顺序依次到达服务端。 在分布式系统的服务端层面,由于水平扩展的多机负载均衡架构,使得同一客户端机器的日志会分散在多台存储节点上。在分散存储的日志基础上再恢复最初的顺序是困难的。
说明:本文转自公众号“云栖社区”
往期推荐