随着微服务架构的流行,客户端发起的一次请求可能需要涉及到多个或 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 微服务框架就不详细介绍部署了,请参阅:

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 都可以很方便、快捷的部署使用,从繁琐的部署、配置中解放出来,让我们更多的关注于业务层。

分布式链路追踪Jaeger + 微服务Pig在Rainbond上的实践分享的更多相关文章

  1. 微服务性能分析|Pyroscope 在 Rainbond 上的实践分享

    随着微服务体系在生产环境落地,也会伴随着一些问题出现,比如流量过大造成某个微服务应用程序的性能瓶颈.CPU利用率高.或内存泄漏等问题.要找到问题的根本原因,我们通常都会通过日志.进程再结合代码去判断根 ...

  2. 一文详解|Go 分布式链路追踪实现原理

    在分布式.微服务架构下,应用一个请求往往贯穿多个分布式服务,这给应用的故障排查.性能优化带来新的挑战.分布式链路追踪作为解决分布式应用可观测问题的重要技术,愈发成为分布式应用不可缺少的基础设施.本文将 ...

  3. 解读Go分布式链路追踪实现原理

    摘要:本文将详细介绍分布式链路的核心概念.架构原理和相关开源标准协议,并分享我们在实现无侵入 Go 采集 Sdk 方面的一些实践. 本文分享自华为云社区<一文详解|Go 分布式链路追踪实现原理& ...

  4. 微服务架构学习与思考(09):分布式链路追踪系统-dapper论文学习

    一.技术产生的背景 1.1 背景 先来了解一下分布式链路追踪技术产生的背景. 在现在这个发达的互联网世界,互联网的规模越来越大,比如 google 的搜索,Netflix 的视频流直播,淘宝的购物等. ...

  5. Go微服务框架go-kratos实战05:分布式链路追踪 OpenTelemetry 使用

    一.分布式链路追踪发展简介 1.1 分布式链路追踪介绍 关于分布式链路追踪的介绍,可以查看我前面的文章 微服务架构学习与思考(09):分布式链路追踪系统-dapper论文学习(https://www. ...

  6. NET Core微服务之路:SkyWalking+SkyApm-dotnet分布式链路追踪系统的分享

    对于普通系统或者服务来说,一般通过打日志来进行埋点,然后再通过elk或splunk进行定位及分析问题,更有甚者直接远程服务器,直接操作查看日志,那么,随着业务越来越复杂,企业应用也进入了分布式服务化的 ...

  7. 基于Dapper的分布式链路追踪入门——Opencensus+Zipkin+Jaeger

    微信搜索公众号 「程序员白泽」,进入白泽的编程知识分享星球 最近做了一些分布式链路追踪有关的东西,写篇文章来梳理一下思路,或许可以帮到想入门的同学.下面我将从原理到demo为大家一一进行讲解,欢迎评论 ...

  8. 个推基于 Zipkin 的分布式链路追踪实践

    作者:个推应用平台基础架构高级研发工程师 阿飞   01业务背景   随着微服务架构的流行,系统变得越来越复杂,单体的系统被拆成很多个模块,各个模块通过轻量级的通信协议进行通讯,相互协作,共同实现系统 ...

  9. .NET Core 中的日志与分布式链路追踪

    目录 .NET Core 中的日志与分布式链路追踪 .NET Core 中的日志 控制台输出 非侵入式日志 Microsoft.Extensions.Logging ILoggerFactory IL ...

随机推荐

  1. 小米 pro 笔记本双硬盘设置引导盘

    功能键 F2 进入 BIOS F12 进入 Boot 选项 步骤 小米 Pro 默认是开启了 UEFI,如果 Boot 选项没有显示出期望的系统盘,那么就是这个系统盘没有 UEFI 分区,按照这个文档 ...

  2. 143. Reorder List - LeetCode

    Question 143. Reorder List Solution 题目大意:给一个链表,将这个列表分成前后两部分,后半部分反转,再将这两分链表的节点交替连接成一个新的链表 思路 :先将链表分成前 ...

  3. iOS全埋点解决方案-数据存储

    前言 ​ SDK 需要把事件数据缓冲到本地,待符合一定策略再去同步数据. 一.数据存储策略 ​ 在 iOS 应用程序中,从 "数据缓冲在哪里" 这个纬度看,缓冲一般分两种类型. 内 ...

  4. ethtools-网卡适配器管理

    查看网卡适配器配置信息,并且我们可以通过它修改网卡适配器的双工模式. 1.安装Ethtools [root@localhost ~]# yum -y install ethtools 2.命令语法 语 ...

  5. 如何为Java面试准备项目经验

    1 提出问题 应届生朋友或Java程序员在找Java方面的工作时,一定会需要准备Java项目经验,但事实上不少求职者,是没有项目经验,或者只具有开源社区等的学习项目经验,这样的话,就很有可能在面试时无 ...

  6. keil的重复定义问题:Error: L6200E: Symbol F6x8 multiply defined

    keil的重复定义问题:Error: L6200E: Symbol F6x8 multiply defined 在驱动oled和电容按键都遇到了,所以记录这个错误,以后再遇到也不至于手足无措 Keil ...

  7. JAVA - error(错误)和exception(异常)有什么区别?

    JAVA - error(错误)和exception(异常)有什么区别? error 表示恢复不是不可能但很困难的情况下的一种严重问题.比如说内存溢出.不可能指望程序能处理这样的情况. excepti ...

  8. 开源流程引擎osworkflow、jbpm、activiti、flowable、camunda哪个好?

    市场上比较有名的开源流程引擎有osworkflow.jbpm.activiti.flowable.camunda.其中:Jbpm4.Activiti.Flowable.camunda四个框架同宗同源, ...

  9. 【Redis】客观下线

    在sentinelHandleRedisInstance函数中,如果是主节点,需要做如下处理: void sentinelHandleRedisInstance(sentinelRedisInstan ...

  10. bitmap技术解析:redis与roaringBitmap

    bitmap的表象意义是,使用一个01标识位来表示是否的状态,可以达到节省空间和高效判定的效果.在我们的实际工作中,也有着许多的应用场景,相信了解bitmap定会给你带来一些额外的收获. 1. bit ...