Sanic 支持
编辑Sanic 支持
编辑将 Elastic APM 集成到您的 Sanic 项目只需要几个简单的步骤。
安装
编辑使用 pip 安装 Elastic APM Agent
$ pip install elastic-apm
或者将 elastic-apm
添加到您项目的 requirements.txt
文件中。
设置
编辑要设置 Agent,您需要使用适当的设置对其进行初始化。
设置可以通过环境变量或初始化参数进行配置。
您可以在 配置 页面中找到所有可用设置的列表。
要使用环境变量为您的应用程序初始化 Agent
from sanic import Sanic from elasticapm.contrib.sanic import ElasticAPM app = Sanic(name="elastic-apm-sample") apm = ElasticAPM(app=app)
要使用初始化参数和 Sanic 的配置基础架构配置 Agent
# 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)
使用
编辑配置 Agent 后,它将自动跟踪事务并捕获 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!')
性能指标
编辑如果您按照上述说明操作,Agent 将安装我们的 instrumentation 中间件,该中间件将处理通过您应用程序的所有请求。这将测量响应时间,以及所有支持技术的详细性能数据。
由于 asyncio
驱动程序通常与其同步对应程序分开,因此所有驱动程序都需要特定的 instrumentation。目前对异步驱动程序的支持非常有限。
忽略特定路由
编辑您可以使用 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 Client 使用
编辑Sanic 的贡献的 APM Client 还提供了一些可扩展的方式来配置选择性行为,以增强作为 APM 跟踪的事务的一部分而收集的信息。
为了启用此行为,APM Client 中间件提供了一些回调函数,您可以利用这些函数来简化将附加上下文生成到正在收集的跟踪中的过程。
回调名称 | 回调调用格式 | 预期返回格式 | 是否异步 |
---|---|---|---|
transaction_name_callback |
transaction_name_callback(request) |
字符串 |
否 |
user_context_callback |
user_context_callback(request) |
(用户名字符串,用户邮箱字符串,用户 ID 字符串) |
是 |
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 版本
编辑支持的 Sanic 和 Python 版本列表可以在我们的 支持的技术 页面上找到。
Elastic APM 仅在使用 Python 3.7+ 时支持 asyncio