本站支持尊重有效期内的版权/著作权,所有的资源均来自于互联网网友分享或网盘资源,一旦发现资源涉及侵权,将立即删除。希望所有用户一同监督并反馈问题,如有侵权请联系站长或发送邮件到ebook666@outlook.com,本站将立马改正
微服务技术研发人员、架构师、运维人员必备的技术手册。
国内几乎没有介绍Zipkin、Jaeger等追踪框架的图书。
本书内容重点集中在分布式追踪技术上,介绍使用方法,介绍它们在代码层面的原理,在介绍追踪框架之后再以Prometheus为例介绍监控技术,还会介绍与可观察性相关的几个开放标准OpenTracing、OpenCensus和OpenTelemetry。
《微服务追踪与监控:Zipkin、Jaeger、Prometheus详解》介绍了微服务追踪与监控领域主要的开源软件,同时还介绍可观察性相关的技术标准。开源软件主要介绍了Zipkin、Jaeger和Prometheus等服务端组件的使用,同时还重点介绍了它们的埋点库编程接口及其实现原理。对于使用Spring Cloud开发微服务的读者,《微服务追踪与监控:Zipkin、Jaeger、Prometheus详解》还介绍了在Spring Cloud中可以无缝集成的追踪框架Sloth和监控框架Micrometer。在开放标准方面,《微服务追踪与监控:Zipkin、Jaeger、Prometheus详解》主要介绍了OpenTracing、OpenCensus和OpenTelemetry三种标准,包括它们的技术规范及具体的实现代码库。《微服务追踪与监控:Zipkin、Jaeger、Prometheus详解》还介绍了W3C的Trace Context和Correlation Context协议,它们定义了追踪与监控在HTTP中传播的标准协议。此外,《微服务追踪与监控:Zipkin、Jaeger、Prometheus详解》还简要介绍了监控指标暴露格式协议OpenMetrics。
《微服务追踪与监控:Zipkin、Jaeger、Prometheus详解》涵盖了微服务追踪与监控、可观察性相关领域的大部分内容,是了解和掌握这一领域技术知识和发展趋势必不可少的参考书籍。《微服务追踪与监控:Zipkin、Jaeger、Prometheus详解》适于具有一定编程基础且了解微服务技术的研发人员,也是架构师、运维人员必备的技术手册。《微服务追踪与监控:Zipkin、Jaeger、Prometheus详解》也可作为大学高年级、研究生专业课程教材。
前言
对于一个商业组织来说,他们在二十一世纪面临的□基本挑战,就是互联网已经不再是一个替代或可选渠道。互联网已经成为许多商业组织□主要的,甚至是□□的销售平台。保持互联网渠道正常运转,与维护实体店面正常运转一样重要。当商务网站变成商店时,它将面临与商店几乎相同的问题,所以必须要像监视实体店面一样监控它们。比实体店面更为复杂的是,几乎所有互联网应用都会采用微服务架构,这导致一次交易可能会由后台成百上千的服务共同完成。所以除了监控单个服务以外,追踪服务之间的调用链路也变得极为重要。所以微服务的追踪与监控对于商务网站来说,至少在技术层面已经成为决定其成败的关键因素之一。一方面微服务追踪与监控可以保证商务网站正常运转,在潜在灾难性错误出现前就阻止它,或是在灾难发生后迅速定位原因并恢复系统;另一方面微服务追踪与监控收集到的数据,经过聚合与分析可以产生巨大价值,人们可以从中发现巨大商机。这使得追踪与监控的性质发生了变化,未来微服务追踪与监控将不仅只是追踪与监控,而是追踪与监控数据辅以人工智能形成的市场分析与决策。
随着微服务与DevOps方□□的兴起,分布式追踪与监控的使用人员也不再仅局限于运维人员,而是受到越来越多研发人员的重视。但与此形成鲜明对比的是,国内多数软件研发人员对追踪与监控技术知之甚少。尤其是分布式追踪技术,由于它与微服务架构共同成长起来,国内几乎没有介绍Zipkin、Jaeger等追踪框架的图书。这使得许多人甚至并不知道微服务追踪这回事,而这也正是促成笔者编写本书的源动力之一。本书介绍的重点主要就集中在分布式追踪技术上,除了介绍使用方法主要会介绍它们在代码层面的原理。近几年随着云原生概念的兴起,人们将日志、监控和追踪都统一归入可观察性的范畴。所以本书会在介绍追踪框架之后再以Prometheus为例介绍监控技术,同时还会介绍与可观察性相关的几个开放标准OpenTracing、OpenCensus和OpenTelemetry。尽管OpenTelemetry目前还处于开发阶段,但未来可观察性的样子已经可见一斑了。
在编写本书时笔者面临了不少挑战,是否要关注底层实现细节的问题一直困扰着我。因为分布式追踪与监控本身应该对开发人员屏蔽技术细节,开发人员其实不需要关注太多底层细节,即使是在业务系统中也不需要编写太多与之相关的代码。而本书的写作目标恰恰就是要暴露这些技术细节,所以我不清楚读者是否会有兴趣。但以笔者二十多年的开发经验来看,越是这种封闭良好的技术框架,出现问题时付出的代价就会越大。这就是所谓的抽象泄漏问题。当一种组件对人们来说是一个黑盒,它出现问题时就会让人们不知所措。由于追踪与监控对开发人员来说影响比较大的是埋点库,所以本书关注的技术细节也只是在埋点库的实现上。对于追踪与监控的服务端来说,本书则着重介绍它们的安装、配置与使用方法。有些内容为了描述上的方便并没有完全按代码逻辑去描述,但从总的流程上来看遵从了框架的设计思路。读者要想了解其中细节内容,还是需要自行查看源代码。
另一个挑战就是微服务的追踪与监控技术是近些年才兴起的技术,一些专业术语在国内还没有形成统一的认识。有些术语的含义接近,但却对应了不同的英文单词;而有些则代表了不同的概念,但对应了相同的中文词语。为了不至混乱,这里先对一些术语做一些约定。
Tag与Label。
Tag在书中翻译为标签,Label在书中翻译为标记。标签一般代表数据一些内在特征,而标记则是人为附加的记号以区分数据。在书中标签主要出现在追踪系统中,而标记则出现在监控系统中。但它们的确也有混用的情况,本书严格按上述翻译约定。
Metric和Instrument
Metric在本书中翻译为指标,Instrument在本书中翻译为埋点。IEEE的软件工程术语标准辞典(IEEE Standard Glossary of Software Engineering Terms)中定义Metric为对一个系统、构件或过程的某个给定属性的一个定量测量。而Instrument在英文中泛指一切工具,但它一般是指用于测量数据的仪表。在追踪与监控领域,Instrument有一个比较通俗的叫法,那就是埋点。简单来说,Metric就是被监控的数据,而Instrument则是用来收集数据的工具或方法。Instrument并非只收集指标,在追踪中的追踪数据也是通过埋点的方式收集。
Measure与Measurement
Measure在本书中翻译为测度,Measurement在本书中翻译为测量。在软件工程领域中,Measure是对一个产品某个属性的数量、大小等提供的一个定义,而Measurement则是对其进行的一个具体测量行为。这两个术语主要出现在OpenCensus中,在本书第9章会有更详细说明。
在分布式追踪与监控领域,可以清晰地看到Spring和Kubernetes两个阵营。Spring以开源为背书,在追踪与监控方面主推Zipkin和Micrometer等开源框架;而Kubernetes则以CNCF为基础,主推OpenTracing和OpenTelemetry为主的开放标准。这背后实际上是在云计算技术背景下,各大厂商对计算虚拟化市场抢夺的一种表现形式。本书内容基本上涵盖了这两大阵营在追踪与监控上的技术框架和开放标准,相信读者□终可以作出自己的正确判断。
□后,谨以此书献给我的母亲!
田雪松
□0□0年6月□0日
目录
前言
□□章 分布式追踪与监控概览
1.1 从监控到可观察性
1.1.1 监控系统
1.1.□ 追踪系统
1.1.3 可观察性
1.□ 分布式监控系统设计
1.□.1 体系结构
1.□.□ 时序数据
1.□.3 时序数据库
1.3 分布式追踪系统设计
1.3.1 追踪模型
1.3.□ 采样策略
1.3.3 跨度传播
第□章 Zipkin服务与组件
□.1 Zipkin快速入门
□.1.1 启动Zipkin服务
□.1.□ 上报跨度
□.1.3 错误排查
□.□ Zipkin组件与接口
□.□.1 体系结构
□.□.□ 组件配置
□.□.3 REST接口
□.3 跨度数据模型
□.3.1 基本信息
□.3.□ 标注与标签
□.3.3 端点
□.4 编码与上报
□.4.1 编码与传输组件
□.4.□ 编码器与上报组件
□.4.3 解码器与收集组件
□.5 传输与存储
□.5.1 传输方式
□.5.□ 存储组件
□.6 界面配置
□.6.1 查询界面配置
□.6.□ 追踪归档
□.6.3 标签自动补齐
□.6.4 服务依赖
第3章 使用Brave埋点
3.1 Brave概览
3.1.1 快速入门
3.1.□ Tracing
3.1.3 Tracer
3.1.4 Span与ScopedSpan
3.□ 生命周期与采样策略
3.□.1 生命周期
3.□.□ FinishedSpanHandler
3.□.3 采样策略
3.3 跨度本地传播
3.3.1 TraceContext
3.3.□ CurrentTraceContext
3.3.3 currentSpan与nextSpan
3.□.□ ScopedSpan与SpanInScope
3.4 跨度远程传播
3.4.1 B3传播协议
3.4.□ W3C传播协议
3.4.3 Propagation接口
3.4.4 随行数据
3.5 使用埋点组件
3.5.1 Java Web埋点
3.5.□ MySQL埋点
第4章 Spring Cloud Sleuth
4.1 Sleuth快速入门
4.1.1 添加依赖
4.1.□ 编写代码
4.1.3 日志关联
4.1.4 原理解析
4.□ 整合Zipkin服务
4.□.1 单服务追踪
4.□.□ 跨服务追踪
4.3 Sleuth配置与定制
4.3.1 采样器
4.3.□ 定制跨度
4.3.3 定制Tracing
4.3.4 定制CurrentTraceContext
4.3.5 OpenTracing
4.4 线程与方法追踪
4.4.1 线程池
4.4.□ @Async与@Scheduled
4.4.3 方法追踪
第5章 Jaeger组件与应用
5.1 Jaeger快速入门
5.1.1 使用All-in-one
5.1.□ 服务埋点
5.□ Jaeger组件与配置
5.□.1 体系结构
5.□.□ 组件配置
5.□.3 通用配置
5.□.3 启动顺序
5.3 Jaeger存储插件
5.3.1 初始化Cassandra
5.3.□ Cassandra参数
5.3.3 使用Elasticsearch
5.4 Jaeger收集组件
5.4.1 面向代理组件的通道
5.4.□ 面向埋点库的通道
5.4.3 面向Zipkin的通道
5.4.4 内部队列
5.5 Jaeger代理组件
5.5.1 UDP通道
5.5.□ 连接收集组件
5.6 Jaeger消费组件
5.6.1 收集组件与Kafka
5.6.□ 消费组件与Kafka
5.7 Jaeger查询组件
5.7.1 查询追踪
5.7.□ 追踪详情
5.7.3 追踪比较
5.7.4 系统结构
5.7.5 查询接口
5.8 定制Jaeger查询组件
5.8.1 添加新菜单
5.8.□ 配置已有菜单
5.8.3 页面嵌入
5.8.4 追踪归档
第6章 OpenTracing与Jaeger埋点库
6.1 构造器与配置类
6.1.1 JaegerTracer构造器
6.1.□ JaegerTracer配置类
6.1.3 OpenTracing核心组件
6.□ OpenTracing数据模型
6.□.1 基本信息
6.□.□ 跨度上下文
6.□.3 引用
6.3 跨度标签与日志
6.3.1 标签
6.4.□ 日志
6.4 跨度上报与采样策略
6.4.1 上报组件
6.4.□ 兼容Zipkin
6.4.3 采样策略
6.5 跨度传播
6.5.1 进程间传播
6.5.□ 进程内传播
第7章 Prometheus服务概览
7.1 Prometheus快速入门
7.1.1 安装与启动
7.1.□ 配置入门
7.1.3 体系结构
7.□ 数据模型与存储
7.□.1 数据模型
7.□.□ 时序数据库
7.□.3 远程读写
7.3 查询语言PromQL
7.3.1 数据类型
7.3.□ 运算符
7.3.3 函数
7.3.4 记录规则
7.4 报警与可视化
7.4.1 报警状态
7.4.□ 报警配置
7.4.3 报警路由
7.4.4 报警优化
第8章 Prometheus客户端组件
8.1 Prometheus埋点库
8.1.1 快速入门
8.1.□ 核心类
8.1.3 OpenMetrics
8.□ Prometheus指标类型
8.□.1 SimpleCollector
8.□.□ Counter与Gauge
8.□.3 Histogram
8.□.4 Summary
8.3 使用Micrometer
8.3.1 Micrometer
8.3.□ Spring Boot Actuator
8.4 导出器与推送网关
8.4.1 导出器
8.4.□ 推送网关
第9章 OpenCensus与OpenTelemetry
9.1 OpenCensus追踪埋点
9.1.1 体系结构
9.1.□ 追踪埋点
9.1.3 跨度传播
9.□ 使用OpenCensus监控埋点
9.□.1 测度与测量
9.□.□ 聚合与视图
9.□.3 标签上下文
9.□.4 关联上下文
9.3 OpenTelemetry概览
9.3.1 体系结构
9.3.□ 核心组件
9.3.3 上下文
9.3.4 OpenTracing Shim
9.4 OpenTelemetry追踪埋点
9.4.1 跨度模型
9.4.□ 配置追踪
9.4.3 跨进程传播
9.5 OpenTelemetry监控埋点
9.5.1 埋点工具
9.5.□ 标记绑定
9.5.3 标记传播