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