Sanic 支持编辑

将 Elastic APM 集成到您的 Sanic 项目中只需几个简单的步骤。

安装编辑

使用 pip 安装 Elastic APM 代理

$ pip install elastic-apm

或将 elastic-apm 添加到您项目的 requirements.txt 文件中。

设置编辑

要设置代理,您需要使用适当的设置对其进行初始化。

这些设置可以通过环境变量或初始化参数进行配置。

您可以在配置页面中找到所有可用设置的列表。

要使用环境变量初始化应用程序的代理

from sanic import Sanic
from elasticapm.contrib.sanic import ElasticAPM

app = Sanic(name="elastic-apm-sample")
apm = ElasticAPM(app=app)

要使用初始化参数和 Sanic 的配置基础结构配置代理

# Create a file named external_config.py in your application
# If you want this module based configuration to be used for APM, prefix them with ELASTIC_APM_
ELASTIC_APM_SERVER_URL = "https://serverurl.apm.com:443"
ELASTIC_APM_SECRET_TOKEN = "sometoken"
from sanic import Sanic
from elasticapm.contrib.sanic import ElasticAPM

app = Sanic(name="elastic-apm-sample")
app.config.update_config("path/to/external_config.py")
apm = ElasticAPM(app=app)

使用编辑

配置代理后,它将自动跟踪事务并捕获 sanic 中的未捕获异常。

通过调用 capture_exception 捕获任意异常

from sanic import Sanic
from elasticapm.contrib.sanic import ElasticAPM

app = Sanic(name="elastic-apm-sample")
apm = ElasticAPM(app=app)

try:
    1 / 0
except ZeroDivisionError:
    apm.capture_exception()

使用 capture_message 记录通用消息

from sanic import Sanic
from elasticapm.contrib.sanic import ElasticAPM

app = Sanic(name="elastic-apm-sample")
apm = ElasticAPM(app=app)

apm.capture_message('hello, world!')

性能指标编辑

如果您已按照上述说明操作,则代理已安装我们的检测中间件,该中间件将处理通过您的应用程序的所有请求。这将测量响应时间,以及所有受支持技术的详细性能数据。

由于 asyncio 驱动程序通常与其同步对应程序分开,因此所有驱动程序都需要特定的检测。目前对异步驱动程序的支持非常有限。

忽略特定路由编辑

您可以使用 TRANSACTIONS_IGNORE_PATTERNS 配置选项来忽略特定路由。给定的列表应该是与事务名称匹配的正则表达式列表

from sanic import Sanic
from elasticapm.contrib.sanic import ElasticAPM

app = Sanic(name="elastic-apm-sample")
apm = ElasticAPM(app=app, config={
    'TRANSACTIONS_IGNORE_PATTERNS': ['^GET /secret', '/extra_secret'],
})

这将忽略使用 GET /secret 路由的任何请求以及包含 /extra_secret 的任何请求。

扩展的 Sanic APM 客户端使用编辑

Sanic 贡献的 APM 客户端还提供了一些可扩展的方法来配置选择性行为,以增强作为 APM 跟踪的事务的一部分收集的信息。

为了启用此行为,APM 客户端中间件提供了一些回调函数,您可以利用这些函数来简化将其他上下文生成到正在收集的跟踪中的过程。

回调名称 回调调用格式 预期返回格式 是否异步

transaction_name_callback

transaction_name_callback(request)

字符串

user_context_callback

user_context_callback(request)

(username_string, user_email_string, userid_string)

custom_context_callback

custom_context_callback(request) 或 custom_context_callback(response)

dict(str=str)

label_info_callback

label_info_callback()

dict(str=str)

支持的 Sanic 和 Python 版本编辑

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

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