Flask 支持
编辑Flask 支持编辑
为您的 Flask 项目设置 Elastic APM 很容易,并且您可以通过多种方式进行调整以满足您的需求。
安装编辑
使用 pip 安装 Elastic APM 代理
$ pip install "elastic-apm[flask]"
或将 elastic-apm[flask]
添加到您的项目的 requirements.txt
文件中。
对于 apm-server 6.2+,请确保使用 2.0 或更高版本的 elastic-apm
。
如果您将 Flask 与 uwsgi 一起使用,请确保 启用线程。
如果您看到错误日志中提到 psutil not found
,您可以使用 pip install psutil
安装 psutil
,或将 psutil
添加到您的 requirements.txt
文件中。
设置编辑
要设置代理,您需要使用适当的设置对其进行初始化。
设置是通过环境变量、应用程序的设置或初始化参数进行配置的。
您可以在 配置 页面中找到所有可用设置的列表。
要使用环境变量为您的应用程序初始化代理
from elasticapm.contrib.flask import ElasticAPM app = Flask(__name__) apm = ElasticAPM(app)
要使用应用程序设置中的 ELASTIC_APM
配置代理
from elasticapm.contrib.flask import ElasticAPM app.config['ELASTIC_APM'] = { 'SERVICE_NAME': '<SERVICE-NAME>', 'SECRET_TOKEN': '<SECRET-TOKEN>', } apm = ElasticAPM(app)
最后一种选择是使用设置作为参数来初始化代理
from elasticapm.contrib.flask import ElasticAPM apm = ElasticAPM(app, service_name='<APP-ID>', secret_token='<SECRET-TOKEN>')
调试模式编辑
请注意,只有当您的应用程序 没有 处于 Flask 调试模式 时,错误和事务才会发送到 APM 服务器。
要强制代理在应用程序处于调试模式时发送数据,请将 ELASTIC_APM
字典中 DEBUG
的值设置为 True
app.config['ELASTIC_APM'] = { 'SERVICE_NAME': '<SERVICE-NAME>', 'SECRET_TOKEN': '<SECRET-TOKEN>', 'DEBUG': True }
动态构建应用程序?编辑
您可以使用代理的 init_app
钩子来动态添加应用程序
from elasticapm.contrib.flask import ElasticAPM apm = ElasticAPM() def create_app(): app = Flask(__name__) apm.init_app(app, service_name='<SERVICE-NAME>', secret_token='<SECRET-TOKEN>') return app
用法编辑
配置代理后,它将自动跟踪事务并在 Flask 中捕获未捕获的异常。如果您想发送其他事件,ElasticAPM Flask 中间件对象上提供了一些快捷方式,方法是引发异常或记录通用消息。
通过调用 capture_exception
捕获任意异常
try: 1 / 0 except ZeroDivisionError: apm.capture_exception()
使用 capture_message
记录通用消息
apm.capture_message('hello, world!')
将日志发送到 Elasticsearch编辑
此功能已弃用,将在未来版本中删除。
请参阅我们的 日志 文档,了解其他支持将日志发送到 Elasticsearch 的方法。
请注意,您始终可以使用 capture_exception
和 capture_message
将异常和消息发送到 APM 服务器。
from elasticapm import get_client @app.route('/') def bar(): try: 1 / 0 except ZeroDivisionError: get_client().capture_exception()
额外数据编辑
除了代理默认记录的内容外,您还可以发送其他信息
@app.route('/') def bar(): try: 1 / 0 except ZeroDivisionError: app.logger.error('Math is hard', exc_info=True, extra={ 'good_at_math': False, } ) )
Celery 任务编辑
Elastic APM 代理将自动将 Celery 任务中的错误和性能数据发送到 APM 服务器。
性能指标编辑
如果您已按照上述说明操作,代理已连接到正确的信号,并且应该正在报告性能指标。
忽略特定路由编辑
您可以使用 TRANSACTIONS_IGNORE_PATTERNS
配置选项来忽略特定路由。给定的列表应为正则表达式列表,这些正则表达式与事务名称匹配
app.config['ELASTIC_APM'] = { ... 'TRANSACTIONS_IGNORE_PATTERNS': ['^OPTIONS ', '/api/'] ... }
这将忽略使用 OPTIONS
方法的任何请求以及包含 /api/
的任何请求。
与 RUM 代理集成编辑
要将浏览器中的性能测量与 Flask 应用程序中的测量相关联,您可以通过使用后端请求的跟踪 ID 和跨度 ID 配置 RUM(真实用户监控)代理来提供帮助。我们提供了一个方便的模板上下文处理器,它将所有必要的信息添加到模板的上下文中。
初始化 ElasticAPM
时会自动安装上下文处理器。剩下的就是更新初始化 RUM 代理的调用(这可能发生在您的基本模板中),如下所示
elasticApm.init({ serviceName: "my-frontend-service", pageLoadTraceId: "{{ apm["trace_id"] }}", pageLoadSpanId: "{{ apm["span_id"]() }}", pageLoadSampled: {{ apm["is_sampled_js"] }} })
有关更多信息,请参阅 JavaScript RUM 代理文档。