概述

  1. 可观测性 - 从系统向外部输出的信息来推断出系统内部状态的好坏
  2. 可观测强调的是一种度量能力
    • 不发布新代码(如新增诊断日志)的情况下理解系统内部状态 - 系统具有可观测性

Metrics + Logs + Tracing

Metrics + Logs + Tracing 只是遥测数据类型,而 Observability 并非具体技术,而是系统属性,类似于 HA

Key Desc
Metrics 一段时间内测量的数值,默认是结构化的,便于查询存储优化
Logs 特定时间发生的事件文本记录,一般是非结构化字符串,会在程序执行期间被写入磁盘
Tracing 表示请求通过分布式系统端到端的路径,执行的每个操作被称为 Span

Tracing 一般会通过可视化瀑布图展现出来

image-20241207180541812

Metrics

  1. 由于 Metrics 最大的特点是聚合性
    • Metrics 生成的数值是反映预定义时间段内系统状态的汇总报告 - 缺乏颗粒度
  2. Metrics 之间可能彼此不相关
  3. Metrics 常用于 - 静态仪表盘的构建、随时间变化的趋势分析、监控维度是否保持在定义的阈值
    • 但都不是 Observability,因为对于故障排查来说,这些信息远远不够

Logs

  1. Logs 本质上是离散事件,为了便于阅读,一般是一大块非结构化文本
    • 需要通过日志解析器(复杂规则)才能完成结构化、索引、搜索
  2. 结构化 - 创建结构化的日志数据,如 Docker 日志

Tracing

  1. Tracing 的主要问题 - 仅依靠开发人员进行 Instrument,是远远不够的
  2. 实现复杂度
    • 大量的应用程序需要使用额外的开源框架或库构建的
    • 多语言架构下,会变得更具有挑战性
  3. 实现成本
    • Instrument 的成本比较高,比较很难做到全面覆盖,适用于具体的业务场景
    • 随着产品迭代,可能需要反复增加 Instrument,增加工作量且降低系统可靠性

Structured Events

Observability 定义的是一种度量能力,帮助用户更好地理解解释系统当前所处的任何状态

  1. Structured EventsObservability 的基础
  2. 事件是指特定请求与服务交互时所有信息的记录,通过事件能了解到服务所受到的影响
  3. Structured Events 的定义
    • 在请求第一次进入服务时,会有一个 Empty Map初始化出来
    • 在该请求的生命周期内发生的任何细节或者有价值的上下文,都会附加到 Map
    • 当请求即将退出或者出错时,刚所发生的事情都被记录下来了
    • 写入该 Map 的数据被组织和格式化为 Key-Value Pair,以便于搜索 - Structured Events
  4. 调试服务问题时,可以比较 Structured Events,及时发现异常 - 任意宽度 - 基数 + 维度

基数

  1. 数据库中,基数是指包含在一个集合中的唯一值的数量
    • 低基数(性别) - 很多重复的值;高基数(User Id) - 很大比例是完全唯一的值
  2. 高基数信息在调试或者理解系统的数据时非常有用 - userid + requestid - 精确定位

维度

  1. 基数是数据中值的唯一性,而维度是数据中 Key 的数量
  2. 可观测系统中,遥测数据被生成任意宽度结构化事件,其中可以包含成百上千的键值对(即维度
  3. 事件范围越广,事件发生时获取到的上下文就越丰富,越容易定位问题

对比

传统监控

  1. 仪表盘 - 受到告警时,某项指标超过了阈值,但不能完全了解系统发生了什么
  2. 传统监控只能解决 Known-Unknowns 问题 - 完全被动
    • 每次出现故障时,复盘的结果是增加一些指标或者告警,然后这些告警可能再也不会被触发
    • 例如 - CPU 使用率达到了 90%,但却不知道原因

可观测性

  1. 可观测性通过查看和分析高纬度高基数的数据,发现在复杂系统中的隐藏问题 - 无需预设问题发生的模式
    • 通过数据的关联,允许从任何角度分析问题,而不是依靠直觉和经验
  2. 针对应用软件监控,不仅仅是基础设施,目标是保障应用软件可靠性稳定性
  3. 全面搜集 + 关联数据
    • 数据采集 - 底层操作系统、各种语言环境的网络协议、前端用户访问数据
    • 利用数据所提供的可视化交互性来真正让可观测性落地
  4. 可观测性强调的是从应用业务维度,用各种数据垂直实时地描述应用的全貌
    • 采用的不是传统的分层逻辑,不是用不同的独立的监控系统分开关注每一层的情况
  5. 传统运维的仪表盘分布式架构中的用处越来越小
    • 对于复杂系统来说,很多之前没有发生过的问题,单靠仪表盘不能有效发现根本原因