分布式链路追踪Jaeger + 微服务Pig在Rainbond上的实践分享
随着微服务架构的流行,客户端发起的一次请求可能需要涉及到多个或 N 个服务,致使我们对服务之间的监控和排查变得更加复杂。
举个例子:
某条业务线的某个接口调用服务端时快时慢,这时就需要排查各个服务的日志进行分析,调动各个服务的开发人员联动排查,这种排查费时又费力。对于 ToB 的业务有时候还拿不到日志,难搞哦!
因此,就需要可以帮助理解系统行为、用于分析性能问题的工具,以便发生故障的时候,能够快速定位和解决问题 ,那就是 APM (Application Performance Monitor)。目前流行的 APM 开源工具有很多,比如:Zipkin,Skywalking,Pinpoint、Jaeger 等等,本文将主要介绍 Jaeger 。
Jaeger 是 Uber 技术团队发布的开源分布式跟踪系统,它用于监控和故障排查基于微服务的分布式系统:
- 分布式上下文传播、事务监控
- 根本原因、服务依赖分析
- 性能/延迟优化
- OpenTracing 启发的数据模型
- 多个存储后端:Cassandra, Elasticsearch, memory.
- 系统拓扑图
- 服务性能监控(SPM)
- 自适应采样
Jaeger 架构

| Component | Description |
|---|---|
| Jaeger Client | Jaeger Client SDK |
| Jaeger Agent | 收集 Client 数据 |
| Jaeger Collector | 收集 Jaeger Agent 数据,有 pull/push 两种方式 |
| DB Storage | Collector 需要存储后端,Collector 拿到的数据将存在 Elasticsearch 或 Cassandra。 |
| Spark jobs | 用于生成拓扑图 UI 数据 |
| Jaeger Query Service & UI | 负责从 Storage 查询数据并提供 API 和 UI |
如何在Rainbond上集成?

1.集成 OpenTelemetry Client:
v1.36 版本以前 Jaeger Client 是基于 OpenTracing API 实现的客户端库,Jaeger Client 结合 Jaeger Agent 一起使用,发送 span 到 Jaeger Collector。
v1.36 版本以后被弃用。使用 OpenTelemetry 替代 Jaeger Client and Jaeger Agent,详情见 Jaeger and OpenTelemetry。
OpenTelemetry 是无侵入的,只需在 Java 进程启动时添加 javaagent,例:java -javaagent:path/to/opentelemetry-javaagent.jar -jar myapp.jar 。
那么在 Rainbond 上就可以通过插件将 OpenTelemetry javaagent 下载到组件中并修改启动命令。
2.连接到 Jaeger-Collector:
将所有安装了 OpenTelemetry javaagent 插件的微服务组件都通过依赖连接到 Jaeger Collector。
实践步骤
实践中将使用 Spring Cloud Pig 进行演示,Gitee:https://gitee.com/zhangbigqi/pig
Rainbond 部署请参阅文档 快速安装 。