歡迎訪問我的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