Jaeger知識點補充

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

歡迎訪問我的GitHub

https://github.com/zq2599/blog_demos

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

《Jaeger實戰(Java版)》系列全文

  1. 《分散式呼叫鏈跟蹤工具Jaeger?兩分鐘極速體驗》
  2. 《Jaeger開發入門(java版)》
  3. 《Java應用日誌如何與Jaeger的trace關聯》
  4. 《Jaeger的客戶端取樣配置》
  5. 《極簡!一個註解就能建立Jaeger的Span》
  6. 《Jaeger知識點補充》

本篇概覽

  • 本文是《Jaeger實戰(Java版)》系列的終篇,一同學習和實戰是一段愉快的時光,如今終於到了說再見的時候,最後將平時積累的三個有用的知識點奉上,既作為結尾,也希望能為您的開發帶來幫助:
  • 修改服務名
  • 關閉span上報的日誌
  • all-in-one映象的持久化儲存

    修改服務名

  • 在Jaeger的web頁面上看到的服務名,預設用的是spring.application.name配置的值,如果您不滿意,可以自行定製,配置項是<font color="blue">opentracing.jaeger.service-name</font>,如下圖紅框所示,我這裡改成了中文名:

在這裡插入圖片描述

  • 執行起來後,在Jaeger的web頁面展示如下圖紅框:

在這裡插入圖片描述

關閉span上報的日誌

  • 以下是一段日誌,只有前面兩行是我們們寫程式碼的時候用<font color="blue">log.info</font>方法列印出來的,剩下的四行都是Jaeger SDK輸出的
00:18:12 [http-nio-8080-exec-1] INFO  c.b.j.p.c.HelloController [traceId=49476da841cd354b spanId=b595271a496cb0cb sampled=true] start hello from [1632269892342]
00:18:12 [http-nio-8080-exec-1] INFO  c.b.j.p.c.HelloController [traceId=49476da841cd354b spanId=b595271a496cb0cb sampled=true] hello
00:18:12 [http-nio-8080-exec-1] INFO  i.j.i.r.LoggingReporter [traceId=49476da841cd354b spanId=b595271a496cb0cb sampled=true] Span reported: 49476da841cd354b:991b82965543f8da:e6333b3a1c14f544:1 - mockBizChild
00:18:12 [http-nio-8080-exec-1] INFO  i.j.i.r.LoggingReporter [traceId=49476da841cd354b spanId=b595271a496cb0cb sampled=true] Span reported: 49476da841cd354b:e6333b3a1c14f544:b595271a496cb0cb:1 - mockBiz
00:18:13 [http-nio-8080-exec-1] INFO  i.j.i.r.LoggingReporter [traceId=49476da841cd354b spanId=b595271a496cb0cb sampled=true] Span reported: 49476da841cd354b:45e256ba3deed679:b595271a496cb0cb:1 - SET
00:18:13 [http-nio-8080-exec-1] INFO  i.j.i.r.LoggingReporter [traceId= spanId= sampled=] Span reported: 49476da841cd354b:b595271a496cb0cb:6322077c0edb62cc:1 - hello
  • 上述日誌中,Jaeger SDK輸出的那些內容,一般情況下用處不大,可以用以下紅框中的配置關閉掉:

在這裡插入圖片描述

  • 再次執行,日誌如下,清淨了:
00:12:42 [http-nio-8080-exec-10] INFO  c.b.j.p.c.HelloController [traceId=6430f498d5623103 spanId=9e4a4c8bb326352b sampled=true] start hello from [1632269562868]
00:12:42 [http-nio-8080-exec-10] INFO  c.b.j.p.c.HelloController [traceId=6430f498d5623103 spanId=9e4a4c8bb326352b sampled=true] hello

all-in-one映象的持久化儲存

  • 用all-in-one映象部署Jaeger服務端,特點是簡單快捷,適合在開發和除錯階段使用,下面一個命令即可完成部署:
docker run -d \
--name jaeger \
-e COLLECTOR_ZIPKIN_HTTP_PORT=9411 \
-p 5775:5775/udp \
-p 6831:6831/udp \
-p 6832:6832/udp \
-p 5778:5778 \
-p 16686:16686 \
-p 14268:14268 \
-p 14269:14269 \
-p 9411:9411 jaegertracing/all-in-one:1.26
  • 上述命令雖然能讓Jaeger後端正常工作,但有個缺陷:資料儲存在記憶體中,容器重啟後資料不可恢復,為了解決這個問題,可以在all-in-one映象的容器上開啟badger(一種嵌入式儲存),並且將badger的資料儲存在宿主機上,完整的命令如下所示,其中<font color="blue">/Users/will/temp/202109/28/data</font>是我的電腦的磁碟目錄,請您按照自己實際情況修改:
docker run -d \
--name jaeger \
-e COLLECTOR_ZIPKIN_HTTP_PORT=9411 \
-e SPAN_STORAGE_TYPE=badger \
-e BADGER_EPHEMERAL=false \
-e BADGER_DIRECTORY_VALUE=/badger/data \
-e BADGER_DIRECTORY_KEY=/badger/key \
-v /Users/will/temp/202109/28/data:/badger \
-p 5775:5775/udp \
-p 6831:6831/udp \
-p 6832:6832/udp \
-p 5778:5778 \
-p 16686:16686 \
-p 14268:14268 \
-p 14269:14269 \
-p 9411:9411 jaegertracing/all-in-one:1.26
  • 此時再重啟或者重建Jaeger容器,歷史資料都會完整儲存
  • 如果您是在docker-compose.yml中配置all-in-one映象,那麼要注意yml檔案中無法輸入布林型屬性值,需要參考以下方式處理:
  • 首先在docker-compose.yml所在目錄建立檔案<font color="blue">.env</font>,內容如下:
BADGER_FLAG=true
  • 最後在docker-compose.yml中,Jaeger容器的配置如下,使用了<font color="blue">.env</font>檔案中的配置項,另外,我這裡的本地儲存用的是新建的volumes,您可以根據自己的需要改成前面那種本地磁碟對映:
version: '3.0'

networks:
  jaeger-tutorials-net:
    driver: bridge
    ipam:
      config:
        - subnet: 192.168.1.0/24
          gateway: 192.168.1.1

volumes:
  # 用於儲存badger的資料
  badger-data:

services:
  jaeger:
    image: jaegertracing/all-in-one:1.26
    container_name: jaeger
    # 處理時鐘漂移帶來的計算出負數的問題
    command: ["--query.max-clock-skew-adjustment=100ms"]
    # 選擇網路
    networks:
      - jaeger-tutorials-net
    # 持久化,請選擇適合自己的目錄
    environment:
      SPAN_STORAGE_TYPE: badger
      BADGER_EPHEMERAL: ${BADGER_FLAG}
      BADGER_DIRECTORY_VALUE: /badger/data
      BADGER_DIRECTORY_KEY: /badger/key
    # badger儲存在本地卷(或者對映到本地某個目錄)
    volumes:
      - badger-data:/badger
    #選擇埠
    ports:
      - 16686:16686/tcp
    restart: always
  • 至此,《Jaeger實戰(Java版)》系列終於到了說再見的時候,希望能夠為您的系統建設提供有用的參考,我們們繼續相約在下一個欣宸原創系列吧

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

  1. Java系列
  2. Spring系列
  3. Docker系列
  4. kubernetes系列
  5. 資料庫+中介軟體系列
  6. DevOps系列

歡迎關注公眾號:程式設計師欣宸

微信搜尋「程式設計師欣宸」,我是欣宸,期待與您一同暢遊Java世界...
https://github.com/zq2599/blog_demos

相關文章