Starlette/FastAPI 支持
编辑Starlette/FastAPI 支持编辑
将 Elastic APM 集成到您的 Starlette 项目只需几个简单的步骤。
安装编辑
使用 pip 安装 Elastic APM 代理
$ pip install elastic-apm
或将 elastic-apm
添加到您项目的 requirements.txt
文件中。
设置编辑
要设置代理,您需要使用适当的设置对其进行初始化。
可以通过环境变量或作为初始化参数来配置设置。
您可以在配置页面中找到所有可用设置的列表。
要使用环境变量为您的应用程序初始化代理,请将 ElasticAPM 中间件添加到您的 Starlette 应用程序中
from starlette.applications import Starlette from elasticapm.contrib.starlette import ElasticAPM app = Starlette() app.add_middleware(ElasticAPM)
BaseHTTPMiddleware
会中断 contextvar
传播,如此处所述。这意味着 ElasticAPM 中间件必须位于最终中间件列表中任何 BaseHTTPMiddleware
的上方。如果您重复调用 add_middleware
,请最后添加 ElasticAPM 中间件。如果您传入的是中间件列表,则 ElasticAPM 应该是该列表中的第一个。
要使用初始化参数配置代理
from starlette.applications import Starlette from elasticapm.contrib.starlette import make_apm_client, ElasticAPM apm = make_apm_client({ 'SERVICE_NAME': '<SERVICE-NAME>', 'SECRET_TOKEN': '<SECRET-TOKEN>', 'SERVER_URL': '<SERVER-URL>', }) app = Starlette() app.add_middleware(ElasticAPM, client=apm)
FastAPI编辑
由于 FastAPI 支持 Starlette 中间件,因此将代理与 FastAPI 一起使用与 Starlette 几乎完全相同
from fastapi import FastAPI from elasticapm.contrib.starlette import ElasticAPM app = FastAPI() app.add_middleware(ElasticAPM)
用法编辑
配置代理后,它将自动跟踪事务并捕获 Starlette 中的未捕获异常。
通过调用 capture_exception
捕获任意异常
try: 1 / 0 except ZeroDivisionError: apm.capture_exception()
使用 capture_message
记录通用消息
apm.capture_message('hello, world!')
性能指标编辑
如果您已按照上述说明进行操作,则代理已安装我们的检测中间件,该中间件将处理通过您的应用程序的所有请求。这将测量响应时间,以及所有受支持技术的详细性能数据。
由于 asyncio
驱动程序通常与其同步对应程序分开,因此所有驱动程序都需要特定的检测。目前对异步驱动程序的支持非常有限。
忽略特定路由编辑
您可以使用 TRANSACTIONS_IGNORE_PATTERNS
配置选项来忽略特定路由。给定的列表应该是与事务名称匹配的正则表达式列表
apm = make_apm_client({ # ... 'TRANSACTIONS_IGNORE_PATTERNS': ['^GET /secret', '/extra_secret'] # ... })
这将忽略使用 GET /secret
路由的任何请求以及包含 /extra_secret
的任何请求。
支持的 Starlette 和 Python 版本编辑
您可以在我们的支持的技术页面上找到受支持的 Starlette 和 Python 版本列表。
Elastic APM 仅在使用 Python 3.7+ 时才支持 asyncio