分散式呼叫鏈跟蹤工具Jaeger?兩分鐘極速體驗

程式設計師欣宸發表於2021-12-16

歡迎訪問我的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標準中,一個工作的邏輯單元被稱為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開發系列》所需的環境和版本資訊,這樣的版本搭配能正常執行,供您參考:
  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

相關文章