Server - 使用 FastAPI + OpenTelemetry + Zipkin 搭建 Python 服务

欢迎关注我的CSDN:https://spike.blog.csdn.net/

本文地址:https://spike.blog.csdn.net/article/details/147312078

免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。


FastAPI 是轻松地构建快速、高效的 API,没有内置用于监控和追踪的工具。OpenTelemetry 通过提供强大的工具,填补这一空白。具体包括:

  • 分布式追踪:追踪请求在不同服务和组件之间的流转路径,帮助理解系统行为。
  • 指标收集:收集与导出关键指标,以了解性能,例如请求时长、吞吐量和错误率。
  • 日志集成:将日志与追踪和指标相关联,更好地进行调试和故障排查。

将 OpenTelemetry 与 FastAPI 集成,可以实时监控基于 FastAPI 的应用程序,从而提高可靠性,帮助尽早发现性能问题。

Hera 是分布式任务调度系统,专为大数据任务调度设计。
OTLPOpenTelemetry Protocol 的缩写,用于收集和传输遥测数据(如指标、日志和追踪信息)的协议。
span 用于描述一个操作的执行过程,如函数调用、数据库查询、HTTP 请求等,记录操作的开始结束时间、操作名称、与操作属性以及操作结果。

安装 FastAPI,用于构建 Python 的 API 服务:

bash 复制代码
pip install fastapi
pip show fastapi
pip install uvicorn
uvicorn main:app --host 0.0.0.0 --port 1919

安装 OpenTelemetry,用于追踪 API 服务:

bash 复制代码
pip install opentelemetry-api
pip install opentelemetry-sdk
pip install opentelemetry-instrumentation-fastapi
pip install opentelemetry-exporter-otlp
pip install opentelemetry-exporter-zipkin

安装 Zipkin (for Mac):

bash 复制代码
brew install zipkin
zipkin

参考:GitHub - openzipkin/zipkin

启动 Zipkin,如下:

构建带有 Router 的简单 FastAPI 服务:

python 复制代码
from fastapi import FastAPI
from opentelemetry import trace
from opentelemetry.exporter.zipkin.json import ZipkinExporter
from opentelemetry.instrumentation.fastapi import FastAPIInstrumentor
from opentelemetry.sdk.resources import Resource
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import SimpleSpanProcessor

import add_router
import user_router

# 创建一个 TracerProvider
resource = Resource.create({"service.name": "my-python-service"})
tracer_provider = TracerProvider(resource=resource)  # trace 的 服务名称
trace.set_tracer_provider(tracer_provider)

# 创建一个 ZipkinExporter
zipkin_exporter = ZipkinExporter(
    endpoint="http://localhost:9411/api/v2/spans",
)

# 添加一个 SpanProcessor 来处理生成的 Span
tracer_provider.add_span_processor(SimpleSpanProcessor(zipkin_exporter))

app = FastAPI()
app.include_router(add_router.router)
app.include_router(user_router.router)

FastAPIInstrumentor.instrument_app(app)

@app.get("/")
async def root():
    tracer = trace.get_tracer(__name__)
    with tracer.start_as_current_span("root_request"):
        return {"message": "Hello, FastAPI with OpenTelemetry!"}

Router 代码,如下:

python 复制代码
# add_router.py
from fastapi import APIRouter
from opentelemetry import trace

router = APIRouter(prefix="/add", tags=["addition"])

@router.get("/numbers")
async def adding_numbers():
    tracer = trace.get_tracer(__name__)
    with tracer.start_as_current_span("adding_numbers_request"):
        return {"message": "We are in add page-numbers."}

@router.get("/strings")
async def adding_strings():
    tracer = trace.get_tracer(__name__)
    with tracer.start_as_current_span("adding_strings_request"):
        return {"message": "We are in add page-strings."}

# user_router.py
from fastapi import APIRouter
from opentelemetry import trace

router = APIRouter(prefix="/user", tags=["user"])

@router.get("/{user_id}")
async def read_user(user_id: int):
    tracer = trace.get_tracer(__name__)
    with tracer.start_as_current_span("read_user_request"):
        return {"user_id": user_id}

async 修饰的函数是 异步函数,调用时不会立即执行,而是返回异步对象,异步通过 事件循环(Event Loop) 调度,实现非阻塞的并发执行。

使用 uvicorn 启动服务,即:

bash 复制代码
uvicorn main:app --host 0.0.0.0 --port 1919

依次访问:

bash 复制代码
http://0.0.0.0:1919/
http://0.0.0.0:1919/add/strings

在 Zipkin 中,点击 RUN QUERY,显示如下:

详细信息:

参考文档:

相关推荐
Source.Liu2 分钟前
【学Python自动化】 2. Windows Python 解释器使用笔记
windows·python·自动化
竹子_235 分钟前
《零基础入门AI:YOLOv2算法解析》
人工智能·python·算法·yolo
MThinker2 小时前
k230 按键拍照后,将摄像头拍照的1920*1080分辨率的图片以jpg文件格式,保存到板载TF存储卡的指定文件夹目录中
python·嵌入式硬件·智能硬件·micropython·canmv·k230
Tipriest_3 小时前
求一个整数x的平方根到指定精度[C++][Python]
开发语言·c++·python
蓝倾9764 小时前
淘宝/天猫店铺商品搜索API(taobao.item_search_shop)返回值详解
android·大数据·开发语言·python·开放api接口·淘宝开放平台
跟橙姐学代码4 小时前
配置文件这么多格式,Python到底该怎么选?一文带你梳理七种常见用法
前端·python·ipython
进阶的小菜菜5 小时前
LeetCode100-240搜索二维矩阵Ⅱ
python·矩阵
BatyTao6 小时前
Selenium自动化测试快速入门指南
python·selenium·测试工具
Source.Liu7 小时前
【学Python自动化】 1. Python 安装与配置完全指南 (Windows)
windows·python·自动化
蒋星熠7 小时前
Python API接口实战指南:从入门到精通
开发语言·分布式·python·设计模式·云原生·性能优化·云计算