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 版本

编辑

支持的 StarlettePython 版本列表可在我们的支持的技术页面上找到。

Elastic APM 仅在使用 Python 3.7+ 时支持 asyncio