当前位置: 首页 > 后端技术 > Java

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

时间:2023-04-01 18:05:42 Java

随着微服务架构的普及,客户端发起的一个请求可能会涉及到多个或者N个服务,导致我们的监控和排查变得更加复杂。比如:某条业务线的接口调用服务器时快时慢,需要查看各个服务的日志进行分析,并调动各个服务的开发人员共同检查。这种检查既费时又费力。对于ToB的业务,有时候日志获取不到,很难!因此,需要一种能够帮助理解系统行为和分析性能问题的工具,以便在出现故障时能够快速定位并解决问题,这就是APM(ApplicationPerformanceMonitor)。流行的APM开源工具有很多,例如:Zipkin、Skywalking、Pinpoint、Jaeger等,本文将主要介绍Jaeger。Jaeger是Uber技术团队发布的开源分布式跟踪系统,用于基于微服务的分布式系统的监控和故障排除:分布式上下文传播、事务监控根本原因、服务依赖分析性能/延迟优化OpenTracing启发的数据模型多存储后端:Cassandra,弹性搜索,内存。SystemTopologyMapServicePerformanceMonitoring(SPM)AdaptiveSamplingJaegerArchitectureComponentDescriptionJaegerClientJaegerClientSDKJaegerAgent收集Client数据JaegerCollector收集JaegerAgent数据,有pull/push两种方式DBStorageCollector需要一个存储后端,Collector获取的数据将存储在Elasticsearch或Cassandra中。Spark作业用于生成拓扑图UI数据。JaegerQueryService&UI负责从Storage中查询数据并提供API和UI。如何集成到Rainbond上?1.集成OpenTelemetryClient:在v1.36之前,JaegerClient是一个基于OpenTracingAPI的客户端库。JaegerClient与JaegerAgent一起使用,将span发送给JaegerCollector。v1.36后弃用。使用OpenTelemetry而不是JaegerClient和JaegerAgent,有关详细信息,请参阅Jaeger和OpenTelemetry。OpenTelemetry是非侵入式的,只需在Java进程启动时添加javaagent,例如:java-javaagent:path/to/opentelemetry-javaagent.jar-jarmyapp.jar。然后在Rainbond上,可以通过插件将OpenTelemetryjavaagent下载到组件中,修改启动命令即可。2.连接Jaeger-Collector:通过依赖将所有安装了OpenTelemetryjavaagent插件的微服务组件连接到JaegerCollector。实践步骤实践中会使用SpringCloudPig进行演示,Gitee:https://gitee.com/zhangbigqi/pigRainbond部署请参考文档快速安装。一、SpringCloudPig源码部署通过源码部署SpringCloudPig微服务框架就不详细介绍部署,请参考:SpringCloudPig部署教程SpringCloudPig视频教程二、OpenTelemetryPlugin安装安装opentelemetry-java-agent从应用商店初始化插件。该插件的作用是将opentelemetry-javaagent.jar下载到微服务组件中,在Java启动项中指定即可。团队视图->插件->从AppStore安装插件->搜索opentelemetry-java-agent并安装它。3、部署Jaeger在开源应用商店搜索Jaeger,安装到指定应用中。四、OpenTelemetryAgent插件配置1.打开OpenTelemetryAgent插件。以pig-gateway为例,在组件->插件中打开opentelemetry-java-agent插件,更新组件即可生效。微服务中的其他组件需要打开插件更新或重启组件才能生效。2.ConfigureenvironmentvariablesConfigureenvironmentvariablesforallmicroservicecomponents.变量名变量值说明OTEL_TRACES_EXPORTERjaeger选择JaegerexporterOTEL_EXPORTER_JAEGER_ENDPOINThttp://127.0.0.1:14250JaegerCollectorgRPCendpointOTEL_EXPORTER_JAEGER_TIMEOUT10000超时时间(毫秒)OTEL_METRICS_EXPORTERnoneMetrics导出器JAVA_OPTS-javaagent:/agent/opentelemetry-javaagent.jarJava启动参数可使用配置组系统一次配置并应用于所有组件。3、配置组件服务名为所有微服务组件配置环境变量OTEL_SERVICE_NAME,配置组件的Jaeger服务名,如:OTEL_SERVICE_NAME=pig-gatewayOTEL_SERVICE_NAME=pig-auth5、建立依赖,对所有的添加依赖连接到JaegerCollector的微服务组件。因为Jaeger是部署在另一个应用中,所以需要去Components->Dependencies->AddJaegerCollectorDependency,可以在当前应用的拓扑图中看到JaegerCollector组件,其余组件可以通过拓扑图编辑模式。更新或重启所有微服务组件,使依赖生效。6、Jaeger快速使用接入SpringCloudPigUI登录并使其生成数据。访问Jaeger-Query的16686端口,开启外部服务访问JaegerUI。在JaegerSearch页面搜索微服务Pig-gateway的TracesService:选择微服务的组件Operation:选择操作类型,例如:GETPOST,interface,class.....Tags:根据响应头过滤,例如:http.status_code=200error=trueLookback:选择时间MaxDuration:最大持续时间;最短持续时间:最短持续时间。限制结果:限制返回结果的数量。找到Pig-gatewayHTTPPOST的Traces并包含pig-authSpan并进入,可以看到服务之间的层层调用和接口的响应时间都清晰的展示出来了,方便我们查看是哪个服务is通话速度慢或者通话有问题。Jaegertopologymapgeneration默认不生成拓扑图,使用spark-dependencies组件生成拓扑图数据,这是一个Spark作业,从存储中收集span,分析服务之间的链接,并存储起来以备后用显示在UI中.请参阅JaegerSpark依赖项。spark-dependencies组件占用资源较多,不用时可以关闭。可以在需要生成拓扑图数据时启动。最后,有了APM系统,我们可以更好的分析业务性能、排查问题等。结合Rainbond为基础,无论是SpringCloud、Jaeger还是其他APM,都可以方便快捷的进行部署,让我们从繁琐的部署中解放出来,配置,让我们更专注于业务层。