分布式调用链跟踪工具Jaeger?两分钟极速体验
欢迎访问我的GitHub
https://github.com/zq2599/blog_demos
内容:所有原创文章分类汇总及配套源码,涉及Java、Docker、Kubernetes、DevOPS等;
关于Jaeger开发系列(java版)
- 本文属于《Jaeger开发系列》,是第一篇,该系列是欣宸原创,旨在通过实战演练与Java程序员一起熟练掌握Jaeger相关的技术,使之在分布式系统中发挥巨作用;
- 全系列由浅入深、从基本功能到深度定制都会涉及,希望这个系列能伴随您一同成长,为您提供一些及时的参考;
本篇概览
- 作为《Jaeger开发系列》的开篇,咱们先花一分钟了解Jaeger的基本概念,再用三十秒时间完成部署,然后三十秒体验基本功能,以最轻松的姿势和心情开启Java程序员的Jaeger之旅;
- 以下是我这里执行本篇实战的环境和软件:
- 电脑:MacBook Pro,macOS Big Sur (11.5.2)---您也可以使用Linux,如Ubuntu或者CentOS
- Docker:20.10.7
- JDK:8u301
- 接下来先从Jaeger的基本概念开始吧;
关于Jaeger
- Jaeger是一套开源的分布式调用链跟踪方案,由Uber创建,后来捐赠给CNCF(云原生计算基金会),官网地址:https://www.jaegertracing.io/

Jaeger的后端、Web端、本地库等都遵守了OpenTracing standard
在OpenTracing标准中,一个工作的逻辑单元被称为span,它有自己的名称、开始时间、时长、标签等特性,如下图:

- 下面是官方给出的Jaeger架构图(这是没有使用kafka做缓冲的版本),最上层一行表明Jaeger支持的语言类型,可见应用使用了SDK后,业务的span被送到jaeger-agent(通过UDP协议),然后被推送到jaeger-collector,数据被jaeger-collector写入数据库(DB),这样,用户通过浏览器访问jaeger-query,就能看到详细的调用链追踪结果了,另外,红色虚线是控制信号(例如采样相关的参数):

关于本次体验
- 今天的体验环境由以下内容构成,有个名为jaeger-service-provider的web应用,其web接口被访问时,它会操作redis,然后将本次服务的数据上报到Jaeger,然后咱们就可以在Jaeger上看到本次服务的详细情况了:

极速部署jaeger体验环境
请确保您的docker-compose功能可以正常使用
创建文件docker-compose.yml,内容如下:
version: '3.0'
networks:
jaeger-tutorials-net:
driver: bridge
ipam:
config:
- subnet: 192.168.1.0/24
gateway: 192.168.1.1
services:
jaeger:
image: jaegertracing/all-in-one:1.26
container_name: jaeger
#选择网络
networks:
- jaeger-tutorials-net
#选择端口
ports:
- 16686:16686/tcp
restart: always
redis:
image: redis:6.2.5
container_name: redis
#选择网络
networks:
- jaeger-tutorials-net
restart: always
jaeger-service-provider:
image: bolingcavalry/jaeger-service-provider:0.0.1
container_name: jaeger-service-provider
#选择端口
ports:
- 8088:8080/tcp
#选择网络
networks:
- jaeger-tutorials-net
restart: always
- 在docker-compose.yml所在目录执行命令docker-compose up -d,会立即开始下载三个镜像,然后启动服务:
Creating network "jaeger-service-provider_jaeger-tutorials-net" with driver "bridge"
Creating jaeger ... done
Creating jaeger-service-provider ... done
Creating redis ... done
- 至此,jaeger体验环境已经部署完毕,咱们来体验吧
体验jaeger功能
- 用浏览器访问:http://localhost:16686/search ,映入眼帘的Jaeger页面如下,熟悉golang的同学都清楚图标意味着什么(对于欣宸这样的Java铁粉,多想看到那里是一杯热咖啡啊...):

- 从前面的架构图得知,jaeger-query就是当前页面的server服务,它自己也通过Jaeger上报了自身被使用的情况,如下图所示,终于见到了trace和span:

- 接下来可以调用咱们部署的服务了,浏览器访问:http://localhost:8088/hello ,正常情况下收到返回的时间戳:

- 再刷新Jaeger的页面,如下图所示,咱们的服务和trace名称都赫然在列,看来上报数据生效了,点击下图右上角红框中的圆点:

- 点击那个红点后,进入对应trace的详情页,如下图:

- 至此,咱们完成了Jaeger的入门知识学习和实际体验,如果您对内部的实现细节感兴趣,敬请期待接下来的开发实战揭秘,欣宸原创,必不辜负您
环境信息
- 最后附上《Jaeger开发系列》所需的环境和版本信息,这样的版本搭配能正常运行,供您参考:
- 电脑:MacBook Pro,macOS Big Sur (11.5.2)
- Docker:20.10.7
- JDK:8u301
- Jaeger:1.26
- opentracing-spring-jaeger-cloud-starter:3.3.1
- Spring Boot:2.4.2
- Spring Cloud:2020.0.1
- Redis:6.2.5
你不孤单,欣宸原创一路相伴
欢迎关注公众号:程序员欣宸
微信搜索「程序员欣宸」,我是欣宸,期待与您一同畅游Java世界...
https://github.com/zq2599/blog_demos
分布式调用链跟踪工具Jaeger?两分钟极速体验的更多相关文章
- 部署你的分布式调用链跟踪框架skywalking
使用docker-compose 一键部署你的分布式调用链跟踪框架skywalking https://www.cnblogs.com/huangxincheng/p/9666930.html 一旦你 ...
- 使用docker-compose 一键部署你的分布式调用链跟踪框架skywalking
一旦你的程序docker化之后,你会遇到各种问题,比如原来采用的本地记日志的方式就不再方便了,虽然你可以挂载到宿主机,但你使用 --scale 的话,会导致 记录日志异常,所以最好的方式还是要做日志中 ...
- istio分布式调用链Jaeger
1.安装 kubectl apply -n istio-system -f https://raw.githubusercontent.com/jaegertracing/jaeger-kuberne ...
- idou老师教你学Istio 22 : 如何用istio实现调用链跟踪
大家都知道istio可以帮助我们实现灰度发布.流量监控.流量治理等一些功能. 每一个功能都帮助我们在不同场景中实现不同的业务.那么其中比如流量监控这种复杂的功能Istio是如何让我们在不同的应用中实现 ...
- 三分钟极速体验:Java版人脸检测
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- 调用链系列一、Zipkin架构介绍、Springboot集承(springmvc,HttpClient)调用链跟踪、Zipkin UI详解
1.Zipkin是什么 Zipkin分布式跟踪系统:它可以帮助收集时间数据,解决在microservice架构下的延迟问题:它管理这些数据的收集和查找:Zipkin的设计是基于谷歌的Google Da ...
- Spring Cloud 微服务六:调用链跟踪Spring cloud sleuth +zipkin
前言:随着微服务系统的增加,服务之间的调用关系变得会非常复杂,这给运维以及排查问题带来了很大的麻烦,这时服务调用监控就显得非常重要了.spring cloud sleuth实现了对分布式服务的监控解决 ...
- spring cloud 学习(8) - sleuth & zipkin 调用链跟踪
业务复杂的微服务架构中,往往服务之间的调用关系比较难梳理,一次http请求中,可能涉及到多个服务的调用(eg: service A -> service B -> service C... ...
- 前端人员必会工具-apipost两分钟上手(2分钟玩转apipost)
本文通过简单介绍如何利用ApiPost调试接口和快速的生成接口文档,让您初步体验ApiPost的魅力! 1. API写完想要测试?试试模拟发送一次请求 新建接口,我想模拟发送请求如下 curl --l ...
随机推荐
- 菜鸡的Java笔记 第二十三 - java 抽象类的概念
abstractClass 抽象类的概念 1.抽象类的基本定义 2.抽象类的使用原则 不会抽象类与接口,java = 没学 ...
- JDBC连接MySQL数据库代码
******************************************************1********************************************* ...
- VC练习一
1 #include<windows.h> 2 #include<stdio.h> 3 LRESULT CALLBACK WinSunProc(HWND hwnd,UINT u ...
- 理解ASP.NET Core - 错误处理(Handle Errors)
注:本文隶属于<理解ASP.NET Core>系列文章,请查看置顶博客或[点击此处查看全文目录](https://www.cnblogs.com/xiaoxiaotank/p/151852 ...
- java8特性表达式
public static void main(String[] args) { JFrame jframe = new JFrame("My JFrame"); JButton ...
- DirectX12 3D 游戏开发与实战第九章内容(下)
仅供个人学习使用,请勿转载.谢谢! 9.纹理贴图 学习目标 学习如何将局部纹理映射到网格三角形中 探究如何创建和启用纹理 学会如何通过纹理过滤来创建更加平滑的图像 探索如何使用寻址模式来进行多次贴图 ...
- Oracle基础入门
说明:钓鱼君昨天在网上找到一份oracle项目实战的文档,粗略看了一下大致内容,感觉自己很多知识不够扎实,便跟着文档敲了一遍,目前除了机械性代码没有实现外,主要涉及知识:创建表空间.创建用户.给用户赋 ...
- (转载)java中判断字符串是否为数字的方法的几种方法
java中判断字符串是否为数字的方法: 1.用JAVA自带的函数 public static boolean isNumeric(String str){ for (int i = 0; i < ...
- 【模板】无源汇有上下界可行流(网络流)/ZOJ2314
先导知识 网络最大流 题目链接 https://vjudge.net/problem/ZOJ-2314 题目大意 多组数据,第一行为数据组数 \(T\). 对于每一组数据,第一行为 \(n,m\) 表 ...
- 省时省心DTM,广告转化无难题
内容来源:华为开发者大会2021 HMS Core 6 App Services技术论坛,主题演讲<华为分析服务,助您打造数智化运营闭环方案>. 演讲嘉宾:华为消费者云服务 分析产品总监 ...