分佈式調用鏈跟蹤工具Jaeger?兩分鐘極速體驗

歡迎訪問我的GitHub

https://github.com/zq2599/blog_demos

內容:所有原創文章分類彙總及配套源碼,涉及Java、Docker、Kubernetes、DevOPS等;

關於Jaeger開發系列(java版)

  • 本文屬於《Jaeger開發系列》,是第一篇,該系列是欣宸原創,旨在通過實戰演練與Java程序員一起熟練掌握Jaeger相關的技術,使之在分佈式系統中發揮鉅作用;
  • 全系列由淺入深、從基本功能到深度定製都會涉及,希望這個系列能伴隨您一同成長,爲您提供一些及時的參考;

本篇概覽

  • 作爲《Jaeger開發系列》的開篇,咱們先花一分鐘瞭解Jaeger的基本概念,再用三十秒時間完成部署,然後三十秒體驗基本功能,以最輕鬆的姿勢和心情開啓Java程序員的Jaeger之旅;
  • 以下是我這裏執行本篇實戰的環境和軟件:
  1. 電腦:MacBook Pro,macOS Big Sur (11.5.2)---您也可以使用Linux,如Ubuntu或者CentOS
  2. Docker:20.10.7
  3. 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

你不孤單,欣宸原創一路相伴

  1. Java系列
  2. Spring系列
  3. Docker系列
  4. kubernetes系列
  5. 數據庫+中間件系列
  6. DevOps系列

歡迎關注公衆號:程序員欣宸

微信搜索「程序員欣宸」,我是欣宸,期待與您一同暢遊Java世界... https://github.com/zq2599/blog_demos

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章