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

导读:上一篇文章《6 个 K8s 日志系统建设中的典型问题,你遇到过几个?》中我们介绍了为什么需要一个日志系统、为什么云原生下的日志系统如此重要以及云原生背景下日志系统的建设难点,相信 DevOps、SRE、运维等同学看了之后深有体会。本篇文章单刀直入,会直接跟大家分享一下如何在云原生的场景下搭建一个灵活、功能强大、可靠、可扩容的日志系统。

需求驱动架构设计

技术架构,是将产品需求转变为技术实现的过程。对于所有的架构师而言,能够将产品需求分析透彻是非常基本也是非常重要的一点。很多系统刚建成没多久就要被推翻,最根本的原因还是没有解决好产品真正的需求。

我所在的日志服务团队在日志这块有近10年的经验,几乎服务阿里内部所有的团队,涉及电商、支付、物流、云计算、游戏、即时通讯、IoT等领域,多年来的产品功能的优化和迭代都是基于各个团队的日志需求变化。

有幸我们最近几年在阿里云上实现了产品化,服务了数以万计的企业用户,包括国内各大直播类、短视频、新闻媒体、游戏等行业Top1互联网客户。产品功能从服务一个公司到服务上万家公司会有质的差别,上云促使我们更加深入的去思考:究竟哪些功能是日志这个平台需要去为用户去解决的,日志最核心的诉求是什么,如何去满足各行各业、各种不同业务角色的需求...

需求分解与功能设计

上一节中我们分析了公司内各个不同角色对于日志的相关需求,总结起来有以下几点:

  1. 支持各种日志格式、数据源的采集,包括非K8s
  2. 能够快速的查找/定位问题日志
  3. 能够将各种格式的半结构化/非结构化日志格式化,并支持快速的统计分析、可视化
  4. 支持通过日志进行实时计算并获得一些业务指标,并支持基于业务指标实时的告警(其实本质就是APM)
  5. 支持对于超大规模的日志进行各种维度的关联分析,可接受一定时间的延迟
  6. 能够便捷的对接各种外部系统或支持自定义的获取数据,例如对接第三方审计系统
  7. 能够基于日志以及相关的时序信息,实现智能的告警、预测、根因分析等,并能够支持自定义的离线训练方式以获得更好的效果

为满足上述这些功能需求,日志平台上必须具备的功能功能模块有:

  1. 全方位日志采集,支持DaemonSet、Sidecar各种采集方式以应对不同的采集需求,同时支持Web、移动端、IoT、物理机/虚拟机各种数据源的采集;
  2. 日志实时通道,这个是为了对接上下游所必备的功能,保证日志能够被多种系统所便捷的使用;
  3. 数据清洗(ETL: Extract,Transform,Load),对各种格式的日志进行清洗,支持过滤、富化、转换、补漏、分裂、聚合等;
  4. 日志展现与搜索,这是所有日志平台必须具备的功能,能够根据关键词快速的定位到日志并查看日志上下文,看似简单的功能却最难做好;
  5. 实时分析,搜索只能完成一些定位到问题,而分析统计功能可以帮助快速分析问题的根因,同时可以用于快速的计算一些业务指标;
  6. 流计算,通常我们都会使用流计算框架(Flink、Storm、Spark Stream等)来计算一些实时的指标或对数据进行一些自定义的清洗等;
  7. 离线分析,运营、安全相关的需求都需要对大量的历史日志进行各种维度的关联计算,目前只有T+1的离线分析引擎能够完成;
  8. 机器学习框架,能够便捷、快速的将历史的日志对接到机器学习框架进行离线训练,并将训练后的结果加载到线上实时的算法库中。

开源方案设计

借助于强大的开源社区,我们可以很容易基于开源软件的组合来实现这样一套日志平台,上图是一个非常典型的以ELK为核心的日志平台方案:

  • 利用FileBeats、Fluentd等采集Agent实现容器上的数据统一收集。
  • 为了提供更加丰富的上下游以及缓冲能力,可以使用kafka作为数据采集的接收端。
  • 采集到的原始数据还需要进一步的清洗,可以使用Logstash或者Flink订阅Kafka中的数据,清洗完毕后再写入kafka中。
  • 清洗后的数据可以对接ElasticSearch来做实时的查询检索、对接Flink来计算实时的指标和告警、对接Hadoop来做离线的数据分析、对接TensorFlow来做离线模型训练。
  • 数据的可视化可以使用grafana、kibana等常用的可视化组件。

为什么我们选择自研

采用开源软件的组合是非常高效的方案,得益于强大的开源社区以及庞大用户群体的经验积累,我们可以很快搭建出这样一套系统,并且可以满足我们绝大部分的需求。

当我们把这套系统部署好,能够把日志从容器上采集上来、elasticsearch上能够查到、Hadoop上能够成功执行SQL、Grafana上能看到图、告警短信能收到......完成上述流程打通后,加加班可能只需要花费几天的时间,当系统终于跑通的时候,这时候终于可以长舒一口气,躺在办公椅上放松放松。

然而理想很丰满现实很骨感,当我们预发通了,测试完了上到生产,开始接入第一个应用,逐渐更多的应用接入,越来越多的人开始使用......这时候很多问题都可能暴露出来:

  • 随着业务量的上涨,日志量也越来越大,Kakfa和ES要不断扩容,同时同步Kafka到ES的Connector也需要扩容,最烦的是采集Agent,每台机器上部署的DaemonSet Fluentd根本没办法扩容,到了单Agent瓶颈就没办法了,只能换Sidecar,换Sidecar工作量大不说,还会带来一系列其他的问题,比如怎么和CICD系统集成、资源消耗、配置规划、stdout采集不支持等等。
  • 从刚开始上的边缘业务,慢慢更多的核心业务接入,对于日志的可靠性要求越来越高,经常有研发反应从ES上查不到数据、运营说统计出来的报表不准、安全说拿到的数据不是实时的......每次问题的排查都要经过采集、队列、清洗、传输等等非常多的路径,排查代价非常高。同时还要为日志系统搭建一套监控方案,能够即时发现问题,而且这套方案还不能基于日志系统,不能自依赖。
  • 当越来越多的开发开始用日志平台调查问题时,经常会出现因为某1-2个人提交一个大的查询,导致系统整体负载上升,其他人的查询都会被Block,甚至出现Full GC等情况。这时候一些大能力的公司会对ES进行改造,来支持多租户隔离;或者为不同的业务部门搭建不同的ES集群,最后又要运维多个ES集群,工作量还是很大。
  • 当投入了很多人力,终于能够把日志平台维持日常使用,这时候公司财务找过来了,说我们用了非常多的机器,成本太大。这时候开始要优化成本,但是思来想去就是需要这么多台机器,每天大部分的机器水位都在20%-30%,但是高峰的水位可能到70%,所以不能撤,撤了高峰顶不住,这时候只能搞搞削峰填谷,又是一堆工作量。

上述这些是一家中等规模的互联网企业在日志平台建设中经常会遇到的问题,在阿里这些问题会放大非常多倍:

  • 比如面对双十一的流量,市面上所有的开源软件都无法满足我们那么大流量的需求。
  • 面对阿里内部上万个业务应用,几千名工程师同时使用,并发和多租户隔离我们必须要做到极致。
  • 面对非常多核心的订单、交易等场景,整个链路的稳定性必须要求3个9甚至4个9的可用性。
  • 每天如此大的数据量,对于成本的优化显得极为重要,10%的成本优化带来的收益可能就有上亿。

阿里K8s日志方案

针对上述的一些问题,我们经过多年的时间,开发并打磨出这样一套K8s日志方案:

  1. 使用我们自研的日志采集Agent Logtail实现K8s全方位的数据采集,目前Logtail在集团内有数百万的全量部署,性能、稳定性经过多次双十一金融级考验。
  2. 化繁为简,数据队列、清洗加工、实时检索、实时分析、AI算法等原生集成,而不是基于各种开源软件搭积木的形式实,大大降低了数据链路长度,链路长度的降低也意味着出错可能性的减少。
  3. 队列、清洗加工、检索、分析、AI引擎等全部针对日志场景深度定制优化,满足大吞吐、动态扩容、亿级日志秒级可查、低成本、高可用性等需求。
  4. 对于流式计算、离线分析场景这种通用需求,无论是开源还是阿里内部都有非常成熟的产品,我们通过无缝对接的方式来支持,目前日志服务支持了数十种下游的开源、云上产品的对接。

这套系统目前支撑了整个阿里集团、蚂蚁集团、云上上万家企业的日志分析,每天写入的数据量16PB+,开发、运维这样一套系统问题和挑战非常多,这里就不再展开,有兴趣的同学可以参考我们团队的技术分享:阿里10PB/天日志系统设计和实现。

总结

本篇主要从架构层面去介绍如何搭建一套K8s的日志分析平台,包括开源方案以及我们阿里自研的一套方案。然而实际这套系统落地到生产环境并有效运行还有很多工作要做:

  1. K8s上以什么样的姿势来打日志?
  2. K8s上的日志采集方案选择,DaemonSet or Sidecar?
  3. 日志方案如何与CICD去集成?
  4. 微服务下各个应用的日志存储如何划分?
  5. 如何基于K8s系统的日志去做K8s监控?
  6. 如何去监控日志平台的可靠性?
  7. 如何去对多个微服务/组件去做自动的巡检?
  8. 如何自动的监控多个站点并实现流量异常时的快速定位?


原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/517374.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在 Kubernetes 上配置 Jenkins?

作者 | Sudip Sengupta译者 | 火火酱,责编 | Carol封图 | CSDN 下载自视觉中国在本文中,我们将一起完成在Kubernetes上配置Jenkins的工作。作为一款被广泛使用的开源CI服务器,Jenkins提供了数百个插件,能够为我们项目的构建、部署…

MySQL做数据统计SQL语句整理大全(原理+实战)

🎨领域:Java后端开发🔥收录专栏: MySQL原理与实战 🐒个人主页:BreezAm 💖Gitee:https://gitee.com/BreezAm ✨个人标签:【后端】【大数据】【前端】【运维】 文章目录&a…

如何在一周内上线50个用户增长策略

在闲鱼用户增长业务上的实验 我们最先落地的业务是在用户增长上,闲鱼的用户增长业务有如下描述: 闲鱼的卖家都是普通小卖家,而非专业的B类商家。因此无法统一组织起来参加营销活动带来买家活跃。我们目前DAU已经突破到2000W,如何…

jstat gc各参数含义

参数说明S0C第一个幸存区的大小S1C第二个幸存区的大小S0U第一个幸存区的使用大小S1U第二个幸存区的使用大小EC伊甸园区的大小EU伊甸园区的使用大小OC老年代大小OU老年代使用大小MC方法区大小MU方法区使用大小CCSC压缩类空间大小CCSU压缩类空间使用大小YGC年轻代垃圾回收次数YGC…

MySQL用户如何构建实时数仓

依托数据库生态,AnalyticDB for MySQL可以给用户提供分析场景下的标准解决方案,尤其是在大数据和性能要求较高的情况下AnalyticDB for MySQL的价值可以更好的体现。 MySQL用户为什么要单独构建数据仓库 为什么要单独构建数据仓库,而不是直接…

138 张图带你 MySQL 入门!

作者 | cxuan来源 | Java建设者SQL 基础使用MySQL 是一种关系型数据库,说到关系,那么就离不开表与表之间的关系,而最能体现这种关系的其实就是我们接下来需要介绍的主角 SQL,SQL 的全称是 Structure Query Language ,…

Centos/Red Hat6.8 安装、配置、启动Gitlab (内网环境)

文章目录一、软件和源准备1. Gitlab下载2. epel源下载二、环境配置2.1. 安装依赖项2.2. 安装epel源2.3. 安装Gitlab三、Gitlab和防火墙配置3.1. 设置external_url3.2. 重新加载配置3.3. 防火墙配置四、测试验证4.1. 浏览器访问Gitlab4.2. 重新设置密码4.3. Gitlab常用命令一、软…

Promise封装Ajax实现POST和GET请求

🎨领域:Java后端开发🔥收录专栏: 前端技术 🐒个人主页:BreezAm 💖Gitee:https://gitee.com/BreezAm ✨个人标签:【后端】【大数据】【前端】【运维】 文章目录介绍一、相…

轻松构建基于 Serverless 架构的弹性高可用视频处理系统

前言 随着计算机技术和 Internet 的日新月异,视频点播技术因其良好的人机交互性和流媒体传输技术倍受教育、娱乐等行业青睐,而在当前, 云计算平台厂商的产品线不断成熟完善, 如果想要搭建视频点播类应用,告别刀耕火种…

Centos/Red Hat6.8 安装、配置、启动Gitlab (内网环境)心得分享

文章目录一、Gitlab下载1. Gitlab官网下载二、分析思路2.1. 分析2.2. 代码托管平台2.3. 镜像站二、Gitlab 重新加载配置异常2.1. 异常现象2.2. 分析定位三、百度解决问题3.1. 百度类似异常3.2. 参考博文3.3. 解决方案3.4. 执行测试3.5. 结论四、官网issues 014.1. 找官网issues…

祝贺我的同事王坚当选院士!

刚刚, 收到一个激动人心的消息: 原文链接 本文为云栖社区原创内容,未经允许不得转载。

带你从零入门 Serverless | 一文详解 Serverless 架构模式

作者 | Hongqi 阿里云高级技术专家责编 | Carol来源 | Serverless本文整理自《Serverless 技术公开课》什么是 Serverless 架构?按照 CNCF 对 Serverless 计算的定义,Serverless 架构应该是采用 FaaS(函数即服务)和 BaaS&#xf…

端智能揭秘|促使双十一GMV大幅提升,手淘用了什么秘密武器?

作者|莫凌、桑杨、明依 出品|阿里巴巴新零售淘系技术部 导读:信息流作为手淘的一大流量入口,对手淘的浏览效率转化和流量分发起到至关重要的作用。在探索如何给用户推荐其喜欢的商品这条路上,我们首次将端计算大规模应用在手淘客户端&#xf…

bug:The selected directory is not a valid home for Go SDK

问题描述: 使用IDEA插件配置go开发环境无法选择已经安装配置好的SDK 当选择local中的SDK时,出现如下错误: The selected directory is not a valid home for Go SDK解决方案: 在自己的SDK目录C:\Program Files\Go\src\runtime\…

Dataphin的代码自动化能力如何助力商业决策

前言 随着大数据趋势的迅速增长,数据的重要性与日俱增,企业内看数据、用数据的诉求越来越强烈,其中最常见的就是各种经营报表数据: 老板每日早晨9点准时需要看到企业核心的经营数据,以便进行企业战略及方向决策 业务负…

Gitlab14.x 安装、配置、启动 (Centos/Red Hat7/8.x)

文章目录一、下载、安装、配置依赖1. 安装配置需要的依赖2. Gitlab下载3. 安装Gitlab4. 配置external_url5. 重新加载配置文件6. 查看服务状态7. 配置防火墙8. 浏览器验证9. 寻找密码信息10. 查看密码11. 重新登陆12. 修改密码13. 重新登陆14. Gitlab常用命令声明:C…

如何通过Dataphin构建数据中台新增100万用户?

欢迎来到数据中台小讲堂!这一期我们来看看,作为阿里巴巴数据中台(OneData - OneModel、OneID、OneService)方法论的产品载体,Dataphin如何帮助传统零售企业实现数字化转型,并在短时间内新增100万用户? 传统营销的痛点…

真香!3个月0基础转型大厂数据分析师,他做对了什么?

年初的黑天鹅打乱了我的求职阵脚,专业不对口,无实习经验,在求职路上的竞争优势几乎为0,然而,开启自救模式后,我顺利成为了头条数据分析师,下面我就讲讲人生是怎么开挂的。随着人工智能普及&…

36氪联合阿里云,共同研制中小企业发展「催化剂」

互联网的“中场战事” 伴随着第一代原生互联网人进入中年,高速发展了20多年的互联网也开始进入了中场阶段。 现阶段的创新创业领域,商业逻辑已日渐清晰,标志性公司陆续出现,整个行业大家在争夺什么、竞争什么都已摆在眼前。 大…

如何在项目运行过程中动态修改邮箱发件人的配置信息

🎨领域:Java后端开发🔥收录专栏: 框架 🐒个人主页:BreezAm 💖Gitee:https://gitee.com/BreezAm ✨个人标签:【后端】【大数据】【前端】【运维】 文章目录业务场景场景分…