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

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

靠人终究靠不住

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

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

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

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

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

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

jaeger架构

直接引入一张官网的图

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奥,否则调用链数据可能会长这样:

RPC框架如何集成:一般RPC框架都会提供一些扩展点让使用者来做一些框架集成的事情,拿dubbo来说可以采用Filter和隐示传参的方式来实现请求上下文的传递;

外部调用如何集成:有一些调用是基于sdk或者httpclient调用的,这类调用我们如何植入调用链的逻辑呢?这里不得不佩服AspectJ的强大了,为了避免你少走弯路我还会推荐你去了解一下“spectj-maven-plugin”这个maven插件,什么?不是基于spring的那一堆注解就可以了吗,为什么还要引入maven来干这事。估计你还需要去了解一下运行期植入和编译器植入的相关概念以及适用场景。

上线

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

使用jaeger-quey来检索调用链

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

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

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

3.查看调用链详情

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

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

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

来我的公众号与我交流

jaeger 是很么软件_jaeger 使用初探相关推荐

  1. jaeger 是很么软件_JAEGER软件

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  2. jaeger 是很么软件_开源分布式跟踪系统Jaeger介绍 (六步快速上手)

    前期准备 具体步骤 1.运行Jaeger # UDP端口6831是用来接收compact thrift协议的跟踪数据的 # HTTP端口16686是用来显示Jaeger界面的 docker run - ...

  3. 图书管理系统1.0(当然是很简low的系统,没有华丽界面,但是很锻炼软件开发能力,只用到c++的面向对象知识)

    这个代码有很大的问题就是在继承这一方面做的不好,没有考虑继承的实际情况,实际上,如果写一个通归所有功能的大类,然后再让不同的对象去继承的话,存在一个问题,有的功能我实际生活中没法用也不应该用(比如普通 ...

  4. 5款非常好用,劲爆得很的软件

    1.快速看图--Honeyview HoneyView是一个轻量级图像浏览工具.HoneyView官方中文版功能强大,看图快速,通过优化手段能快速对图片进行缩放和滤镜处理,HoneyView支持流行的 ...

  5. 软件设计的第一性原理:结构化抽象

    软件设计的第一性原理,是结构化抽象.术生于道,技术生于原理. 引语 所谓的第一性原理,就是无论使用什么方法论,都无法绕过的那最最基础的部分.无论是 DDD 设计,还是面向模式的架构设计,或 微服务架构 ...

  6. 读书笔记-云原生应用初探

    一.源起 最早在大学时代使用VMware安装Ubuntu学习Linux,12年实习使用kvm虚拟机搭建测试环境,14-15年那会儿docker有点火,开始基于docker搭建测试环境.使用体验是VMw ...

  7. 【分布式系统篇】链路追踪之Jaeger安装使用入门

    目录 1. 前世 2. Jaeger与Zipkin 2.1 关于Jaeger 3. 安装 4. 使用 4.1 启动一个应用 4.2 发送请求 4.2 Jaeger查看服务架构 4.3 查看一个trac ...

  8. 春节后找工作被面试的经历,好岗位分享给还在找工作中的软件开发爱好者们...

    这几年在杭州东蓝科技工作还是很快乐.很开心,跟同事之间也很融洽,但是由于老婆怀孕了.再加上有严重的过敏鼻炎.同时眼睛也变得越来越脆弱了,很容易被感染通红通红的很恐怖,再也受不了天天出差做软件项目了,去 ...

  9. iphone有什么软件可以修改html,现在iPhone组装机太可怕,修改数据即可变原装?...

    最近朋友花2000多元买了一台iPhone 12白色,这么便宜的价格确实惊艳到了我,全新的现在低配也要5000多元,二手普遍在4000多元,那么这么低的价格是怎么做到的呢? 有一个和iPhone关系很 ...

最新文章

  1. C#语言与面向对象技术(6)
  2. 浅析SEO优化中标签的作用?
  3. 中国房地产行业调查分析与发展前景研究报告2022年版
  4. css实现透明度(兼容IE6、火狐等)
  5. 【更新】PPT管理控件Aspose.Slides V17.5发布 | 附下载
  6. 4源代码的下载和编译
  7. 渝粤教育 陕西师范大学 《证券投资学[专升本]》作业
  8. DataGridView控件的使用 1207
  9. 移动设备应用程序中支持多个屏幕大小和 DPI 值
  10. Windows Phone开发(15):资源
  11. [Step By Step]SAP HANA PAL多项式回归预测分析Polynomial Regression编程实例FORECASTWITHPOLYNOMIALR(预测)...
  12. refprop物性库_Refprop9.1_Refprop(制冷剂物性查询软件)下载 v9.1免费版 附教程 - 121下载站...
  13. 基于51单片机的8x8x8LED光立方设计
  14. 国内外你知道的设计网站!给你的设计找点灵感!
  15. Win7系统自带 计算器 详细使用方法
  16. MacBook如何安装双系统?
  17. IIS部署,发布网站
  18. 戴尔通过F12一次性引导菜单刷新BIOS
  19. 如何做好DevOps Secrets管理
  20. 在Linux操作系统中,eclipse建立快捷方式

热门文章

  1. 争当 2% 的人——《智能时代 · 大数据与智能革命重新定义未来》读书笔记
  2. 【Android】用Android写个自己发短信的APP
  3. 火车头本地文档批量翻译工具
  4. 在线查看网页的源文件
  5. pdf编辑软件哪个好 如何在pdf上修改
  6. 【偏振原理3】圆偏振光
  7. P2600 [ZJOI2008]瞭望塔(半平面交)
  8. Moosefs分布式文件系统的搭建与维护
  9. W: 由于文件‘git_2.17.1-1ubuntu0.8.dsc‘无法被用户‘_apt‘访问,已脱离沙盒并提权为根用户来进行下载。 - pkgAcquire::Run (13: 权限不够)
  10. 【2015年第4期】面向国防安全的网络大数据分析与应用系统