观察服务及其用户体验
已完成将指标、日志和链路追踪与服务目标关联起来。设计告警、数据边界,以及发现遥测缺失的检查。
检验理解导出延迟增加。采样链路显示数据库 span 耗时较长。可以得出什么结论?完成练习
你将学到什么
- 选择能回答具体运维问题的遥测数据。
- 区分服务症状与内部原因。
- 保护遥测,并发现缺失或过时的证据。
从问题开始
监控检查已知条件。可观测性帮助调查系统行为,包括未预料到的故障。更多仪表板不会自动带来更好的答案。
对于虚构导出服务,从用户问题开始:获授权的用户能否在约定时间内获得正确导出?再选择能支持这个问题,并帮助解释失败的信号。
OpenTelemetry 提供遥测插桩能力和标准,可以将信号发送到兼容后端。你仍需要存储、查询、访问控制、保留策略,以及根据证据行动的人。参见可观测性基础。
关联不同形式的证据
指标衡量随时间变化的数量。日志记录事件。链路追踪将请求经过系统时的相关操作关联起来。一个 span 表示链路中的一次操作。
| 运维问题 | 证据示例 | 需要记住的局限 |
|---|---|---|
| 多少符合条件的导出失败? | 失败次数和符合条件的请求总数 | 分母错误会导致误导性比率 |
| 某次导出发生了什么? | 包含任务 ID、结果和版本的结构化日志 | 缺失事件会留下信息空白 |
| 时间花在了哪里? | 覆盖 API、队列、任务处理进程和数据库的链路 | 采样和上下文传播中断可能隐藏部分工作 |
| 症状出现前发生了什么变化? | 部署和配置记录 | 仅凭时间关系不能确定原因 |
对于异步工作,应安全保留提交任务与任务处理进程执行之间的关联。HTTP 202 响应可能只表示工作已接受,不能证明导出已完成。
需要行动时才告警
设置 SLO 前,先定义 SLI 及其分母。在本例中,统计在约定时长内正确完成、且符合条件的导出。定义长时间运行和已放弃的任务如何计入测量。
错误预算描述 SLO 时间窗口内允许的失败量。预算消耗速率描述失败消耗预算的速度。Google 的指南使用多个窗口,平衡及时发现与告警噪声。参见基于 SLO 的告警。
情况需要及时处理时,呼叫响应人员。紧急程度较低的工作进入队列。每项告警都需要负责人、影响说明、调查链接和响应指令。复核那些反复触发却无需行动的告警。
不要给所有服务使用同一个通用阈值。用户影响、流量、业务时段和响应能力都会影响决定。
保护遥测流水线
遥测可能包含个人数据、令牌、请求参数和机密文档。采集前定义允许字段。限制访问和保留期限。导出到外部后端前,移除秘密信息。参见敏感遥测数据。
不要把客户邮箱或唯一任务 ID 作为指标标签。不受限制的标签会增加时间序列数量,也可能暴露标识符。指标使用受控维度。将获准的关联标识符放入有访问控制的日志或链路。
也要测量流水线本身。检查数据接收失败、数据丢弃,以及最新观察距今多久。平坦的错误图表可能意味着没有错误,也可能意味着没有收到遥测。应明确展示这一区别。
调查具体故障
虚构服务对每个请求都返回 HTTP 202。队列中任务的等待时间从几秒增加到 15 分钟。任务处理进程日志显示反复发生数据库超时。采样链路显示,大部分处理时间花在数据库调用上。
这些证据支持有针对性的调查,但不能确定原因是查询变化、连接耗尽还是数据库容量。使用排查方法比较这些假设。
Taiga Monitoring 提供产品健康视图,包含可用性和浏览器体验信号。它补充基础设施与应用可观测性,而不是替代这些系统。参见 Monitoring。
完成练习
针对本课的虚构导出功能,定义一项 SLI、一项可采取行动的告警、三个允许的遥测字段和两个禁止字段。说明如何发现遥测流水线故障。
下载工作表(Markdown)取消勾选将删除此浏览器保存的全部进度。
进度保存在此浏览器中。无需账户,不追踪使用情况。
来源与延伸阅读
- OpenTelemetry: Observability primer ↗
- OpenTelemetry: Handling sensitive data ↗
- Google SRE: Alerting on SLOs ↗
- Taiga docs: Monitoring ↗