6 个 K8s 日志系统建设中的典型问题,你遇到过几个?

作者 |? 元乙? 阿里云日志服务数据采集客户端负责人,目前采集客户端 logtail 在集团百万规模部署,每天采集上万应用数 PB 数据,经历多次双 11、双 12 考验。

导读:随着 K8s 不断更新迭代,使用?K8s 日志系统建设的开发者,逐渐遇到了各种复杂的问题和挑战。本篇文章中,作者结合自己多年经验,分析 K8s 日志系统建设难点,期待为读者提供有益参考。

在 Logging 这块做了几年,最近 1 年来越来越多的同学来咨询如何为 Kubernetes 构建一个日志系统,或者是来求助在这过程中遇到一系列问题如何解决,授人以鱼不如授人以渔,于是想把我们这些年积累的经验以文章的形式发出来,让看到这篇文章的同学能少走弯路。这个系列文章定位为长篇连载,内容偏向落地实操以及经验分享,且内容会随着技术的迭代而不定期更新。

前言

第一次听到 Kubernetes 的名字是在 2016 年,那个时候 Kubernetes 还处于和 Docker Swarm、Mesos 方案的“三国鼎立时代”,Kubernetes 由于一系列优势(可扩展、声明式接口、云友好)在这一竞争中崭露头角,最终获得统治地位。
Kubernetes 作为 CNCF 最核心的项目(没有之一),是 Cloud Native(云原生)落地的底座,目前阿里已经全面基于 Kubernetes 在开展全站的云原生改造,在 1-2 年内,阿里巴巴 100% 的业务都将跑在公有云上。
CloudNative 在?CNCF 的定义的核心是:在公有云、私有云、混合云等环境中,通过 Containers、Service Meshes、 MicroServices、Immutable Infrastructure、Declarative APIs 构建和运行可弹性扩展的且具有高容错性、易于管理、可观察、松耦合的应用系统。可观察性是应用系统必不可少的一个部分,云原生的设计理念中就有一条:面向诊断性设计(Diagnosability),包括集群级别的日志、Metric 和 Trace。

为何我们需要日志系统

通常一个线上问题的定位流程是:通过 Metric 发现问题,根据 Trace 定位到问题模块,根据模块具体的日志定位问题原因。在日志中包括了错误、关键变量、代码运行路径等信息,这些是问题排查的核心,因此日志永远是线上问题排查的必经路径。
在阿里的十多年中,日志系统伴随着计算形态的发展在不断演进,大致分为 3 个主要阶段:

  1. 在单机时代,几乎所有的应用都是单机部署,当服务压力增大时,只能切换更高规格的 IBM 小型机。日志作为应用系统的一部分,主要用作程序 Debug,通常结合 grep 等 Linux 常见的文本命令进行分析;
  2. 随着单机系统成为制约阿里业务发展的瓶颈,为了真正的 Scale out,飞天项目启动:2013 年飞天 5K 项目正式上线。在这个阶段各个业务开始了分布式改造,服务之间的调用也从本地变为分布式,为了更好的管理、调试、分析分布式应用,我们开发了 Trace(分布式链路追踪)系统、各式各样的监控系统,这些系统的统一特点是将所有的日志(包括 Metric 等)进行集中化的存储;
  3. 为了支持更快的开发、迭代效率,近年来我们开始了容器化改造,并开始了拥抱 Kubernetes 生态、业务全量上云、Serverless 等工作。在这阶段,日志无论从规模、种类都呈现爆炸式的增长,对日志进行数字化、智能化分析的需求也越来越高,因此统一的日志平台应运而生。

可观察性的终极解读

在 CNCF 中,可观察性的主要作用是问题的诊断,上升到公司整体层面,可观察性(Observability)不仅仅包括 DevOps 领域,还包括业务、运营、BI、审计、安全等领域,可观察性的最终的目标是实现公司各个方面的数字化、智能化。

在阿里,几乎所有的业务角色都会涉及到各式各样的日志数据,为了支撑各类应用场景,我们开发了非常多的工具和功能:日志实时分析、链路追踪、监控、数据加工、流计算、离线计算、BI 系统、审计系统等等。日志系统主要专注于数据的实时采集、清洗、智能分析与监控以及对接各类各样的流计算、离线系统。

Kubernetes 日志系统建设难点

单纯日志系统的解决方案非常多,相对也比较成熟,这里就不再去赘述,我们此次只针对 Kubernetes 上的日志系统建设而论。Kubernetes 上的日志方案相比我们之前基于物理机、虚拟机场景的日志方案有很大不同,例如:

  1. 日志的形式变得更加复杂,不仅有物理机/虚拟机上的日志,还有容器的标准输出、容器内的文件、容器事件、Kubernetes 事件等等信息需要采集;
  2. 环境的动态性变强,在 Kubernetes 中,机器的宕机、下线、上线、Pod销毁、扩容/缩容等都是常态,这种情况下日志的存在是瞬时的(例如如果 Pod 销毁后该 Pod 日志就不可见了),所以日志数据必须实时采集到服务端。同时还需要保证日志的采集能够适应这种动态性极强的场景;
  3. 日志的种类变多,上图是一个典型的 Kubernetes 架构,一个请求从客户端需要经过 CDN、Ingress、Service Mesh、Pod 等多个组件,涉及多种基础设施,其中的日志种类增加了很多,例如 K8s 各种系统组件日志、审计日志、ServiceMesh 日志、Ingress 等;
  4. 业务架构变化,现在越来越多的公司开始在 Kubernetes 上落地微服务架构,在微服务体系中,服务的开发更加复杂,服务之间的依赖以及服务底层产品的依赖越来越多,这时的问题排查将更加复杂,如果关联各个维度的日志将是一个困难的问题;
  5. 日志方案集成困难,通常我们都会在 Kubernetes 上搭建一套 CICD 系统,这套 CICD 系统需要尽可能的自动化的完成业务的集成和部署,其中日志的采集、存储、清洗等也需要集成到这套系统中,并和 K8s 的声明式部署方式尽可能一致。而现有的日志系统通常都是较独立的系统,集成到 CICD 中代价极大;
  6. 日志规模问题,通常在系统初期的时候我们会选择自建开源的日志系统,这种方式在测试验证阶段或公司发展初期是没有什么问题的,但当业务逐渐增长,日志量增长到一定规模时,自建的开源系统很多时候都会遇到各种各样的问题,例如租户隔离、查询延迟、数据可靠性、系统可用性等。日志系统虽不是 IT 中最核心的路径,但一旦关键时刻出现这些问题都将是非常可怕的影响,例如大促的时候出现紧急问题,排查时多个工程师并发查询把日志系统打爆,导致故障恢复时间变长,大促收到影响。

相信在搞 K8s 日志系统建设的同学看到上面的难点分析都会深有感触,后面我们会从落地角度出发,详细介绍在阿里我们如何去搭建 K8s 的日志系统,敬请关注。

“ 阿里巴巴云原生微信公众号(ID:Alicloudnative)关注微服务、Serverless、容器、Service Mesh等技术领域、聚焦云原生流行技术趋势、云原生大规模的落地实践,做最懂云原生开发者的技术公众号。”

原文地址:https://blog.51cto.com/13778063/2439063

时间: 2024-10-10 08:14:26

6 个 K8s 日志系统建设中的典型问题,你遇到过几个?的相关文章

房地产企业营销分析系统建设中的关键性指标是什么?

文章概述:随着公司业务越来越壮大,对内部管理要求也越来越高,急切需要一个统一的数据决策平台来进行数据汇报.决策.对于房地产企业来说,营销系统是数据决策平台的一个重要部分,那么在建设房地产企业营销分析系统中,关键性指标是什么?本文对此进行了详细的分析.文章来自帆软软件,经笔者加工而成. 帆软软件介绍:帆软软件公司是专业从事报表软件产品和商业智能产品研发的公司,提供报表软件和商业智能产品及整体应用解决方案. 经营指标 企业经营的关键指标往往反映企业的运营情况,这也是领导层最关心的内容,建立一套适应市

开源物联网通讯框架ServerSuperIO,成功移植到Windows10 IOT,在物联网和集成系统建设中降低成本。附:“物联网”交流大纲

[开源]C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 一.概述 经过一个多月晚上的时间,终于把开源物联网通讯框架ServerSuperIO成功移植到Windows10 IOT上,暂时全名:ServerSuperIO.WinIOT(以后可能还会移植到Ubuntu上).以后可以把ServerSuperIO框架应用到嵌入式设备上,移植的成功具有标志性意义,意味着软件和硬件的结合,软硬的结合才具有更强的生命力.为什么我特别愿意干这件事呢?源于我对以前工作的总结,如下图: 二.如果利

一文看懂 K8s 日志系统设计和实践

上一篇中我们介绍了为什么需要一个日志系统.为什么云原生下的日志系统如此重要以及云原生下日志系统的建设难点,相信DevOps.SRE.运维等同学看了是深有体会的.本篇文章单刀直入,会直接跟大家分享一下如何在云原生的场景下搭建一个灵活.功能强大.可靠.可扩容的日志系统. 需求驱动架构设计 技术架构,是将产品需求转变为技术实现的过程.对于所有的架构师而言,能够将产品需求分析透彻是非常基本也是非常重要的一点.很多系统刚建成没多久就要被推翻,最根本的原因还是没有解决好产品真正的需求. 我所在的日志服务团队

物联网建设中通讯互联层的终极解决方案

1.自我介绍 本人已经工作10年,一直在工业领域.在一线干过实施,下过矿井:干过项目,带过团队:干过软件研发,出过产品:干过项目群管理,售前和市场也接触过:期间在纯软件公司也干过将近两年的时间,熟悉软件开发流程与管理.虽然没有取得多大成绩,也算经历丰富了. 互联网“行业”如火如荼的发展,曾经也想过转行去做“互联网”,奈何犹豫太久,已然提不起太多兴趣.凭借当年的沉淀与积累,有个半成品的框架,在工作索然无味的情况下,毫不犹豫的投身到物联网框架的开发与产品化的进程中.别人都说物联网的时代来了,如果真的

linux学习之路之DNS视图及为DNS创建日志系统

DNS视图 什么是DNS视图(dns view)? DNS视图就是根据不同的客户来源(指的是ip),dns服务器使用不同的数据文件来完成解析过程.在这个过程中dns服务器是相同的,视图中的数据文件是不相同的.因此,不同的来源,使用不同的数据文件来解析,所以,解析后的结果也会不相同. 创建DNS view的过程 1.创建DNS的配置文件/etc/named.conf 只不过这个文件中的内容和之前的有一点不太一样. 在这里作者演示创建xsl.com这个域内的DNS服务器来说明,使服务器具有view功

Android日志系统Logcat源代码简要分析

文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6606957 在前面两篇文章Android日志系统驱动程序Logger源代码分析和Android应用程序框架层和系统运行库层日志系统源代码中,介绍了Android内核空间层.系统运行库层和应用程序框架层日志系统相关的源代码,其中,后一篇文章着重介绍了日志的写入操作.为了描述完整性,这篇文章着重介绍日志的读取操作,这就是我们在开发Android应用

中智讯-开放式智慧教室实训系统建设方案

中智讯(武汉)科技有限公司开放式智慧教室实训系统建设方案 1   智慧教室项目开发背景1.1    互联互通的物联网技术 随着网络覆盖的普及,人们提出了一个问题,既然无处不在的网络能够成为人际间沟通的无所不能的工具,为什么我们不能将网络作为物体与物体沟通的工具,人与物体沟通的工具,乃至人与自然沟通的工具?于是,物联网技术的发展应运而生.物联网是"万物沟通"的.具有全面感知.可靠传送.智能处理特征的连接物理世界的网络,实现了任何时间.任何地点及任何物体的连结.可以帮助实现人类社会与物理世

PHP框架中的日志系统

现在在一家公司做PHP后台开发程序猿(我们组没有前端,做活动时会做前端的东西),刚开始到公司的时候花2个周赶出了一个前端加后台的活动(记得当时做不出来周末加了两天班...),到现在过去4个多月了,可以用一下午秒掉一个不是很复杂的活动,当然了现在做的时候会考虑很多东西,比如说扩展性.可重用性,因为做的多了,会积累很多类似小插件的东西,所以会很快......但是我发现整天“站在需求里面做需求”很差劲,这样不会学到系统的.框架类的东西,因为都被琐碎的需求给困住了,没有时间去做一些框架重要部分的东西,而

入门篇:11.Android中日志系统和权限系统

一.安卓中的日志系统 1.java中常用的两个日志 System.out.println();//普通日志 System.err.println();//警告日志 2.android中常用的日志种类 Log.e(Tag,"错误信息"); Log.w(Tag,"警告信息"); Log.i(Tag,"普通信息"); Log.d(Tag,"调试信息"); Log.v(Tag,"无用信息"); ps:这个log.v