文档章节

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

阿里巴巴云原生
 阿里巴巴云原生
发布于 2019/11/20 14:34
字数 3180
阅读 11
收藏 0

作者 | 元乙  阿里云存储服务技术专家

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

需求驱动架构设计

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

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

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

需求分解与功能设计

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

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

1

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

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

开源方案设计

2

借助于强大的开源社区,我们可以很容易基于开源软件的组合来实现这样一套日志平台,上图是一个非常典型的以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日志方案

3

针对上述的一些问题,我们经过多年的时间,开发并打磨出这样一套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. 如何自动的监控多个站点并实现流量异常时的快速定位?

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

© 著作权归作者所有

阿里巴巴云原生

阿里巴巴云原生

粉丝 66
博文 271
码字总数 878040
作品 0
杭州
私信 提问
加载中

评论(0)

一文看懂Container Attached Storage

本文给出了Container Attached Storage的简单定义,解释了这个模式是什麽,出现的原因和工作方式。 什么是Container Attached Storage? 如上图所示 ,Container Attached Storage是包含由K...

K8S技术社区
2018/04/26
0
0
【转载】Docker+Kubernetes 干货文章精选

主要涉及到以下关键字: K8S、Docker、微服务、安装、教程、网络、日志、存储、安全、工具、CI/CD、分布式、实践、架构等; 以下盘点2018年一些精选优质文章! 漫画形式: 漫画:小黄人学 Se...

泡枸杞的IT人
2019/02/18
0
0
6 个 K8s 日志系统建设中的典型问题,你遇到过几个?

作者 元乙 阿里云日志服务数据采集客户端负责人,目前采集客户端 logtail 在集团百万规模部署,每天采集上万应用数 PB 数据,经历多次双 11、双 12 考验。 导读:随着 K8s 不断更新迭代,使用...

阿里巴巴云原生
2019/09/18
36
0
Kubernetes杭州集市干货大起底,你get了吗?

2018年3月31日,在美丽的西子湖畔,CNCF Meetup——Kubernetes GeekGathering 2018杭州站与众多新朋老友如约相会,此次技术集会由K8S技术社区、EasyStack、网易云联合主办,谐云科技、网银互...

k8scaptain
2018/04/20
0
0
7月30日、31日|时速云Docker&Kubernetes技术沙龙【上海站&杭州站】

时速云是国内领先的容器云平台与解决方案提供商,自成立之日起,就根植于技术社区,致力于推动以Docker为代表的容器技术在国内的发展。迄今为止我们已在北京成功举办四期Docker&Kubernetes技...

时速云
2016/07/11
328
1

没有更多内容

加载失败,请刷新页面

加载更多

手把手教你搭建 ELK 实时日志分析平台

本篇文章主要是手把手教你搭建 ELK 实时日志分析平台,那么,ELK 到底是什么呢? ELK 是三个开源项目的首字母缩写,这三个项目分别是:Elasticsearch、Logstash 和 Kibana。 Elasticsearch ...

武培轩
53分钟前
52
0
直播报名 | Service Mesh技术实践分享

近年来,云原生(Cloud Native)逐渐成为一个技术领域内的流行语,热度居高不下。企业正在加速拥抱云原生架构,以此缩短产品发布周期、敏捷响应市场需求,继而从云计算服务中提炼新的价值和技...

百度开发者中心
今天
57
0
Qt 实现QTableView单元格多按钮效果

实现效果预览: 思路: 使用Qt的委托类独自渲染表格的某一列,如上图字段2的那一列。该一个单元格放入多个按钮,重写 QStyledItemDelegate 委托类 paint 方法即可实现上图效果。 代码: 委托...

剑是SR剑
今天
71
0
第一章 引子--总结

1.开发过程中对公共、通用的素材做好沉淀。 2.厚平台、薄应用:理解是底层较多的基础公共平台、薄应用 最上层的应用,具体实现 3.烟卤式系统建设:一个业务一个系统,比如天猫和淘宝,开始是...

zxx901221
今天
57
0
利用docker来部署go应用程序

利用docker实现go程序的快速部署 最近很长一段时间一直通过各种渠道去了解国内外有关devops方面的实践,感受很多的知识点都特别的分散,所以想通过系统的整理来巩固相应的知识体系。接下来会...

罗布V
今天
64
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部