找jaeger_CQB初探

找jaeger_CQB初探导读:有一天我们接到这样一条客诉“你们的收银软件最近特别慢,严重影响我们的收银效率,再不解决我们就不用了”,我相信大家应该都遇到过这种问题,即使现在没遇到,将来一定会遇到的,那遇到了怎么办呢?就这个话

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

导读:有一天我们接到这样一条客诉“你们的收银软件最近特别慢,严重影响我们的收银效率,再不解决我们就不用了”,我相信大家应该都遇到过这种问题,即使现在没遇到,将来一定会遇到的,那遇到了怎么办呢?就这个话题我们今天一起来聊一聊。

关键词:分布式,链路追踪

 

靠人终究靠不住

不知道大家是怎么处理开头提到的那种问题的呢?最简单粗暴的办法就是把相关人员集中到一个会议室里面对数据,怎么对呢?

  客户端开发人员:我查了日志,客户端的请求过程一共用了5s,请求是从几点几分几秒发起的,你们查下服务端的日志;

  交易系统开发人员:我这边是几点几分几秒收到的请求,交易系统一共花了4s多一些,其中调用支付网关花了将近4s,网关那边看下日志吧;

  网关开发人员:我这边是几点几分几秒收到的请求,网关一共花了3s多一点,大部分时间都花在了调用第三方上;

估计大多数人最开始都是这么处理此类问题的,简单粗暴。但如果三天两头给你来这么一下子你还受得了吗?每天给你几百个上千个订单号让你对数据,你还能抽时间写代码吗?估计连带薪上厕所的时间都没了吧。最后这个问题可能传到了领导那里,领导一般喜欢要全局报表数据,你怎么给他出这个报表?是不是束手无策,突然有点想换工作了,哈哈。我们还真是接到过这种需求,一堆人在那里awk然后就没有然后了。

“当一件事情成为一件常态,那意味着我们可能需要一件工具来解放自己了,靠人终究是靠不住的”,就在这种背景之下我们决定引入一个调用链追踪的工具来解放我们,也就是今天的主角jaeger。关于jaeger的说明网上很多,推荐去官网系统的了解一下 https://www.jaegertracing.io,我这里只是把搭建过程和使用上的一些心得分享出来和大家一起交流。

 jaeger架构

直接引入一张官网的图

找jaeger_CQB初探

jaeger组件介绍:

jaeger-client:jaeger 的客户端,实现了opentracing协议;

jaeger-agent:jaeger client的一个代理程序,client将收集到的调用链数据发给agent,然后由agent发给collector;

jaeger-collector:负责接收jaeger client或者jaeger agent上报上来的调用链数据,然后做一些校验,比如时间范围是否合法等,最终会经过内部的处理存储到后端存储;

jaeger-query:专门负责调用链查询的一个服务,有自己独立的UI;

jaeger-ingester:中文名称“摄食者”,可用从kafka读取数据然后写到jaeger的后端存储,比如Cassandra和Elasticsearch;

spark-job:基于spark的运算任务,可以计算服务的依赖关系,调用次数等;

 

其中jaeger-collector和jaeger-query是必须的,其余的都是可选的,我们没有采用agent上报的方式,而是让客户端直接通过endpoint上报到collector。

 

 

搭建jaeger

因为我们的应用服务都是采用容器部署的,所以我们的jaeger服务也沿用以往的风格。

docker启动jaeger-collector

docker run -d –rm -p 14268:14268 -p 14269:14269 -e SPAN_STORAGE_TYPE=elasticsearch -e ES_SERVER_URLS=http://10.200.46.229:9200 jaegertracing/jaeger-collector:1.11

 

docker启动jaeger-query

docker run -d –rm -p 16686:16686 -p 16687:16687 -e SPAN_STORAGE_TYPE=elasticsearch -e ES_SERVER_URLS=http://10.200.46.229:9200 jaegertracing/jaeger-query:1.11

 

应用程序接入

接下来就是如何让调用链条上的各端接入了,这里只需要把握一个原则就好,“尽量让接入方无感知,没有侵入性”,这里简单说下我们的接入方式:

  • 客户端接入:客户端采用okhttp 拦截器的方式接入,使用请求头传递trace上下文,这里还可以和okhttp 的EventListener配合起来获取一些网络层面的指标,比如dns解析时间,连接发起时间等等;
  • web程序接入:web端采用springmvc拦截器方式接入,从http请求头里面来提取trace上下文,然后基于上下文构建一个springmvc的span,记得在请求结束的时候finish奥,否则调用链数据可能会长这样:  找jaeger_CQB初探
  • RPC框架如何集成:一般RPC框架都会提供一些扩展点让使用者来做一些框架集成的事情,拿dubbo来说可以采用Filter和隐示传参的方式来实现请求上下文的传递;
  • 外部调用如何集成:有一些调用是基于sdk或者httpclient调用的,这类调用我们如何植入调用链的逻辑呢?这里不得不佩服AspectJ的强大了,为了避免你少走弯路我还会推荐你去了解一下“spectj-maven-plugin”这个maven插件,什么?不是基于spring的那一堆注解就可以了吗,为什么还要引入maven来干这事。估计你还需要去了解一下运行期植入和编译器植入的相关概念以及适用场景。

具体你要把Span包装成什么样就靠你自由发挥了,但是不要太离谱,建议参考下这个https://opentracing.io/docs/overview/spans/

上线

上线前问自己几个问题,我的拦截器写的是否健壮,抛异常了不会影响正常调用吧?是否需要评估一下数据量?别一上线把后端存储打死了。

 

使用jaeger-quey来检索调用链

  1. 先选择一个service然后针对这个service做一些复杂的检索,比如针对某个标签,操作的耗时等;  

      找jaeger_CQB初探

 

        2.如果有满足条件的数据右边会展示出结果

找jaeger_CQB初探

      上面图中分别展示了两条支付的调用链路,一条成功了,一条失败了,你可能会问:jaeger是怎么判断成功失败的呢?简单来说就是通过特殊的标签,直接甩给你一篇opentracing的文档看完就懂了 https://github.com/opentracing/specification/blob/master/semantic_conventions.md

       3.查看调用链详情

 找jaeger_CQB初探

   4.查看依赖关系,以及调用次数

找jaeger_CQB初探

      也许你服务也搭好了,调用链数据也看到了,但就是看不到这个调用关系图,别急你去这溜达一圈就知道了https://www.jaegertracing.io/docs/1.11/faq/

      好吧,今天就到这,大周六的晚上抽一点时间来梳理一下最近的工作,还希望对各位有一点点的帮助。

 

 

来我的公众号与我交流

 

找jaeger_CQB初探

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/167049.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Webpack插件按需加载组件_webpack懒加载

    Webpack插件按需加载组件_webpack懒加载因为Vue是SPA,所以首页第一次加载时会把所有的组件以及组件相关的资源全都加载了。这样就会导致首页加载时加载了许多首页用不上的资源,造成网站首页打开速度变慢,降低用户体验。为了解决上面问题,我们需要对Vue实现组件懒加载。本文将对懒加载的实现原理以及使用进行讲解。

    2022年10月6日
    0
  • Android Studio安装教程(超级详细)「建议收藏」

    Android Studio安装教程(超级详细)「建议收藏」AndroidStudio安装教程(超级详细)欢迎使用Markdown编辑器获取AndroidStudio安装AndroidStudio欢迎使用Markdown编辑器你好!这是你第一次使用Markdown编辑器所展示的欢迎页。如果你想学习如何使用Markdown编辑器,可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。获取AndroidStudio安装前提(系统安装了jdk,并且版本在1.8以上)官网下载AndroidDevTools下载AndroidStudio

    2022年7月15日
    12
  • leetcode数组汇总_leetcode经典题

    leetcode数组汇总_leetcode经典题原题链接给定一个由整数数组 A 表示的环形数组 C,求 C 的非空子数组的最大可能和。在此处,环形数组意味着数组的末端将会与开头相连呈环状。(形式上,当0 <= i < A.length 时 C[i] = A[i],且当 i >= 0 时 C[i+A.length] = C[i])此外,子数组最多只能包含固定缓冲区 A 中的每个元素一次。(形式上,对于子数组 C[i], C[i+1], …, C[j],不存在 i <= k1, k2 <= j 其中 k1 % A.leng

    2022年8月8日
    3
  • 如何让css文字垂直居中(上)

    如何让css文字垂直居中(上)其实可以很容易地实现 CSS 文字的水平居中 但是有时候我们需要将文字垂直居中 除了表格实现这种 CSS 文字的垂直居中之外 还有很多其他的方式注意 下面的 demo 只适用于现代浏览器 不兼容 IE 的低版本和其他非主流浏览器 实现 css 文字垂直居中的 8 种方法如下 1 使用绝对定位和负外边距对块级元素进行垂直居中 css 垂直居中效果 css 垂直居中实现代码 这个方法兼容性不错 但是有一个小缺点 必须提前知道被居中块级元素的尺寸 否则无法准确实现垂直居中 2 使用绝对定位和 transform 代码如下

    2025年7月7日
    0
  • Modelsim下载 安装 与 和谐教程

    Modelsim下载 安装 与 和谐教程一.下载ModelsimSE-642019.2-windows网盘分享:链接:https://pan.baidu.com/s/1BASOJ1DYZYrK9Ot_BRs7HA提取码:md4d二.安装下载完压缩包后解压,安装按下图所示步骤进行。注意,完全退出杀毒软件如360,否则可能安装/和谐失败。自此安装完成,下面进行和谐。三.和谐运行patch.dll会生成LICENSE.TXT文件,将此文件另存到modelsim安装路径下。建立用户环境变量:.

    2022年6月15日
    33
  • 计算机的发展史英语作文,求一篇关于计算机发展史的英语作文[通俗易懂]

    计算机的发展史英语作文,求一篇关于计算机发展史的英语作文[通俗易懂]共回答了13个问题采纳率:92.3%TheoldestcalculatingtoolisabacusthatwasinventedbyChineseseveralthousandyearsago.Sincethenhumanbeingshadtriedtomakeamachinetocalculateformanyyears.Howeve…

    2022年10月7日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号