建设目标
-
提高系统稳定性
-
提升发现&分析问题的能力
-
提高系统可理解程度
-
降低成本
-
助力决策
理论体系
[plaintext]
1
2
3
4
5
6
7
8
9
10
11
12
13理论体系
监控场景
业务监控
数字体验监控DEM+前端监控
APM
基础监控
其他
云原生监控
LLM/AI
可观测数据支柱
Mertric
Logs
Trace
应用场景
[plaintext]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28应用场景
异常检测
专家规则
AI
关联分析
指标
调用
事件
根因定位
下钻分析
全链路根因分析
影响面分析
服务治理
架构合理性
调用合理性
资源合理性
熔断降级
运营评估
容量评估
运营报告
用户行为分析
变更分析
变更异常检测
变更诊断
性能优化
性能指标分析
指定并实施优化策略
持续分析
技术架构
[plaintext]
1
2
3
4
5
6
7
8
9
10
11
12
13
14技术架构
存储层
数据缓冲
数据丢失
多数据源
分析层
实时流处理
实时批处理
输出层
错误告警(通知、聚合、抑制)
统计报告(邮件报表、质量分析、数据统计)
可视化
多模态
多端
技术指引
[plaintext]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43技术指引
基础知识
微服务框架
配置中心
name-server
rpc
无侵入采集
日志
SNMP
eBPF
技术选型
Metric
Prometheus
InfluxDB/VM
Thanos
OpenTelemetry
Trace
skywalking
Jaeger
Zipkin
OpenTelemetry
Log
ELK
loki
filebeta
Storage
ES
Prome/VM
OLAP
ClickHouse
Apache Doris
HBase
NoSQL
LGTM
loki
grafana
Tempo
Mimir
Profiling
目标对齐
SLO
SLA
健康评分
小结
希望本文对你有所帮助,如果喜欢,欢迎点赞收藏转发一波。
我是老马,期待与你的下次相遇。
chat
详细介绍一下分布式系统的可观测如何做?
分布式系统的可观测性是一个复杂但非常重要的主题,因为分布式系统往往由多个独立的服务和组件组成,系统的状态和行为变得难以直接观察和理解。
可观测性可以帮助开发者和运维人员更高效地监控、调试和优化分布式系统。
以下是分布式系统中实现可观测性的关键方面:
1. 核心三大支柱
1.1 日志 (Logs)
日志是系统行为的记录,提供详细的事件和上下文。
- 特性:
- 可追溯性:帮助重现系统状态。
- 结构化日志:推荐使用 JSON 或其他结构化格式,方便解析和检索。
- 关键字段:应包含时间戳、服务名称、上下文信息(如请求 ID)。
- 工具:
- 日志收集:
Logstash
、Fluentd
。 - 存储与分析:
Elasticsearch
、Splunk
、Loki
。 - 可视化:
Kibana
、Grafana
。
- 日志收集:
1.2 指标 (Metrics)
指标是系统的关键性能和健康状态的数值化表示。
- 特性:
- 聚合性:实时捕获并可被聚合。
- 粒度:可以是系统级别(CPU、内存)或业务级别(订单成功率)。
- 维度化:支持根据标签(如服务名称、版本)进行分组和过滤。
- 工具:
- 数据收集:
Prometheus
、StatsD
。 - 存储与分析:
InfluxDB
、Graphite
。 - 可视化:
Grafana
。
- 数据收集:
1.3 分布式追踪 (Tracing)
追踪展示了分布式系统中单个请求的流动路径和性能数据。
- 特性:
- 全链路:追踪请求从入口到各服务的调用路径。
- 延迟分析:识别慢路径和性能瓶颈。
- 唯一标识:使用
Trace ID
和Span ID
。
- 工具:
- 分布式追踪:
Jaeger
、Zipkin
、OpenTelemetry
。 - 集成:与日志和指标结合(如基于 Trace ID 关联)。
- 分布式追踪:
2. 数据采集与处理
为了实现日志、指标和追踪的有效收集和处理,分布式系统需要采集代理和中间层:
- 采集代理:
如Fluent Bit
、Telegraf
、Vector
,用于轻量级数据采集和转发。 - 中间层:
消息队列如Kafka
或RabbitMQ
,用于缓冲和分发数据流。
3. 实现步骤与最佳实践
3.1 设计阶段的考虑
- 定义关键指标:明确哪些指标最能反映系统健康(如 QPS、延迟、错误率)。
- 标准化日志格式:确保所有服务生成一致的日志格式。
- 在代码中嵌入追踪:使用如 OpenTelemetry 的 SDK,在服务中嵌入追踪逻辑。
3.2 监控与告警
- 配置告警:基于 SLAs 和 SLOs 设定告警阈值。
- 动态阈值:结合历史数据,使用机器学习工具(如
Prometheus
的Alertmanager
)动态调整。
3.3 问题诊断与调试
- 关联性分析:
使用 Trace ID 将日志、追踪和指标关联起来。 - 根因分析:
通过时间对齐和拓扑图工具快速定位故障点。 - 历史回溯:
日志和追踪存储时间足够长,支持重现。
4. 常见工具与生态系统
以下工具和生态组合构成了可观测性实现的主流方案:
- 日志系统:
ELK Stack
(Elasticsearch、Logstash、Kibana),Loki
。 - 监控指标:
Prometheus
+Grafana
,Datadog
。 - 分布式追踪:
Jaeger
,Zipkin
,Honeycomb
。 - 统一框架:
OpenTelemetry
提供日志、指标和追踪的整合解决方案。
5. 架构图示例
分布式系统可观测性的典型架构可以表示如下:
[plaintext]
1
2
3
4[ 应用服务 ] --> [ 数据采集代理 ] --> [ 消息队列 (Kafka) ] --> [ 存储与分析平台 ]
--> 日志系统 (如 ELK)
--> 指标系统 (如 Prometheus)
--> 追踪系统 (如 Jaeger)
6. 扩展与趋势
- 服务网格 (Service Mesh): 使用如
Istio
和Linkerd
提供透明的追踪和指标采集。 - AIOps: 基于 AI 的自动化问题检测和分析。
- eBPF 技术: 提供更低成本的高性能数据采集。
通过整合日志、指标和追踪,分布式系统的可观测性能够帮助实现系统的透明化管理,提高问题诊断效率,并支持持续优化。