20、Jaeger 分布式追踪:从安装到应用实践

Jaeger 分布式追踪:从安装到应用实践

1. 追踪采样

理解追踪采样至关重要,因为不同的采样类型具有不同的特点,且会影响应用程序中捕获的追踪数量。Jaeger 提供了以下几种采样选项:
| 采样类型 | 描述 | 示例 |
| — | — | — |
| 常量采样(Constant) | 对每个可能的追踪始终做出相同的决策。设置为 1 时采样所有追踪,设置为 0 时忽略所有追踪。 | 大多数演示应用使用值为 1 的常量采样器来捕获所有追踪。在生产环境中,仅适用于请求不多的应用。 |
| 概率采样(Probabilistic) | 使用权重来确定采样追踪的可能性。 | 给定值为 0.2 时,大约每 10 个追踪中会采样 2 个。 |
| 速率限制采样(Rate limiting) | 确保以恒定速率采样追踪。 | 值为 4.0 表示 Jaeger 每秒采样 4 个请求。 |
| 远程采样(Remote) | 如果未设置其他配置,则为默认采样类型。Jaeger 代理根据 Jaeger 后端的配置远程提供采样类型。 | - |

2. 设置 Minikube 环境

为后续的追踪示例做准备,需要设置 Minikube 环境,包含 Apache Kafka、PostgreSQL 数据库、账户服务和透支服务。具体步骤如下:

minikube start --memory 4096
kubectl create namespace kafka
kubectl apply -f 'strimzi-cluster-operator-0.25.0.yaml' -n kafka
kubectl apply -f kafka_cluster.yml -n kafka
kubectl wait kafka/my-cluster --for=condition=Ready --timeout=300s -n kafka
kubectl apply -f kafka_topics.yml -n kafka
kubectl apply -f postgresql_kubernetes.yml
3. 安装 Jaeger

在 Minikube 中使用 Jaeger 操作符来安装 Jaeger,具体步骤如下:
1. 创建命名空间:

kubectl create namespace observability
  1. 安装自定义资源定义(CRDs):
kubectl create -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/deploy/crds/jaegertracing.io_jaegers_crd.yaml
  1. 创建 Jaeger 操作符相关资源:
kubectl create -n observability -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/deploy/service_account.yaml
kubectl create -n observability -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/deploy/role.yaml
kubectl create -n observability -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/deploy/role_binding.yaml
kubectl create -n observability -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/master/deploy/operator.yaml
  1. 验证 Jaeger 操作符是否就绪:
kubectl get deployment jaeger-operator -n observability

要使 jaeger - operator 就绪,其 READY 状态应为 1/1。
5. 安装 Minikube 的 ingress 插件:

minikube addons enable ingress
  1. 使用一体化镜像部署 Jaeger:
kubectl apply -n observability -f - <<EOF
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
  name: simplest
EOF

使用以下命令查看 Jaeger 组件是否成功启动:

kubectl get pods -n observability

注意 :一体化镜像不建议用于生产环境。

  1. 获取 Jaeger 控制台的 URL:
kubectl get -n observability ingress

打开浏览器访问该 URL 即可看到 Jaeger 控制台。

4. 使用 Jaeger 进行微服务追踪

部署所有微服务以查看追踪情况:

eval $(minikube -p minikube docker-env)
/chapter11/account-service> mvn verify -Dquarkus.kubernetes.deploy=true
/chapter11/overdraft-service> mvn verify -Dquarkus.kubernetes.deploy=true
/chapter11/transaction-service> mvn verify -Dquarkus.kubernetes.deploy=true

在进行追踪之前,验证三个服务是否正常运行:

kubectl get pods

当服务就绪后,从账户中取款使账户透支:

TRANSACTION_URL=`minikube service --url transaction-service`
curl -H "Content-Type: application/json" -X PUT -d "600.00" ${TRANSACTION_URL}/transactions/123456789/withdrawal

刷新 Jaeger 控制台页面,从服务下拉菜单中选择服务并点击“Find Traces”进行追踪搜索。

以下是 Jaeger UI 的搜索参数说明:
| 参数 | 描述 |
| — | — |
| 服务下拉菜单(Service) | 选择要搜索追踪的服务。 |
| 操作名称(Operation name) | 用于筛选特定操作的追踪。 |
| 追踪标签(Tags) | 根据追踪上的标签进行筛选。 |
| 搜索时间段 | 指定搜索追踪的时间范围。 |
| 最小持续时间(Min Duration)和最大持续时间(Max Duration) | 帮助查找执行时间过长的有问题的追踪。 |
| 结果限制(Limit Results) | 将结果限制为特定数量的追踪。 |

点击追踪结果可查看更多详细信息,包括追踪的方法、开始时间、总持续时间、服务数量、追踪深度和跨度数量等。每个跨度以水平条表示,其长度表示完成时间,位置表示开始和结束时间,颜色表示所属服务。

5. 追踪规范
5.1 OpenTracing

OpenTracing 由 API 规范以及为各种语言实现该规范的框架和库组成。它不是官方标准,是云原生计算基金会(CNCF)的一部分。其目标是使应用程序和框架开发人员能够在项目中包含追踪工具,而无需绑定到特定的追踪供应商。Jaeger 是可以接受使用 OpenTracing 创建的追踪的后端之一。

5.2 MicroProfile OpenTracing

MicroProfile OpenTracing 基于 OpenTracing 构建,不定义自己的 API。它支持 OpenTracing 支持的任何追踪格式,并且无需开发人员在应用程序代码中进行交互即可实现追踪的捕获和传播。它通过从传入的 JAX - RS 请求中提取 SpanContext 信息来实现无代码追踪传播,默认情况下会对每个 JAX - RS 端点进行追踪。还提供了 @Traced 注解,可用于指定特定方法或类的所有方法创建跨度,并且可以修改默认的跨度名称。

5.3 OpenTelemetry

2019 年 3 月,OpenTracing 和 OpenCensus 社区合并为 OpenTelemetry 项目。OpenTracing 实现追踪 API,OpenCensus 有用于指标的 API,合并后旨在将应用程序的可观测性作为现代应用的内置功能。2021 年初,OpenTelemetry 发布了通用可用的追踪 API,截至 2021 年 8 月,指标功能接近完成,日志功能预计在 2022 年完成。MicroProfile 社区正在探索 OpenTelemetry 对现有指标和 OpenTracing 规范的影响。

6. 自定义应用程序追踪

使用 @Traced 注解可以自定义跨度名称,为名称赋予更多含义。例如,修改 AccountResource withdrawal 方法:

@Traced(operationName = "withdraw-from-account")

重新部署账户服务:

mvn verify -Dquarkus.kubernetes.deploy=true

进行取款操作:

curl -H "Content-Type: application/json" -X PUT -d "2500.00" ${TRANSACTION_URL}/transactions/111222333/withdrawal

刷新 Jaeger 控制台页面,搜索账户服务的追踪,点击最新的追踪结果并展开账户服务的跨度部分,即可看到跨度名称已变为 withdraw_from_account

通过以上步骤,我们可以全面了解 Jaeger 的安装、配置、使用以及如何进行自定义追踪,从而更好地监控和优化微服务应用程序。

Jaeger 分布式追踪:从安装到应用实践

7. 追踪采样总结

为了更清晰地对比不同的追踪采样类型,我们将其关键信息汇总成如下表格:
| 采样类型 | 特点 | 适用场景 | 示例配置 |
| — | — | — | — |
| 常量采样(Constant) | 决策固定,设置 1 采样所有追踪,设置 0 忽略所有追踪 | 演示应用或请求量少的生产应用 | quarkus.jaeger.sampler-type=const quarkus.jaeger.sampler-param=1 |
| 概率采样(Probabilistic) | 使用权重确定采样可能性 | 按一定比例采样追踪 | quarkus.jaeger.sampler-type=probabilistic quarkus.jaeger.sampler-param=0.2 |
| 速率限制采样(Rate limiting) | 以恒定速率采样追踪 | 控制采样速率 | quarkus.jaeger.sampler-type=rate-limiting quarkus.jaeger.sampler-param=4.0 |
| 远程采样(Remote) | 由 Jaeger 代理根据后端配置远程提供采样类型 | 默认配置情况 | - |

8. 微服务追踪流程梳理

下面通过 mermaid 格式的流程图来梳理使用 Jaeger 进行微服务追踪的整体流程:

graph LR
    classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
    classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px

    A([开始]):::startend --> B(设置 Minikube 环境):::process
    B --> C(安装 Jaeger):::process
    C --> D(部署微服务):::process
    D --> E{服务是否就绪?}:::decision
    E -->|是| F(进行取款操作):::process
    E -->|否| D
    F --> G(刷新 Jaeger 控制台):::process
    G --> H(选择服务并搜索追踪):::process
    H --> I(查看追踪详细信息):::process
    I --> J([结束]):::startend
9. 追踪规范对比

为了更好地理解不同的追踪规范,我们将 OpenTracing、MicroProfile OpenTracing 和 OpenTelemetry 进行对比,如下表所示:
| 规范名称 | 所属组织 | 核心功能 | 特点 |
| — | — | — | — |
| OpenTracing | 云原生计算基金会(CNCF) | 提供 API 规范及多语言实现库 | 不绑定特定供应商,促进追踪工具的通用性 |
| MicroProfile OpenTracing | - | 基于 OpenTracing,支持追踪捕获和传播 | 无代码追踪传播,提供 @Traced 注解自定义 |
| OpenTelemetry | - | 合并 OpenTracing 和 OpenCensus,统一应用可观测性 | 整合追踪和指标功能,未来将支持日志 |

10. 自定义追踪的优势

使用 @Traced 注解自定义跨度名称具有以下优势:
- 提高可读性 :自定义的跨度名称能够更清晰地表达操作的含义,方便开发人员和运维人员理解追踪信息。
- 便于调试 :在查找问题时,更具描述性的跨度名称可以帮助快速定位到具体的操作,提高调试效率。
- 优化监控 :通过自定义跨度名称,可以更精准地对特定操作进行监控和分析,从而优化微服务的性能。

11. 生产环境注意事项

在生产环境中使用 Jaeger 进行微服务追踪时,需要注意以下几点:
1. 避免使用一体化镜像 :一体化镜像不适合生产环境,需要根据实际需求配置存储、收集器和查询组件。
2. 合理选择采样类型 :根据应用的请求量和业务需求,选择合适的采样类型,避免存储过多不必要的追踪数据。
3. 确保配置正确 :在每个服务中正确配置 Jaeger 的相关参数,特别是 service-name ,避免追踪信息混淆。
4. 监控资源使用 :追踪会消耗一定的系统资源,需要监控资源使用情况,确保不会对应用性能产生过大影响。

12. 总结

通过本文的介绍,我们详细了解了 Jaeger 的追踪采样、安装部署、微服务追踪以及追踪规范等内容。掌握这些知识可以帮助我们更好地使用 Jaeger 对微服务进行追踪和监控,及时发现和解决问题,提高微服务应用的稳定性和性能。同时,在实际应用中要根据不同的场景和需求,合理选择和配置相关参数,确保追踪系统的有效性和可靠性。

希望本文能为你在微服务追踪方面提供有价值的参考,让你在使用 Jaeger 时更加得心应手。

这个是完整源码 python实现 Flask,Vue 【python毕业设计】基于Python的Flask+Vue物业管理系统 源码+论文+sql脚本 完整版 数据库是mysql 本文首先实现了基于Python的Flask+Vue物业管理系统技术的发展随后依照传统的软件开发流程,最先为系统挑选适用的言语和软件开发平台,依据需求分析开展控制模块制做和数据库查询构造设计,随后依据系统整体功能模块的设计,制作系统的功能模块图、E-R图。随后,设计框架,依据设计的框架撰写编码,完成系统的每个功能模块。最终,对基本系统开展了检测,包含软件性能测试、单元测试和性能指标。测试结果表明,该系统能够实现所需的功能,运行状况尚可并无明显缺点。本文首先实现了基于Python的Flask+Vue物业管理系统技术的发展随后依照传统的软件开发流程,最先为系统挑选适用的言语和软件开发平台,依据需求分析开展控制模块制做和数据库查询构造设计,随后依据系统整体功能模块的设计,制作系统的功能模块图、E-R图。随后,设计框架,依据设计的框架撰写编码,完成系统的每个功能模块。最终,对基本系统开展了检测,包含软件性能测试、单元测试和性能指标。测试结果表明,该系统能够实现所需的功能,运行状况尚可并无明显缺点。本文首先实现了基于Python的Flask+Vue物业管理系统技术的发展随后依照传统的软件开发流程,最先为系统挑选适用的言语和软件开发平台,依据需求分析开展控制模块制做和数据库查询构造设计,随后依据系统整体功能模块的设计,制作系统的功能模块图、E-R图。随后,设计框架,依据设计的框架撰写编码,完成系统的每个功能模块。最终,对基本系统开展了检测,包含软件性能测试、单元测试和性能指标。测试结果表明,该系统能够实现所需的功能,运行状况尚可并无明显缺点。本文首先实现了基于Python的Flask+Vue物业管理系统技术的发
源码地址: https://pan.quark.cn/s/a4b39357ea24 # SerialAssistant串口助手 下载地址: 本仓库release文件夹 在线下载:http://mculover666.cn/SerialAssistant.zip 功能说明 本项目是使用C# + WinForm框架编写的串口助手。 目前版本为2.0.0版本,拥有以下功能: 未打开串口时,自动扫描可用端口 接收数据支持文本或者HEX方式显示 支持接收数据加入时间戳 支持将当前接收数据保存为文件 支持发送文本数据或HEX数据 支持自动定时发送数据 支持从文件中(.txt, .json)加载数据到发送文本框 支持发送数据记录(不重复记录) ……欢迎加入更多功能 环境说明 VS2019 .NET Framework 4.5 教程 C#上位机开发(一)—— 了解上位机 C#上位机开发(二)—— Hello,World C#上位机开发(三)—— 构建SerialAssistant雏形 C#上位机开发(四)—— SerialAssistant功能完善 C#上位机开发(五)——SerialAssistant界面升级(WinForm界面布局进阶) C#上位机开发(六)——SerialAssistant功能优化(串口自动扫描功能、接收数据保存功能、加载发送文件、发送历史记录、打开浏览器功能、定时发送功能) C#上位机开发(七)—— 修改窗口图标和exe文件图标 C#上位机开发(八)—— 美化界面(给按钮添加背景) 更新日志 2018/6/3 完成串口属性设置,打开与关闭异常处理; 字符串发送功能; 字符串接收功能; 2018/6/4 完善串口扩展功能界面部分 2018/6/6 完善...
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值