跟着微服务架构的盛行,客户端发起的一次恳求可能需求涉及到多个或 N 个服务,致使咱们对服务之间的监控和排查变得愈加复杂。

举个例子:

某条事务线的某个接口调用服务端时快时慢,这时就需求排查各个服务的日志进行剖析,调动各个服务的开发人员联动排查,这种排查费时又吃力。对于 ToB 的事务有时候还拿不到日志,难搞哦!

因此,就需求能够协助了解体系行为、用于剖析功能问题的东西,以便产生毛病的时候,能够快速定位和解决问题,那就是 APM (Application Performance Monitor)。目前盛行的 APM 开源东西有许多,比方:Zipkin,Skywalking,Pinpoint、Jaeger 等等,本文将首要介绍 Jaeger 。

Jaeger 是 Uber 技术团队发布的开源分布式跟踪体系,它用于监控和毛病排查依据微服务的分布式体系:

  • 分布式上下文传达、事务监控
  • 根本原因、服务依靠剖析
  • 功能/延迟优化
  • OpenTracing 启发的数据模型
  • 多个存储后端:Cassandra, Elasticsearch, memory.
  • 体系拓扑图
  • 服务功能监控(SPM)
  • 自适应采样

Jaeger 架构

分布式链路追踪Jaeger + 微服务Pig在Rainbond上的实践分享

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上集成?

分布式链路追踪Jaeger + 微服务Pig在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:gitee.com/zhangbigqi/…

Rainbond 布置请参阅文档 快速装置 。

1. Spring Cloud Pig 源码布置

经过源码布置 Spring Cloud Pig 微服务结构就不详细介绍布置了,请参阅:

  • Spring Cloud Pig 布置教程
  • Spring Cloud Pig 视频教程

2. OpenTelemetry 插件装置

从运用商铺装置 opentelemetry-java-agent 初始化插件,该插件的作用是下载 opentelemetry-javaagent.jar 到微服务组件内,能够在 Java 发动项中指定。

  • 团队视图 -> 插件 -> 从运用商铺装置插件 -> 查找 opentelemetry-java-agent 并装置。

分布式链路追踪Jaeger + 微服务Pig在Rainbond上的实践分享

3. 布置 Jaeger

在开源运用商铺中查找 Jaeger 并装置到指定运用中。

分布式链路追踪Jaeger + 微服务Pig在Rainbond上的实践分享

4. OpenTelemetry Agent 插件装备

1.开通 OpenTelemetry Agent 插件

pig-gateway 为例,在组件 -> 插件中开通 opentelemetry-java-agent 插件并更新组件收效,微服务内的其他组件均需求开通插件并更新或重启组件收效。

分布式链路追踪Jaeger + 微服务Pig在Rainbond上的实践分享

2.装备环境变量

为一切微服务组件装备环境变量。

变量名 变量值 阐明
OTEL_TRACES_EXPORTER jaeger 挑选 Jaeger exporter
OTEL_EXPORTER_JAEGER_ENDPOINT http://127.0.0.1:14250 Jaeger Collector gRPC endpoint
OTEL_EXPORTER_JAEGER_TIMEOUT 10000 超时时间(毫秒)
OTEL_METRICS_EXPORTER none Metrics 导出器
JAVA_OPTS -javaagent:/agent/opentelemetry-javaagent.jar Java 发动参数

可运用 运用装备组 一致装备并运用到一切组件中。

分布式链路追踪Jaeger + 微服务Pig在Rainbond上的实践分享

3.装备组件服务称号

为一切微服务组件装备环境变量 OTEL_SERVICE_NAME ,装备组件的 Jaeger 服务称号,如:OTEL_SERVICE_NAME=pig-gateway OTEL_SERVICE_NAME=pig-auth

5.建立依靠联系

将一切微服务组件增加依靠衔接到 Jaeger Collector

Jaeger 布置在另外一个运用,需求进入 组件 -> 依靠 -> 增加 Jaeger Collector 依靠,就能够在当时运用的拓扑图看到 Jaeger Collector 组件,剩下的组件都可经过拓扑图修改模式进行依靠衔接。更新或重启一切微服务组件使依靠联系收效。

分布式链路追踪Jaeger + 微服务Pig在Rainbond上的实践分享

6. Jaeger 快速运用

  1. 访问 Spring Cloud Pig UI 进行登录,使其产生数据。

  2. 访问 Jaeger-Query16686 端口,翻开对外服务即可访问 Jaeger UI

  3. 在 Jaeger Search 页面中查找微服务 Pig-gateway 的 Traces

    • Service:挑选微服务的组件
    • Operation:挑选操作类型,例:GET POST、接口、类…..
    • Tags:依据响应头挑选,例:http.status_code=200 error=true
    • Lookback:挑选时间
    • Max Duration:最大持续时间;Min Duration:最小持续时间。
    • Limit Results:约束回来成果数量。

分布式链路追踪Jaeger + 微服务Pig在Rainbond上的实践分享

  1. 找到 Pig-gateway HTTP POST 的 Traces 并包含了 pig-auth Span并进入,可看到很明晰的展现了服务之间一层一层的调用以及接口的响应时间,这样咱们就能够排查到底是哪个服务调用的慢或许调用有问题。

分布式链路追踪Jaeger + 微服务Pig在Rainbond上的实践分享

Jaeger 拓扑图生成

拓扑图默许不会生成,运用 spark-dependencies 组件生成拓扑图数据,这是一个 Spark 作业,它从存储中搜集 span,剖析服务之间的链接,并将它们存储起来以供今后在 UI 中展现。请参阅 Jaeger Spark dependencies。

spark-dependencies 组件占用资源较大,不运用时可关闭,需求生成拓扑图数据时将其发动即可。

分布式链路追踪Jaeger + 微服务Pig在Rainbond上的实践分享

最后

有了 APM 体系后,使咱们能够更好的剖析事务功能、排查毛病等。

结合 Rainbond 作为基座不管是 Spring Cloud仍是 Jaeger 或其他 APM 都能够很便利、方便的布置运用,从繁琐的布置、装备中解放出来,让咱们更多的重视于事务层。