开篇词 | 可观测性,让开发和维护系统的你每晚都能睡个好觉!

你好,我是翁一磊。

马克·安德森(Marc Andreessen)说过这样一句话:“软件正在吞噬世界 ”。这句话发表于2011年,但是十多年后的今天,我想它更好的演绎应该是“云原生正在吞噬世界,万物皆可上云”。面对云原生这个新赛道,BAT、美团、字节跳动、快手等一线大厂都在加速推进业务的容器化、云原生化。

也正是由于各大厂商对云原生的奔赴,传统的技术架构面临着巨大的冲击,我们的监控对象也由传统的单体结构,变成了分布式的多个微服务。监控,被架到了一个不得不革自己命的位置。在这样的背景之下,可观测性(Observability)脱颖而出。

CNCF 早在定义云原生的概念时就提到了可观测性 ,它声称可观测性是云原生时代的必备能力。而随着可观测性的概念明晰化,相关产品纷纷涌现,“可观测性”越来越成为云原生一个绕不开的话题。

打开这门课程的你可能是系统和应用的开发、测试、或是运维同学,或许你在系统上线和维护的过程中遇到过下面这些问题:

  • 某个新版本发布上线之后,发现主机的 CPU 使用率持续飙高,但不知道具体原因在哪,只能根据过往的经验一一排查,却迟迟找不到问题根源。
  • 新版本上线之后,经常很难判断功能是不是完全正常,不好确定用户在使用时有没有遇到问题。只能等着用户找客服投诉之后才知道哪个模块出现了报错。
  • 基础设施方面,通过监控搞了一大堆稀奇古怪的仪表盘,看着花花绿绿一大片,可是又不能反映出业务的真实情况,也不能跟随业务的变化而灵活调整。

手忙脚乱之中,你难免就有些自我怀疑,问题到底在哪呢?有没有更好的方法可以保证程序的正常和稳定运行?

接下来,就有请出我们这节课的主角:可观测性。

什么是可观测性?

可观测性的概念最早出现在控制论中,强调的是可以从系统向外部输出的信息来推断出系统内部状态的好坏。而在计算机系统和软件领域,本质上也是类似的含义:它可以从系统和应用对外输出的信息(包括你可能已经知道的指标、日志和链路),来帮助我们了解应用程序的内部系统状态和运行情况。

但可观测性并不只是简单的数据采集,它更强调对这些数据的关联和分析,这能够帮助我们快速定位,找到问题的根本原因。当然,最终的目的是保障系统的可靠性,达到服务质量的目标。

图片

因此,可观测性适用于任何关心代码在生产环境中的运行质量的人。它可以监测和解决生产系统中复杂而新颖的问题。具体到岗位上:

可观测性能够架起开发人员和运维人员构建合作的桥梁,运维人员使用可观测性来发现问题,给故障现场提供足够的数据让开发人员进行分析,而开发人员可以使用可观测性来指导运维人员定位问题,并使用工具来质疑和验证假设;

此外,测试、运维、DevOps 工程师、SRE 工程师等角色都可以了解和学习可观测性,以此提高产品质量和服务可靠性。

为什么需要可观测性?

可是,我们为什么需要可观测性?为什么是现在?其实,它是在日益迫切的系统和应用软件的维护需求下诞生的。

系统和应用是在一步步地升级与换代的。我进入互联网行业已经十几年了,这种感受有增无减。就拿我第一份工作支持的微软企业级邮件系统 Exchange Server 来说吧,Exchange Server 从最开始的单机版本,到后来分为了前端和后端服务器,再后来,为了更好地满足用户访问和负载需求,分为了边缘、传输、邮箱服务等多种角色的服务器,这时候如果碰到问题,再一个个去翻阅 Windows 的 Events 事件和 Exchange 的日志,效率就比较低了。

Exchange 邮件服务器架构的发展,只是应用软件发展的一个缩影。软件架构从单体应用到三层架构(前端 Web,应用 App 层,以及后端的数据库),再到现在的微服务架构,无疑是越来越复杂了。

如今,通过云平台,只需点击一个按钮,就可以操作和使用跨地理位置的基础设施或者微服务架构,它们具有可扩展性、可维护性、灵活性等多种优点。但这种部署方法也带来了一些意想不到的后果,当系统和应用出现问题的时候,找到问题的根本原因变得越来越难。

我们维护系统应用的手段也随之发生了很多变化。以前,面对不那么复杂的系统架构,我们常用的维护手段还是建立监控,然后制作一些仪表盘来展示各个层面指标的情况,再加上一些告警对各种指标的阈值进行监控和通知,这样就可以解决我们所说的 Known-Unknowns,也就是已知的未知问题(已经知道,但不理解)。也就是说,你凭借着经验或是感觉,能够很快定位到问题的根源。

但是现在,不仅排查故障的难度越来越大,错误还有了更多潜在的组合,传统的排障方式愈发没有效率。今天你面对的,更多的是未知的未知问题(既不理解,也不知道),即 Unknown-Unknowns。

而可观测性,就是解决这类未知的未知问题的必要手段。当系统中出现越来越多的新问题,当未知的故障组合越来越多,不断升级的复杂性让我们越来越有必要为系统和应用构建可观测性。

如何学习可观测性?

在这个可观测性的课程系列中,我将从下面几个方面为你展开讲解。

图片

  • 概念篇:为了更好地理解可观测性,我会首先带你理一理计算机和互联网的发展,看一看监控在这一过程中的发展历程。接着,我会详细解读可观测性相关的基本概念,包括你可能经常听到的可观测性三支柱。之后我们会一起辨析可观测性和传统监控的区别。借助这些内容,希望能帮助你了解可观测性以及相关的概念,为接下来的正式学习做好铺垫。
  • 基础篇:我会首先介绍一下 OpenTelemetry ,这是目前可观测领域非常成熟和热门的标准和规范。在此基础上,你会进一步了解如何实现和建立非某个供应商锁定的可观测性。接下来,我们还会看到购买或自己搭建(例如基于开源软件再进行一些二次开发)可观测性的利弊,拥有全局观念,在有需求的时候理智下判断。
  • 实战篇:这部分是专栏的重头戏,毕竟可观测性最重要的目标,就是保障系统和应用的服务可靠性。这个模块,我们会讲到团队协作,可观测驱动的开发,建立、跟踪SLO等话题。然后我会选取微服务架构的系统,带你搭建起这个系统的可观测性,让你在动手操练的过程中更好地掌握可观测性,并能够通过可观测性来分析和解决问题。
  • 总结与展望篇:我会为你讲述如何构建可观测性的文化和框架,让你了解在企业中推广可观测性需要优先考虑的关键能力。我还会给你介绍可观测性未来的发展趋势。

最后,再简单介绍一下我自己吧。我曾经就职于微软、HP、Dell EMC 等外企,从最初的技术支持,到售前以及项目交付,再到解决方案集成与验证,相关的工作可以说是做了一圈。从外企出来之后,我负责过多云管理产品,现在在观测云负责售前技术和客户服务工作。

计算机软件领域的可观测性,在国外是在 2018 年左右提出的,现在已经有了不少玩家,比如久负盛名的 DataDog。而在国内,去年的这个时候还极少看到相关的报道。到了今年,可观测性已经成为了非常热门的话题,甚至最近每周都能看到相关的线上直播。

但是,近几年的观察让我意识到,很多时候人们只是把原来传统的监控换了一个壳子,变成了可观测性。正所谓新瓶装旧酒,但其实这并不是真正意义上的可观测性。而这门课程的目标就是矫正这种观点,看清可观测性的本质和价值。

也希望这门课程,能够帮助你把可观测性真正落实到系统和应用的开发、测试、维护或是运营阶段,建立系统和服务可靠性的保障,提前发现潜在问题,快速定位根本原因,缩短 MTTGBTB(即 Mean Time to Get Back to Bed),每晚都能睡个好觉!

如果你也对一个可观测的系统有所憧憬,但却对细节和具体实现方法一知半解,那就加入我吧,我们课程中见!

扫描链接内小助手微信二维码,回复“可观测性”,加入学习交流群,一起交流进步~

精选留言

  • 苏果果

    2022-09-14 17:48:05

    终于可以睡个好觉了!跟着老师学起来!
    作者回复

    一起来构建可观测性!

    2022-09-15 08:30:20

  • 张申傲

    2022-09-14 20:49:38

    开课第一时间就买了~ 特别赞同老师说的,现在很多人对于可观测性的理解,就是在监控的基础上新瓶装旧酒。希望通过这门课程,跟着老师认识到可观测性的本质,并且应用于实际工程中。
    作者回复

    一起学习和交流

    2022-09-15 08:23:15

  • 可观测性无声笛

    2022-09-14 17:23:20

    沙发,恭喜翁大师上线
    作者回复

    感谢支持!

    2022-09-15 08:23:05

  • 起而行

    2022-09-29 12:15:47

    老师的介绍非常具体和精彩!请问下老师,感觉可观测性的项目impact如何?本人是应届毕业生,希望参与impact大的项目快速升职,目前有两个选择:
    1.去一家硅谷做AI+分布式云领域的2B成熟创业公司,负责可观测性的全栈项目,我感觉这个项目对于企业来说impact应该很大?
    2.去Amazon的AWS组做核心数据库的后端工程师

    请问老师怎么衡量可观测性项目的impact,做可观测性项目在大厂认可度如何,以及有哪些可以让自己快速成长的技术挑战呢?
    作者回复

    可观测性现在的确很热门,但是要求也很高,包括对云计算的计算存储网络数据库中间件等各种技术栈,云原生应用,DevOps等相关都需要了解。你刚刚毕业,打好技术基础是非常重要的,不建议一开始的目标就是升职。反过来,基础打好了,能力逐渐提高,升职也就是顺理成章的事情

    2022-10-10 08:32:02

  • 二十四桥仍在

    2022-09-15 23:59:55

    Prometheues告警,发送给alertmanage,然后告警用什么数据存储比较好呢?
    作者回复

    这需要根据后端告警对接的消息平台,以及存储的目的,一种方式是可以将告警存储到ES中进行进一步的分析和处理

    2022-09-21 22:30:38

  • __PlasticMan

    2024-06-05 18:19:10

    总结:可观测是系统的一种特性,云原生引入的复杂性导致经验性的监控失效,必须建设可观测全面、细致得收集数据,从而将复杂动态环境下的根因分析转换为一种可靠的工作流。
  • R_R

    2023-10-23 14:52:40

    现在的手段还是需要通过搭建看板和匹配监控,再智能化一些就是加入简单的归因分析诶。
    还有更加行之有效的方法吗?
  • novoer

    2022-12-10 23:13:51

    期待老师的讲解,也希望能够通过学习运用于公司的项目改造中。
    作者回复

    我们一起学习、交流,加油!

    2022-12-19 11:25:12

  • 我还是个孩子

    2022-10-20 09:02:23

    😎
  • 波波安

    2022-09-24 19:56:02

    老师有没有根据业务标识来做全链路跟踪的产品。
    需求是这样的,一个业务场景的链路很长,其中有一些业务步骤可能是异步的,需要可以根据某一个业务标识,把整个业务的trace串起来,做全链路跟踪。
    作者回复

    这个在后面的实战课程里面就会看到,从前端到后端的全链路可观测

    2022-09-26 08:05:58

  • Geek_fa3bb6

    2022-09-17 11:58:51

    你好老师,学习可观察性方面的架构体系,是否有一个技术图谱
    作者回复

    课程里会介绍可观测性整体,并不只是某个工具或者技术点,会有一些方法论和最佳实践

    2022-09-17 23:08:23

  • Stock66

    2022-09-15 14:57:58

    大佬能否讲一下Zipkin、Pinpoint、SkyWalking、CAT、OpenTelemetry
    各自的优缺点及选型建议。
    作者回复

    前面这些都是开源的应用链路工具,OpenTelemetry会在第四讲中介绍

    2022-09-15 21:15:32

  • 怀朔

    2022-09-15 12:56:48

    作为一个小运维期待中
  • 小宝

    2022-09-14 22:03:47

    被千篇一律的微服务监控折磨过,正在寻找方向
    作者回复

    那正好看看可观测性,后面也会说到和监控的区别

    2022-09-15 08:23:51

  • X

    2022-09-14 21:13:28

    最近在看OpenTelemetry,中文资料太少了,open traceing也合并到这个项目上了,怎么基于已有的基础设施来融入OpenTelemetry中去是个难题,重新搞一套公司是不会接受的,老师有没有这方面案例?
    作者回复

    这需要看一下现有的是什么样的产品和技术栈了,是否能够兼容OpenTelemetry

    2022-09-15 08:25:58

  • includestdio.h

    2022-09-14 19:12:34

    太及时了,我已经被看似完善,但是不解决实际问题的微服务监控体系折磨了半个月了
    作者回复

    可观测性的目标就是找到问题原因,解决实际的问题

    2022-09-15 08:27:17