简介: 非常有幸参加了云原生社区Meetup北京站,有机会和众多业内的大牛一起讨论云原生相关的技术和应用,本次Meetup上我和大家分享了关于云原生下的可观察性相关的议题,本篇文章主要是视频的文字性总结,欢迎大家留言讨论。
可观察性最早来自于电气工程领域,主要原因是随着系统发展的逐步复杂,必须要有一套机制用来了解系统内部的运行状态以便更好的监控和问题修复,为此工程师们设计了很多传感器、仪表盘用于表现系统内部的状态。
A system is said to be observable if, for any possible evolution of state and control vectors, the current state can be estimated using only the information from outputs.
电气工程发展了上百年,其中各个子领域的可观察性都在进行完善和升级,例如交通工具(汽车/飞机等)也算的是可观察性上的集大成者。抛开飞机这种超级工程不谈,一辆可正常上路的小型汽车内部也有上百种的传感器用来检测汽车内/外部的各种状态,以便让汽车可以稳定、舒适、安全地的行驶。
随着上百年的发展,电气工程下的可观察性已经不仅仅用来辅助人们进行问题检查和定位问题,我们以汽车工程来看,整个可观察性的发展经历了几个过程:
作为电气工程上可观察性的巅峰,自动驾驶将汽车获取到的各类内外部数据发挥到极致,总结起来主要有几下几个核心的要素:
伴随着几十年的发展,IT系统中的监控、问题排查也逐渐抽象为可观察性工程。在当时,最主流的方式还是使用Metrics、Logging、Tracing的组合。
上面这幅图详细大家非常熟悉,这是Peter Bourgon在参加完2017 Distributed Tracing Summit后发表的一篇博文,简洁扼要地介绍了Metrics、Tracing、Logging三者的定义和关系。这三种数据在可观察性中都有各自的发挥空间,每种数据都没办法完全被其他数据代替。
以Grafana Loki中介绍中的一个典型问题排查过程来看:
1. 最开始我们通过各式各样的预设报警发现异常(通常是Metrics/Logging)
2. 发现异常后,打开监控大盘查找异常的曲线,并通过各种查询/统计找到异常的模块(Metrics)
3. 对这个模块以及关联的日志进行查询/统计分析,找到核心的报错信息(Logging)
4. 最后通过详细的调用链数据定位到引起问题的代码(Tracing)
上述例子介绍了如何使用Metric、Tracing、Logging去联合排查问题,当然根据不同的场景可以有不同的结合方案,例如简单的系统可以直接通过日志的错误信息去告警并直接定位问题,也可以根据调用链提取的基础指标(Latency、ErrorCode)触发告警。但整体而言,一个具有良好可观察性的系统必须具备上述三种数据。
云原生带来的不仅仅是应用部署能够部署云上而已,其整个的定义是一套新的IT系统架构升级,包括开发模式、系统架构、部署模式、基础设施全套的演进和迭代。
上述的这些问题相信很多读者都会深有体会,而业界也针对这种情况退出了各类可观察性相关的产品,包括开源、商业化的众多项目。例如:
利用这些项目的组合或多或少可以解决针对性的一类或者几类问题,但真正应用起来你会发现各种问题:
在此背景下,云原生基金会CNCF下诞生了OpenTelemetry项目,旨在将Logging、Tracing、Metrics三者进行统一,实现数据的互通互操作。
Create and collect telemetry data from your services and software, then forward them to a variety of analysis tools.
OpenTelemetry最核心的功能是产生、收集可观察性数据,并支持传输到各种的分析软件中,整体的架构如下图所属,其中Library用于产生统一格式的可观察性数据;Collector用来接收这些数据,并支持把数据传输到各种类型的后端系统。
OpenTelemetry给云原生下带来的革命性的进步,包括:
从上面的分析来看,OpenTelemetry的定位是作为可观察性的基础设施,解决数据规范与获取的问题,后续部分依赖各个Vendor来实现。当然最佳的方式是能够有一个统一的引擎去存储所有的Metrics、Logging、Tracing,有一个统一的平台去分析、展示、关联这些数据。目前的话还没有一个厂商能够非常好的支持OpenTelemetry的统一后端,现在还是需要自己去使用各个厂商的产品来实现。而这个带来的另一个问题是各个数据的关联会更加复杂,还需要去解决每个厂商之间的数据关联性问题。当然这个问题相信在1-2年肯定会解决掉,现在有众多厂商开始在努力实现OpenTelemetry所有类型数据的统一方案。
我们团队从刚开始09年做飞天5K项目起,就一直在负责监控、日志、分布式链路追踪等可观察性相关的工作,中间经历过小型机到分布式系统再到微服务、云化的一些架构变更,相关的可观察性方案也经历了很多演变。我们觉得整体上可观察性相关的发展和自动驾驶等级的设定非常吻合。
自动驾驶一共分为6级,其中0-2级主要还是靠人来进行决定,到了等级3之后就可以进行无意识驾驶,也就是手眼可以暂时性不用关注驾驶,到了等级5的话人就可以完全脱离驾驶这个枯燥的工作,在车上可以自由活动。
在IT系统的可观察性上,也可以类似划分6级:
目前我们SLS正在开展云原生可观察性的工作,基于OpenTelemetry这个未来云原生下可观察性的标准,实现各类可观察性数据的统一收集,覆盖各个数据源和各类数据类型,做到多语言支持、多设备支持、类型统一;向上我们会提供能够支持各类可观察性数据的统一存储和计算能力,支持PB级存储、ETL、流计算、百亿级数据秒级分析,为上层算法提供强大的算力支撑;IT系统的问题非常复杂,尤其涉及到不同的场景和架构,因此我们把算法和经验结合起来进行异常的分析,算法包括基础的统计学、逻辑性算法,也包括AIOp相关的算法,经验中包括人工输入的专家知识、网上上积累的各类问题解决方案以及外部产生的一些事件;最上层我们会提供一些辅助决策的功能,例如告警通知、数据可视化、Webhook等,此外会提供丰富的外部集成能力,例如对接三方的可视化/分析/告警系统,提供OpenAPI以便不同的应用方集成。
作为CNCF下除了Kubernetes外最活跃的项目,OpenTelemetry受到了各大云厂商以及相关解决方案公司的关注,相信未来一定会成为云原生下可观察性的标准。虽然目前还没有到生产可用的程度,但是目前各个语言的SDK和Collector也基本上稳定,在2021年就能够发布生产可用的版本,值得大家期待。
作者:元乙
原文链接
本文为阿里云原创内容,未经允许不得转载