随着微服务架构的流行,客户端发起的一次请求可能需要涉及到多个或 N 个服务,致使我们对服务之间的监控和排查变得更加复杂。
「举个例子:」
某条业务线的某个接口调用服务端时快时慢,这时就需要排查各个服务的日志进行分析,调动各个服务的开发人员联动排查,这种排查费时又费力。对于 ToB 的业务有时候还拿不到日志,难搞哦!
因此,就需要可以帮助理解系统行为、用于分析性能问题的工具,以便发生故障的时候,能够快速定位和解决问题,那就是 APM (Application Performance Monitor)。目前流行的 APM 开源工具有很多,比如:Zipkin,Skywalking,Pinpoint、Jaeger 等等,本文将主要介绍 Jaeger 。
Jaeger 是 Uber 技术团队发布的开源分布式跟踪系统,它用于监控和故障排查基于微服务的分布式系统:
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
「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 部署请参阅文档 快速安装 。
通过源码部署 Spring Cloud Pig 微服务框架就不详细介绍部署了,请参阅:
从应用商店安装 opentelemetry-java-agent 初始化插件,该插件的作用是下载 opentelemetry-javaagent.jar 到微服务组件内,可以在 Java 启动项中指定。
在开源应用商店中搜索 Jaeger 并安装到指定应用中。
「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
将所有微服务组件添加依赖连接到 Jaeger Collector 。
因 Jaeger 部署在另外一个应用,需要进入 组件 -> 依赖 -> 添加 Jaeger Collector 依赖,就可以在当前应用的拓扑图看到 Jaeger Collector 组件,剩下的组件都可通过拓扑图编辑模式进行依赖连接。更新或重启所有微服务组件使依赖关系生效。
「Jaeger 拓扑图生成」
拓扑图默认不会生成,使用 spark-dependencies 组件生成拓扑图数据,这是一个 Spark 作业,它从存储中收集 span,分析服务之间的链接,并将它们存储起来以供以后在 UI 中展示。请参阅 Jaeger Spark dependencies。
spark-dependencies 组件占用资源较大,不使用时可关闭,需要生成拓扑图数据时将其启动即可。
有了 APM 系统后,使我们可以更好的分析业务性能、排查故障等。
结合 Rainbond 作为基座不管是 Spring Cloud还是 Jaeger 或其他 APM 都可以很方便、快捷的部署使用,从繁琐的部署、配置中解放出来,让我们更多的关注于业务层。
留言与评论(共有 0 条评论) “” |