建设目标

  • 提高系统稳定性

  • 提升发现&分析问题的能力

  • 提高系统可理解程度

  • 降低成本

  • 助力决策

理论体系

  [plaintext]
1
2
3
4
5
6
7
8
9
10
11
12
13
理论体系 监控场景 业务监控 数字体验监控DEM+前端监控 APM 基础监控 其他 云原生监控 LLM/AI 可观测数据支柱 Mertric Logs Trace
理论体系监控场景业务监控数字体验监控DEM+前端监控APM基础监控其他云原生监控LLM/AI可观测数据支柱MertricLogsTrace

应用场景

  [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 关联分析 指标 调用 事件 根因定位 下钻分析 全链路根因分析 影响面分析 服务治理 架构合理性 调用合理性 资源合理性 熔断降级 运营评估 容量评估 运营报告 用户行为分析 变更分析 变更异常检测 变更诊断 性能优化 性能指标分析 指定并实施优化策略 持续分析
应用场景异常检测关联分析指标调用事件专家规则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 健康评分
技术指引基础知识微服务框架配置中心name-serverrpc无侵入采集日志SNMPeBPF技术选型目标对齐PrometheusInfluxDB/VMThanosOpenTelemetryMetricskywalkingJaegerZipkinOpenTelemetryTraceELKlokifilebetaLogESProme/VMClickHouseApache DorisHBaseOLAPNoSQLStoragelokigrafanaTempoMimirLGTMProfilingSLOSLA健康评分

小结

希望本文对你有所帮助,如果喜欢,欢迎点赞收藏转发一波。

我是老马,期待与你的下次相遇。


chat

详细介绍一下分布式系统的可观测如何做?

分布式系统的可观测性是一个复杂但非常重要的主题,因为分布式系统往往由多个独立的服务和组件组成,系统的状态和行为变得难以直接观察和理解。

可观测性可以帮助开发者和运维人员更高效地监控、调试和优化分布式系统。

以下是分布式系统中实现可观测性的关键方面:


1. 核心三大支柱

1.1 日志 (Logs)

日志是系统行为的记录,提供详细的事件和上下文。

  • 特性:
    • 可追溯性:帮助重现系统状态。
    • 结构化日志:推荐使用 JSON 或其他结构化格式,方便解析和检索。
    • 关键字段:应包含时间戳、服务名称、上下文信息(如请求 ID)。
  • 工具:
    • 日志收集:LogstashFluentd
    • 存储与分析:ElasticsearchSplunkLoki
    • 可视化:KibanaGrafana

1.2 指标 (Metrics)

指标是系统的关键性能和健康状态的数值化表示。

  • 特性:
    • 聚合性:实时捕获并可被聚合。
    • 粒度:可以是系统级别(CPU、内存)或业务级别(订单成功率)。
    • 维度化:支持根据标签(如服务名称、版本)进行分组和过滤。
  • 工具:
    • 数据收集:PrometheusStatsD
    • 存储与分析:InfluxDBGraphite
    • 可视化:Grafana

1.3 分布式追踪 (Tracing)

追踪展示了分布式系统中单个请求的流动路径和性能数据。

  • 特性:
    • 全链路:追踪请求从入口到各服务的调用路径。
    • 延迟分析:识别慢路径和性能瓶颈。
    • 唯一标识:使用 Trace IDSpan ID
  • 工具:
    • 分布式追踪:JaegerZipkinOpenTelemetry
    • 集成:与日志和指标结合(如基于 Trace ID 关联)。

2. 数据采集与处理

为了实现日志、指标和追踪的有效收集和处理,分布式系统需要采集代理和中间层:

  • 采集代理:
    Fluent BitTelegrafVector,用于轻量级数据采集和转发。
  • 中间层:
    消息队列如 KafkaRabbitMQ,用于缓冲和分发数据流。

3. 实现步骤与最佳实践

3.1 设计阶段的考虑

  • 定义关键指标:明确哪些指标最能反映系统健康(如 QPS、延迟、错误率)。
  • 标准化日志格式:确保所有服务生成一致的日志格式。
  • 在代码中嵌入追踪:使用如 OpenTelemetry 的 SDK,在服务中嵌入追踪逻辑。

3.2 监控与告警

  • 配置告警:基于 SLAs 和 SLOs 设定告警阈值。
  • 动态阈值:结合历史数据,使用机器学习工具(如 PrometheusAlertmanager)动态调整。

3.3 问题诊断与调试

  • 关联性分析:
    使用 Trace ID 将日志、追踪和指标关联起来。
  • 根因分析:
    通过时间对齐和拓扑图工具快速定位故障点。
  • 历史回溯:
    日志和追踪存储时间足够长,支持重现。

4. 常见工具与生态系统

以下工具和生态组合构成了可观测性实现的主流方案:

  • 日志系统: ELK Stack(Elasticsearch、Logstash、Kibana),Loki
  • 监控指标: Prometheus + GrafanaDatadog
  • 分布式追踪: JaegerZipkinHoneycomb
  • 统一框架: OpenTelemetry 提供日志、指标和追踪的整合解决方案。

5. 架构图示例

分布式系统可观测性的典型架构可以表示如下:

  [plaintext]
1
2
3
4
[ 应用服务 ] --> [ 数据采集代理 ] --> [ 消息队列 (Kafka) ] --> [ 存储与分析平台 ] --> 日志系统 (如 ELK) --> 指标系统 (如 Prometheus) --> 追踪系统 (如 Jaeger)

6. 扩展与趋势

  • 服务网格 (Service Mesh): 使用如 IstioLinkerd 提供透明的追踪和指标采集。
  • AIOps: 基于 AI 的自动化问题检测和分析。
  • eBPF 技术: 提供更低成本的高性能数据采集。

通过整合日志、指标和追踪,分布式系统的可观测性能够帮助实现系统的透明化管理,提高问题诊断效率,并支持持续优化