0

分布式调用链跟踪工具Jaeger?两分钟极速体验

 2 years ago
source link: https://segmentfault.com/a/1190000041125589
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

欢迎访问我的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标准中,一个工作的逻辑单元被称为<font color="blue">span</font>,它有自己的名称、开始时间、时长、标签等特性,如下图:

在这里插入图片描述

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

在这里插入图片描述

关于本次体验

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

在这里插入图片描述

极速部署jaeger体验环境

  • 请确保您的docker-compose功能可以正常使用
  • 创建文件<font color="blue">docker-compose.yml</font>,内容如下:
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所在目录执行命令<font color="blue">docker-compose up -d</font>,会立即开始下载三个镜像,然后启动服务:
Creating network "jaeger-service-provider_jaeger-tutorials-net" with driver "bridge"
Creating jaeger                  ... done
Creating jaeger-service-provider ... done
Creating redis                   ... done
  • 至此,jaeger体验环境已经部署完毕,咱们来体验吧

体验jaeger功能

  • 用浏览器访问:<font color="blue">http://localhost:16686/search</font> ,映入眼帘的Jaeger页面如下,熟悉golang的同学都清楚图标意味着什么(对于欣宸这样的Java铁粉,多想看到那里是一杯热咖啡啊...):

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

  • 至此,咱们完成了Jaeger的入门知识学习和实际体验,如果您对内部的实现细节感兴趣,敬请期待接下来的开发实战揭秘,欣宸原创,必不辜负您
  • 最后附上《Jaeger开发系列》所需的环境和版本信息,这样的版本搭配能正常运行,供您参考:
  1. 电脑:MacBook Pro,macOS Big Sur (11.5.2)
  2. Docker:20.10.7
  3. JDK:8u301
  4. Jaeger:1.26
  5. opentracing-spring-jaeger-cloud-starter:3.3.1
  6. Spring Boot:2.4.2
  7. Spring Cloud:2020.0.1
  8. Redis:6.2.5

你不孤单,欣宸原创一路相伴

欢迎关注公众号:程序员欣宸

微信搜索「程序员欣宸」,我是欣宸,期待与您一同畅游Java世界...
https://github.com/zq2599/blog_demos


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK