可观测性是现代分布式系统监控和故障排查的核心能力。本章从事件日志、链路追踪、聚合度量三个维度构建完整的可观测性体系,以下是各部分的重点解析与实践要点:
(1)日志输出
{
"timestamp": "2023-10-01T12:34:56Z",
"level": "ERROR",
"service": "order-service",
"trace_id": "abc123",
"message": "Payment failed",
"metadata": {"order_id": 789, "user_id": 456}
}
(2)日志收集
(3)存储与查询
(1)数据模型
message Span {
string trace_id = 1;
string span_id = 2;
string parent_span_id = 3;
string service_name = 4;
string operation_name = 5;
int64 start_time = 6;
int64 duration = 7;
map tags = 8;
repeated Log logs = 9;
}
(2)数据收集
(3)采样策略
类型 | 示例 | 特点 |
---|---|---|
Counter | HTTP请求总数 | 只增不减 |
Gauge | CPU使用率 | 瞬时值 |
Histogram | 请求延迟分布 | 分桶统计 |
Summary | 请求耗时百分位数 | 客户端计算 |
(1)指标收集
(2)存储优化
(3)预警规则
groups:
- name: service-alerts
rules:
- alert: HighErrorRate
expr: rate(http_requests_total{status="500"}[5m]) > 0.1
for: 10m
labels:
severity: critical
annotations:
summary: "High error rate detected"
通过将日志、追踪、度量三者的数据联动(如通过TraceID关联错误日志和性能指标),可快速定位根因问题,实现从宏观监控到微观诊断的全链路可观测。
题目1:事件日志的收集方式
问题:
下列哪些工具/技术是《凤凰架构》中提到的日志收集典型方案?(多选)
A. Fluentd
B. Logstash
C. Flume
D. Kibana
题目2:日志存储的核心挑战
问题:
关于日志存储系统的设计要求,以下哪些描述是正确的?(多选)
A. 必须支持全文检索
B. 需要按时间范围分片存储
C. 优先保证实时性而非一致性
D. 需提供高压缩率以节省存储成本
题目3:链路追踪的核心概念
问题:
在分布式链路追踪中,以下哪些概念是OpenTracing规范明确定义的?(多选)
A. Trace(追踪)
B. Span(跨度)
C. Context Propagation(上下文传播)
D. Service Mesh(服务网格)
题目4:链路追踪的数据收集
问题:
以下哪些技术常用于链路追踪数据的收集?(多选)
A. Jaeger Agent
B. Zipkin Collector
C. Prometheus Exporter
D. SkyWalking OAP
题目5:聚合度量的指标类型
问题:
以下哪些是Prometheus支持的指标类型?(多选)
A. Counter(计数器)
B. Gauge(仪表盘)
C. Histogram(直方图)
D. Heatmap(热力图)
题目6:监控预警的动态基线
问题:
动态基线算法在监控预警中的应用场景包括哪些?(多选)
A. 周期性流量波动(如白天/夜晚)
B. 突发性流量激增(如秒杀活动)
C. 服务启动时的冷启动阶段
D. 服务版本升级后的性能变化
题目7:日志加工与聚合的挑战
问题:
日志加工过程中可能引入的问题包括哪些?(多选)
A. 数据丢失
B. 日志格式不一致
C. 加工逻辑导致性能瓶颈
D. 原始日志被篡改
题目8:链路追踪的上下文传播机制
问题:
在跨服务调用时,以下哪些是常见的上下文传播方式?(多选)
A. HTTP Header
B. gRPC Metadata
C. Kafka消息头
D. 数据库事务ID
题目9:聚合度量的存储与查询
问题:
关于时间序列数据库(TSDB)的设计要求,以下哪些描述正确?(多选)
A. 支持高吞吐写入
B. 需优化随机查询性能
C. 数据按时间窗口分块存储
D. 内置降采样(Downsampling)功能
题目10:可观测性工具链整合
问题:
以下哪些组合可以构成完整的可观测性技术栈?(多选)
A. ELK(Elasticsearch, Logstash, Kibana) + Prometheus + Jaeger
B. Splunk + Grafana + Zipkin
C. Fluentd + InfluxDB + SkyWalking
D. Kafka + HBase + OpenTelemetry
题目1答案:A、B
解析:
《凤凰架构》第十章明确提到Fluentd和Logstash是日志收集的典型工具(如书中“收集”一节)。Flume是Hadoop生态的日志收集工具,但未在书中提及;Kibana是可视化工具,非收集工具。
题目2答案:A、B、D
解析:
书中指出日志存储需支持全文检索(A)、按时间分片(B)和高压缩率(D)。实时性与一致性权衡取决于场景(如CAP定理),书中未明确优先实时性(C错误)。
题目3答案:A、B、C
解析:
OpenTracing规范定义了Trace、Span和上下文传播机制(书中“追踪与跨度”一节)。Service Mesh是基础设施层概念,非OpenTracing核心定义。
题目4答案:A、B、D
解析:
Jaeger Agent、Zipkin Collector和SkyWalking OAP均为链路追踪数据收集组件(书中“数据收集”一节)。Prometheus Exporter用于指标收集,与链路追踪无关。
题目5答案:A、B、C
解析:
Prometheus支持Counter、Gauge和Histogram(书中“指标收集”一节)。Heatmap是Grafana的可视化类型,非Prometheus原生指标类型。
题目6答案:A、C
解析:
动态基线适用于周期性波动(如昼夜流量)和冷启动阶段(书中“监控预警”一节)。突发流量和版本升级需静态阈值或人工干预。
题目7答案:A、B、C
解析:
日志加工可能导致数据丢失(如处理失败)、格式不一致(如解析错误)和性能问题(书中“加工与聚合”一节)。篡改原始日志属于安全风险,非加工过程问题。
题目8答案:A、B、C
解析:
HTTP Header、gRPC Metadata和Kafka消息头均可携带追踪上下文(书中“上下文传播”一节)。数据库事务ID是业务逻辑标识,非追踪上下文。
题目9答案:A、C、D
解析:
TSDB需高吞吐写入(A)、时间窗口分块存储(C)和降采样功能(D)。随机查询性能优化非TSDB核心需求(B错误)。
题目10答案:A、B、C
解析:
ELK(日志)+ Prometheus(指标)+ Jaeger(追踪)构成完整栈(A)。Splunk(日志)+ Grafana(指标)+ Zipkin(追踪)同理(B)。Fluentd(日志)+ InfluxDB(指标)+ SkyWalking(追踪)可行(C)。Kafka+HBase是数据管道与存储,无法覆盖可观测性全领域(D错误)。