在K8s中搭建Jaeger — 找出Fastapi應用程式中的效能弱點

Jaeger from Dev to Production

Chestermo
10 min readApr 8, 2021
Jaeger in cloud native landscape

Tracing是應用程式監控可視化的三大支柱之一。Tracing的目的是跟踪程式的執行過程與資料流動。在微服務架構盛行的現今,Distributed Tracing可以協助我們對效能弱點有更好的掌握,而透過Jaeger,可以讓我們以更少的成本,系統性的搭建Tracing的架構。

本篇文章將介紹如何在K8s中,透過all-in-one jaeger image搭建開發版本的jaeger,以及介紹在生產環境中分別搭建每個組件,最後以Fastapi這個熱門的python後端框架,找出應用程式的效能弱點。那我們開始吧~

大綱

  • Jaeger簡介
  • 在K8s中搭建Elasticsearch
  • 在K8s中搭建all-in-one Jaeger server
  • 在K8s中分別搭建Jaeger的各個組件
  • Fastapi application整合Open-telemetry
  • 總結

Jaeger簡介

Jaeger是Uber在2015年創建的項目,2017年9月被加入CNCF孵化項目之列,並在2019年10月畢業,是CNCF孵化隊伍中第7個畢業的項目。下圖是Jaeger的架構圖,這這個章節,我將介紹Jaeger的幾個重要組件,以及基本的邏輯單元。

jaeger data flow structure

Jaeger的重要組件

  • Client:這是Jaeger的客戶端,通常是整合在你的應用程式中,例如flask或Fastapi。
  • Agent:Daemon Process,監聽通過 UDP 發送的span,batch型式送到collector。通常在K8s中透過sidecar或者DaemonSet實現。
  • Collector:用pipeline處理收集到的spans,驗證trace — 加上索引— 資料轉型 — 儲存到指定的存儲,支持sampling設置,通常會透過sampling設置減少壓力。
  • Storage:默認是透過memory,也提供badge…

--

--

Chestermo
Chestermo

Written by Chestermo

Graduated from NTU and worked as a Python backend engineer in Taipei.Passionate about Learning new technologies. github: https://github.com/Chestermozhao