大家好!今天,我想和大家聊聊可观测性(Observability)的核心要素——指标(Metrics),它对于了解系统状态至关重要。特别是,我们将深入浅出地探讨OpenTelemetry中收集指标的两种主要方式:同步(Synchronous)和异步(Asynchronous)测量的区别! 🕵️♂️
了解何时使用哪种方式,将使我们能够更有效地监控系统。那么,我们开始吧!

🚀 同步(Synchronous)测量:我想要时立即获取!
同步测量方式是最直观、最容易理解的方法。它是在特定事件发生的那一刻,代码直接记录值的方式。
这就像每次有顾客进入商店时,你都会“咔嗒”一声按下计数器一样。🔔
// 每当用户登录时,计数器增加1。
counter.add(1);
何时使用? 🤔
- HTTP请求数:每次调用API端点时计数
- 函数调用次数:跟踪特定功能执行了多少次
- 已处理项数:记录从工作队列中处理的项数
核心特点 ✨
- 开发者在代码执行流程中显式调用。
- 每当“事件”发生时立即测量。
- 对于跟踪发生次数或累积值非常有效。
⏰ 异步(Asynchronous)测量:自动进行,周期性快照!
异步测量方式的工作方式略有不同。它不是直接记录值,而是注册一个回调(Callback)函数,可以询问“当前值是什么?”
然后,OpenTelemetry SDK会定期调用这个回调函数,像拍快照! 📸 一样一次性收集当前状态值。
何时使用? 🤔
- CPU使用率:特定时间点的CPU负载状态
- 内存使用量:应用程序当前使用的内存量
- 队列中积压的项数:当前等待处理的任务数量
- 活跃用户数:特定时刻连接的用户数量
核心特点 ✨
- 在创建测量工具时注册回调函数。
- SDK定期调用回调函数以收集值。
- 最适合测量特定时间点的“状态(State)”。
📊 同步与异步一览!
| 类别 | 同步 (Synchronous) 🚀 | 异步 (Asynchronous) ⏰ |
|---|---|---|
| 测量方式 | 事件发生时,代码立即记录值 | SDK定期调用回调函数以收集值 |
| 调用主体 | 开发者代码 (显式调用) | OpenTelemetry SDK (定期调用) |
| 核心概念 | 事件的发生 (Occurrence) | 特定时间点的状态 (State) |
| 主要使用示例 | 请求数、错误次数、已处理任务数 | CPU/内存使用率、队列长度、活跃连接数 |
###
结语
现在,您是否清楚地理解了同步和异步测量方式的区别?
✅ 同步方式用于逐一计数发生的事件,而 ✅ 异步方式用于定期检查系统的当前状态。
根据情况选择正确的测量工具,将您的系统可见性提升一个台阶!这将是构建更强大、更稳定服务的第一步。💪
发表回复