. \% q+ \( o6 r& w! s在上一篇《运维,放过监控-也放过自己吧》中原作者提出了自己对于可观测性的三个困惑,本文围绕这三个问题展开讨论。
# d, g- n1 F& o1 I) v1. 可观测性解决什么问题?+ i6 \2 G) i* ?& K$ C7 \" l
其实可观测性最先解决的就是一个问题:就是监控工具太太太多了,在 Datadog 的招股书上就写得很明白一般企业要部署 5 套监控软件,而大型企业因为各种跨部门甚至要 15+,这种造成了资源浪费,学习曲线,认知成本,协同成本,系统更新等一系列的问题。
' N9 Q6 ^. j o q J3 k当然一切整合起来的可观测性,也和原来的监控不同了。其对象瞄准的恰恰是应用系统本身,也就是我们需要将自己所制造的应用系统本身具备可观测性,为什么需要具备应用系统需要具备观测性,就是无论从应用调试,性能调优,故障定位,甚至传统监控角度来说都是非常有意义的。所以可观测性本质上强调了程序员或者整个系统建设的参与者们,包括架构师,开发,测试,运维,大家都要把自身的可观测性做好,这样也是对最终这个系统使用者,也可能是开发自己,也可能是运维,也可能是第三方伙伴更友好。因此推广可观测性本身在我看来和推广写好文档,单元测试一样,是程序员对自己开发系统负责任的一个表现。所以可观测性本质上解决了应用在 Runtime 的 Debug 问题,我觉得是个程序员都希望自己能够随时随地 Debug 自己的代码吧。
' c7 [5 Z- s5 s" g1 T! |; K/ L$ d& O8 C3 f# D1 q" z* b
1 p* P' ]& @. Q! f U( Q从观测云的立场上,我们从来不会去开发一个可观测性系统(当然我们要确保我们自身产品的可观测,也是我们提高工程质量和运维的基础),而且我们希望帮助工程师可以更方便的构建自己在线系统的可观测性的工具平台。因此我们提供了从指标,到日志,到链路,到客户端的用户访问,页面渲染,等等的基础能力,不为了别的就是为了让工程师能够相对简单的完成自己系统可观测的任务。我们的终极目标就是能够让大家能够用实时的数据 Debug 自己的线上环境。
) S6 u1 s' { n) O- C; W# c7 |* w L% M% U* Q$ }
1 i4 B' j% Y1 \; O* _
2. 数据收集全面开花8 g% p# [& E" J$ Z
如同第一点所描述的,当一个工程师需要构建自身系统的完整可观测性的时候,其实需要的能力是非常广泛的,而一般情况下对于大部分企业来说,本质上就是一个数据收集,集成,包括展示的综合性系统工程。可能所需要的技术从底层操作系统,各种语言环境,网络协议,甚至 eBPF ,Profiling等能力,这是一个非常庞大的知识结构,而且仅仅通过这些能力收集数据是不够的,包括最终能够友好的利用数据所提供的可视化,交互性真正意义上让可观测性落地才是核心。
. v: V( _0 T8 J
; x. Q# D# N/ |# f) J n6 j1 r9 }9 {* g
所以从观测云角度来说,从来不仅仅是数据收集全面开花,除了收集数据以外,我们关心数据的一致性,我们还关心数据的关联关系,关注关联关系才可以更好的将不同维度的数据通过可视化友好的进行交互。传统的数据平台为什么很难使用,恰恰是缺少了这种关联和友好交互,比如日志搜索成为了主体,实际上反而是一种效率低下的方案。大家通常不愿意主动去观测日志,而观测云的目标是让优秀的工程师愿意主动通过观测云提供的可观测性能力让其能够饶有兴趣的去通过数据分析,发现各种可能可以提升工程质量或者性能的点,从而让自己的应用系统更有效。
# z' `" X$ \6 ?& m! F8 q$ K/ z q) c2 a6 e2 e' l* X
: ^% j' M. [5 J8 b4 O: `! ~
3. 新瓶装旧酒9 E) n+ [3 d. t6 c1 s# @
其实历史发展总是演进的,如果只是站在运维监控的视角上,可观测性似乎是一个数据量更大更全的但反而让运维不知道如何开始的监控系统。但我认为强调可观测性有两点与监控不同:! L5 f+ C9 }# [7 d7 p" u6 C. F
第一,可观测性是强调的是从应用和业务维度垂直纵深的用各种数据( Metrics ,Logging ,Tracing )去实时的描述这个应用的全貌,从基础设施,中间件,数据库,应用服务端代码,客户端,强调的是完整性和一致性。而不是传统的分层逻辑,通过不同的独立的监控系统独立关注每一层的应用。
4 R @7 w5 W, r# o
6 T, L) O. p9 m* L9 Y1 c. d# U5 Z. W9 Z& Q3 h
" G) |; W( N, p3 V4 j" j& M" }7 @6 d
9 y& e$ I& z _
第二,可观测性的关注点不同,这也解释了为什么很多传统运维的仪表盘其实无用,因为仪表盘并不是为了估值排查(这个当然很重要),但更重要的是让研发参与进去,利用这些灵活的仪表盘(仪表盘需要根据业务做动态设计)来进一步的优化系统和优化代码,所以某种程度上,监控只是可观测性的一种应用场景而已,如果上了可观测性只是为了监控,那绝对不会比监控更好。
& Q+ ^* p) @3 o/ W2 }* d$ T+ i9 J+ W9 {
% z7 |# n* y) ^4 Y7 |) s所以可观测性本质上对于团队来说是真正意义上把一个系统的生产(编码),交付,保障,优化通过数据平台一体化了,完整整体的统一,是整个DevOps体系中不可或缺的一部分。国内强调 DevOps 的时候往往只关注交付侧的 CI\CD,而忽略了可观测性是作为整个 DevOps 中的核心渠道的数据平台,如果没有可观测性,其实所谓 DevOps 也不过只是人为的交付自动化 Pipeline 而已。
3 y3 ~( u; S; n0 v5 c
9 B. _2 ^ f4 V3 X* v6 o
7 N1 @- g( B7 J1 @1 J) a【 立即体验观测云 】https://auth.guance.com/register?channel=toutiao
% i7 X2 u# {2 c6 w% R0 U* B( I欢迎大家至我们的观测云 Guance Cloud for Observability Github专栏
( _% N9 O1 o$ D5 J, C【 Guance Cloud for Observability 】https://github.com/GuanceCloud
! j: K7 @6 V" k/ r了解并使用 喜爱的同时别忘了点击右上角小星星点赞关注哦~ . j: w7 T1 }& l$ Y7 l* @5 \. ?
9 R6 v4 a6 D. K6 K
" r/ R1 Y. T! Q1 J. M+ |; \
5 V7 `1 P. X) F6 @/ w' V
J6 ]! o9 j9 n# o
2 S& \& W" p0 C& y O0 w6 v% a% _5 N/ [
|