第1章 可观测性概述 1
1.1 可观测系统的演进 1
1.1.1 系统架构的演进 1
1.1.2 可观测性和监控的关系 6
1.1.3 可观测性技术的现状 13
1.2 可观测性数据 20
1.2.1 可观测性数据的类型 20
1.2.2 实战场景下运维人员观测的数据 24
1.2.3 实战场景下研发人员观测的数据 27
1.3 可观测性技术的价值 29
1.3.1 发现系统故障 30
1.3.2 预测系统故障和容量 31
1.3.3 提供事故分析报告 33
1.3.4 预测变更的影响 35
第2章 系统架构 38
2.1 架构设计的基本原则 38
2.1.1 统一的数据语义 39
2.1.2 统一的数据处理平台 46
2.1.3 统一的可视化系统 48
2.2 平台基础架构设计实战 53
2.2.1 实战一:基于开源Grafana Prometheus Tempo Loki的解决方案 53
2.2.2 实战二:基于开源Elastic Stack的解决方案 71
2.2.3 实战三:开源架构优化之解决大规模数据计算问题 81
第3章 日志系统实战 91
3.1 日志模型的设计 91
3.2 日志系统的选型实战 95
3.2.1 全文检索的首选:Elasticsearch实战 95
3.2.2 新生代列式存储:ClickHouse实战 101
3.3 Elasticsearch调优实战指南 104
3.3.1 实战一:Elasticsearch索引模块及配置Index、Shard、Segment 105
3.3.2 实战二:合理使用Elasticsearch数据字段,配置pipeline和mapping 113
3.3.3 实战三:在大规模系统中选择字段存储方式 121
3.3.4 实战四:PB级别数据量场景下的Elasticsearch调优 126
3.3.5 实战五:降本增效,预测Elasticsearch集群的规模并控制成本 130
第4章 链路追踪系统实战 135
4.1 设计链路追踪模型 135
4.1.1 链路追踪的发展历程 135
4.1.2 Span语义规范 138
4.2 系统选型实战 141
4.2.1 OpenTelemetry调用链实战 141
4.2.2 Spring Cloud Sleuth实战 157
4.2.3 Istio实战 169
4.2.4 Filebeat采集方案实战 172
4.2.5 Elasticsearch存储实战 176
4.3 链路追踪系统实战场景 181
4.3.1 实战一:头采、尾采、单元采样的区别与技术难点 181
4.3.2 实战二:在万亿级调用量下应如何自适应采样 185
4.3.3 实战三:陈旧系统如何接入全链路追踪系统 188
第5章 指标系统实战 193
5.1 指标采集模型的设计 193
5.1.1 指标数据的分类 193
5.1.2 指标数据的语义规范 197
5.2 系统选型实战 200
5.2.1 OpenTelemetry指标监控实战 200
5.2.2 Spring Boot Actuator监控实战 216
5.2.3 自研指标监控实战 226
5.2.4 内核监控之eBPF实战 231
5.3 指标系统实战场景 238
5.3.1 实战一:如何保证海量数据上报的实时性和完整性 238
5.3.2 实战二:当陷入告警风暴时应该如何实现告警降噪 240
5.3.3 实战三:使用Filebeat采集指标数据,如何在服务端去重 244
第6章 事件中心实战 251
6.1 事件中心的设计 251
6.1.1 事件驱动架构概述 251
6.1.2 事件模型的设计 254
6.1.3 事件中心的设计及实战 256
6.2 高可用事件中心实战 258
第7章 Profile诊断实战 261
7.1 线上分析工具 261
7.1.1 JDK原生工具 261
7.1.2 Java线上诊断工具 266
7.1.3 网络请求分析工具Wireshark 272
7.2 线上问题实时分析实战 275
7.2.1 实战一:当线上业务内存溢出时如何定位 276
7.2.2 实战二:当线上业务CPU的使用率较高时如何定位 281
7.2.3 实战三:当线上业务I/O异常时如何定位 283
7.2.4 实战四:当接口请求响应变慢时应如何定位 285
7.3 线上问题处理流程实战 286
第8章 可观测性的探索 289
8.1 DevOps与可观测性 289
8.1.1 服务依赖关系 289
8.1.2 了解新版本的变化 293
8.1.3 全链路压力测试不可或缺的可观测性 296
8.1.4 利用混沌工程及时发现问题 298
8.2 AIOps与可观测性 302
8.2.1 如何选择合适的数据和算法 303
8.2.2 企业级场景下AIOps落地的难点与经验 306