由来
提到可观测性这个词语,很多人或许会不削一顾,:"这个不就是旧瓶装新酒吗?和监控有什么差别吗?" 。带着这个问题,我们先来看看这个词诞生的时代背景。
随着近几年云计算、云原生的出现,我们发现花在标准化部署、上线的周期被大大缩短。但数字化技术的出现,却对背后研发、运维和运维的工程师们提出了更高的要求,例如:
- 研发和上线的过程中,需要尽可能模拟真实的情况,对测试环境系统进行对比,判别
- 在上线后的过程中,需要大量的配套监控,确保业务稳定性
- 在业务支撑的过程中,一方面需要关注系统是否有认为的漏洞,造成入侵、刷单等,引起经济损失。另外一方面也需要做好运营支撑工作,更了解用户是否按我们的预期在使用系统。
在这些活动的背后,包含的大量围绕系统、应用、客户行为的观测+分析活动:
那可观测性与传统监控有什么区别呢?
我们来看一个例子:海恩法则(Heinrich's Law)指出: 每一起严重事故背后,必然有29次轻微事故和300起未遂先兆以及1000起事故隐患。
这背后表达了非常朴素的道理,在人为构建的系统中,大部分过程实际上是连续的。一个t3时间点的问题并不是一蹴而就,而是由一大堆t0-t2时间段的事件叠加而成。我们对一个系统是否正常的监控实际上是一个结果,可观测性则是通过大数据的思想,通过细粒度、多维度数据对系统进行建模,用以提前推导出可能的风险。
除了我们熟悉的监控场景外,我们还可以把工程师关于观测工作做一个大致的细分:能看到无论是开发、运维、安全、还是运营,很多时间都在和数据分析打交道,整个过程实际上是有一套方法论在支撑:
- 采集多种多用的数据源
- 集中式存储数据
- 对数据分析、展示成可以理解的指标
- 根据指标计算的结果,通过自动化的方式进行各种动作
将可观测数据和平台统一
既然所有的观测动作可以通过一套方法论来构建,那我们是否可以通过一套平台来构建这套观察体系呢?答案肯定是Yes,事实上一些类似的场景正在发生类似的变化:
让我们以2020年火热的 “智能电气化汽车”来做一个例子:
五年前 | 现在 | |
---|---|---|
智能化方法 | 各种独立的外挂系统 | 传感器+总线+*处理器 |
例子 | 胎压检测仪,通过传感器+蓝牙显示在驾驶位的小屏幕上;倒车影像,摄像头+屏幕;电子狗;导航等等 | 统一摄像头 |
毫米波雷达/激光雷达
各种传感器 |
| 数据流动 | 传感器+显示器 | 总线 |
| 决策方式 | 依赖人(视觉+决策) | 算法+算力辅助人 |
| 主要问题 |
- 独立系统
- 数据孤岛
| - 接口统一
- 数据互通
|
| 增加传感器 | 驾驶者负担增大 | 更准确的决策 |
我们以监控软件模式也是如此,如果按这个模式发展,未来所有孤立的软件是没有竞争力的,需要有一个统一、具备强大算力的平台来统筹。
如何构建平台
我们可以把整个过程做一个抽象,左边是数据源,右边是决策者(人)。从信息论的角度,系统构建的目标是从杂乱、无需、无关联的数据中洞察系统的规律。因此我们需要设计:
- 一套对接个数数据源的采集接口
- 为异构数据提供一套灵活的存储模型
- 为数据处理打造流批一体的分析引擎
- 一套能驱动处理与反馈的机制
阿里云SLS(原日志服务)产品就是为此场景设计的系统,除提供上述的功能外,平台还兼具弹性、低成本、开放等特点,我们来分模块看看系统的构成:
1. 采集系统
数据采集从来源上可以分为:
- 主动式采集:例如拨测技术、移动端探测
- 被动采集:例如采集系统的输出
- 辅助数据:一些非运行时数据,但对我们后期也是有帮助的。例如系统的架构与分布
一套完整采集系统必须能够完整对接以上数据,方便实时地去把数据拿到系统中。为此SLS提供了60+种采集的方式,在全球接入了30+个接入点,并提供一张自动加速的传输网络来对接各种数据源。
2. 存储系统
当采集完这些数据后,我们需要为后期的分析给这些数据提供一套完整的存储引擎。我们以DevOps领域最常见的三种数据为例(Trace/Log/Metric),目前主流的做法是提供三种类型的存储引擎,当需要转换时,通过Queue进行数据的拷贝。
为了解决这类数据孤岛问题,SLS设计了一套类似数据库的“表”存储模型,通过排序索引、子表、列存、倒排索引等技术把针对这三类不同数据的需求,统一成SQL访问接口。这个带来的好处是,用户不需要为不同引擎去学习不同API,只需要改变Query即可灵活访问。
从架构角度而言,这种存储模式让整个数据流也变得简洁。过去我们为了从系统采集Trace、Log、Trace数据,我们需要搭建一套采集系统,并且通过ETL流程对数据进行分发与转存。最麻烦的是,当需要使用时我们必须得去4个不同的系统,使用4个API来访问。但在SLS存储中,我们只需要一套访问接口。存储引擎自动会支持弹性伸缩、冷热分层等功能。
3. 分析系统
在存储之上,我们针对数据处理构建了三种能力来解决三个问题,分别是
- 把各种异构数据规整:数据加工
- 对规整后的结构化数据提供灵活分析能力:查询接口
- 对高维数据进行分析:各种开箱即用的算法
以查询接口为例子,在面向“表”的查询分析语言设计上,我们遵循SQL92标准,但同时通过子查询把PromQL等语法进行了融入。这样就可以在一个SQL中进行数据查询,规则与建模预测。降低了数据获取与分析的难度。
通过统一的SQL,我们可以在存储统一基础上,通过Query变化,把Trace/Log/Metric这些数据的组合查询进行有效的统一与关联。
全貌
以下是阿里云云原生观测分析平台全貌,目前该平台一天处理30PB数据量,支持来自用户15亿次每天的分析活动,每天服务10W+用户。
对我们工作感兴趣的,可以通过如下方式了解更多,谢谢关注:)
- SLS首页:https://www.aliyun.com/product/sls
- 知乎:https://zhuanlan.zhihu.com/aliyunlog
- 微信公众号:日志服务 or LogAnalytics
- 哔哩哔哩:https://space.bilibili.com/630680534