1) 【一句话结论】
系统可观测性通过指标监控、结构化日志、链路追踪等手段,全面收集运行数据,实现问题快速定位与诊断,是快手系统保障业务稳定的核心能力之一。
2) 【原理/概念讲解】
可观测性(Observability)指系统对外部可见的运行状态,包含三个核心维度:
- 指标(Metrics):数值型数据(如QPS、错误率、响应时间),反映系统实时状态,类比“体温计”,实时监测健康指标;
- 日志(Logs):文本记录(如请求元数据、业务数据),用于问题回溯,类比“病历”,记录历史行为;
- 链路追踪(Tracing):跨服务调用路径的完整记录,追踪请求在分布式系统中的流动,类比“手术录像”,定位问题路径。
三者结合,形成对系统的“全面感知”,帮助快速诊断故障根源。
3) 【对比与适用场景】
| 工具/维度 | 定义 | 特性 | 使用场景 | 注意点 |
|---|
| 指标监控 | 通过数值指标(如QPS、错误率、延迟)监控系统状态 | 实时、量化、可告警 | 实时监控业务健康(如服务流量、错误率) | 需设计合理指标维度(如按服务、区域、时间),避免维度爆炸 |
| 结构化日志 | 将日志以结构化格式(如JSON)记录,便于解析和查询 | 可解析、可聚合、可关联 | 问题排查、业务分析(如查询特定错误码的请求) | 日志格式需统一,避免解析困难;日志量大会影响存储和查询效率 |
| 链路追踪 | 记录请求在分布式系统中的完整调用路径(服务间、内部组件) | 跨服务关联、时序分析、分布式调用链 | 定位分布式系统中的性能瓶颈或故障点(如调用链耗时过长) | 高并发下链路数据量巨大,需采样或聚合;需考虑服务间通信的延迟影响 |
4) 【示例】
假设用户发起“查询订单”请求,调用链为:用户请求→服务A(订单服务)→服务B(商品服务)→数据库(查询商品信息)。
- 指标监控:服务A的QPS达到1000/s(超过阈值),触发告警,提示流量异常;
- 结构化日志:服务A记录日志,包含请求ID、用户ID、查询条件(JSON格式),如
{"requestId": "12345", "userId": "u001", "query": "order?orderId=1001"};
- 链路追踪:通过SkyWalking记录调用链,显示服务A调用服务B的耗时为200ms,服务B查询数据库的耗时为150ms,总调用链耗时350ms。
当数据库响应慢时,通过链路追踪定位到数据库查询的瓶颈,结合指标监控(数据库QPS过高)和日志(错误码为500的请求),快速定位并优化数据库查询。
5) 【面试口播版答案】
保证系统可观测性主要通过监控、日志、链路追踪三方面协同。监控方面,我们用指标(如QPS、错误率)实时监控服务状态,比如服务A的QPS超过阈值时,能快速发现流量异常并告警;日志方面,采用结构化日志(JSON格式),记录请求的元数据、业务数据,便于通过关键词搜索或聚合分析,比如查询“错误码为500的请求”,快速定位问题;链路追踪方面,使用SkyWalking(或Jaeger),记录每个请求的跨服务调用路径,比如用户请求到服务A,服务A调用服务B,服务B查询数据库,通过链路追踪能看到每个节点的耗时,当数据库响应慢时,能定位到数据库查询的瓶颈。这些工具共同作用,能快速定位问题根源,比如通过指标发现异常,通过日志找到具体请求,通过链路追踪看到调用链的耗时分布,从而快速修复问题,保障系统稳定。
6) 【追问清单】
- 如何设计指标监控的维度?
- 回答要点:需结合业务场景,如按服务、区域、时间、请求类型等维度,确保指标能覆盖关键业务指标,避免维度爆炸。
- 结构化日志和传统日志的区别?
- 回答要点:传统日志是纯文本,难以解析和查询;结构化日志以键值对(如JSON)存储,便于程序解析、聚合分析,支持复杂查询(如按时间、错误码、用户ID等条件筛选)。
- 链路追踪中如何处理高并发下的性能?
- 回答要点:通过采样(如1%的请求被追踪)或聚合(如统计调用链的平均耗时),减少数据量,同时保证关键请求的完整记录。
- 如何保证日志和链路追踪的实时性?
- 回答要点:采用分布式日志系统(如Elasticsearch)和链路追踪系统(如SkyWalking),结合消息队列(如Kafka)缓冲数据,确保数据实时写入和查询。
- 可观测性数据如何存储和查询?
- 回答要点:指标存储在时序数据库(如Prometheus),日志存储在日志系统(如ELK),链路追踪数据存储在分布式存储(如HBase),通过统一的查询接口(如Prometheus查询语言、ES查询)实现数据检索。
7) 【常见坑/雷区】
- 只强调监控指标,忽略日志和链路追踪的配合,导致问题定位不全面;
- 混淆监控和日志的作用,比如用日志代替指标进行实时告警,导致告警延迟或遗漏;
- 链路追踪中未考虑服务间通信的延迟,导致定位的瓶颈不准确;
- 忽略可观测性数据的存储成本,导致数据堆积或丢失,影响分析效果;
- 没有说明如何从数据中提取业务洞察,而只是说工具的使用,缺乏对业务问题的解决能力。