乐趣区

关于kubernetes:分布式链路追踪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 部署请参阅文档 疾速装置。

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 并装置。

3. 部署 Jaeger

在开源利用商店中搜寻 Jaeger 并装置到指定利用中。

4. OpenTelemetry Agent 插件配置

1. 开明 OpenTelemetry Agent 插件

pig-gateway 为例,在组件 -> 插件中开明 opentelemetry-java-agent 插件并更新组件失效,微服务内的其余组件均须要开明插件并更新或重启组件失效。

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 启动参数

可应用 利用配置组 对立配置并利用到所有组件中。

3. 配置组件服务名称

为所有微服务组件配置环境变量 OTEL_SERVICE_NAME ,配置组件的 Jaeger 服务名称,如:OTEL_SERVICE_NAME=pig-gateway OTEL_SERVICE_NAME=pig-auth

5. 建设依赖关系

将所有微服务组件增加依赖连贯到 Jaeger Collector

Jaeger 部署在另外一个利用,须要进入 组件 -> 依赖 -> 增加 Jaeger Collector 依赖,就能够在以后利用的拓扑图看到 Jaeger Collector 组件,剩下的组件都可通过拓扑图编辑模式进行依赖连贯。更新或重启所有微服务组件使依赖关系失效。

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:限度返回后果数量。
  1. 找到 Pig-gateway HTTP POST 的 Traces 并蕴含了 pig-auth Span 并进入,可看到很清晰的展现了服务之间一层一层的调用以及接口的响应工夫,这样咱们就能够排查到底是哪个服务调用的慢或者调用有问题。

Jaeger 拓扑图生成

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

spark-dependencies 组件占用资源较大,不应用时可敞开,须要生成拓扑图数据时将其启动即可。

最初

有了 APM 零碎后,使咱们能够更好的剖析业务性能、排查故障等。

联合 Rainbond 作为基座不论是 Spring Cloud 还是 Jaeger 或其余 APM 都能够很不便、快捷的部署应用,从繁琐的部署、配置中解放出来,让咱们更多的关注于业务层。

退出移动版