Flask 支持
编辑Flask 支持
编辑轻松为您的 Flask 项目设置 Elastic APM,您可以通过多种方式对其进行调整以满足您的需求。
安装
编辑使用 pip 安装 Elastic APM Agent
$ 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
文件中。
设置
编辑要设置 Agent,您需要使用适当的设置对其进行初始化。
设置可以通过环境变量、应用程序设置或初始化参数进行配置。
您可以在配置页面中找到所有可用设置的列表。
要使用环境变量为您的应用程序初始化 Agent
from elasticapm.contrib.flask import ElasticAPM app = Flask(__name__) apm = ElasticAPM(app)
要使用应用程序设置中的 ELASTIC_APM
配置 Agent
from elasticapm.contrib.flask import ElasticAPM app.config['ELASTIC_APM'] = { 'SERVICE_NAME': '<SERVICE-NAME>', 'SECRET_TOKEN': '<SECRET-TOKEN>', } apm = ElasticAPM(app)
最后一种选择是使用设置作为参数初始化 Agent
from elasticapm.contrib.flask import ElasticAPM apm = ElasticAPM(app, service_name='<APP-ID>', secret_token='<SECRET-TOKEN>')
调试模式
编辑请注意,只有当您的应用程序没有处于Flask 调试模式时,错误和事务才会发送到 APM 服务器。
要强制 Agent 在应用程序处于调试模式时发送数据,请将 ELASTIC_APM
字典中的 DEBUG
值设置为 True
app.config['ELASTIC_APM'] = { 'SERVICE_NAME': '<SERVICE-NAME>', 'SECRET_TOKEN': '<SECRET-TOKEN>', 'DEBUG': True }
动态构建应用程序?
编辑您可以使用 Agent 的 init_app
hook 动态添加应用程序
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
使用
编辑配置 Agent 后,它将自动跟踪事务并捕获 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()
额外数据
编辑除了 Agent 默认记录的内容外,您还可以发送其他信息
@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 Agent 将自动将您的 Celery 任务的错误和性能数据发送到 APM 服务器。
性能指标
编辑如果您已按照上述说明操作,则 Agent 已连接到正确的信号,并且应该正在报告性能指标。
忽略特定路由
编辑您可以使用TRANSACTIONS_IGNORE_PATTERNS
配置选项来忽略特定路由。给定的列表应为与事务名称匹配的正则表达式列表
app.config['ELASTIC_APM'] = { ... 'TRANSACTIONS_IGNORE_PATTERNS': ['^OPTIONS ', '/api/'] ... }
这将忽略使用 OPTIONS
方法的任何请求以及包含 /api/
的任何请求。
与 RUM Agent 集成
编辑为了将浏览器中的性能测量与 Flask 应用程序中的测量相关联,您可以通过使用后端请求的跟踪 ID 和跨度 ID 配置 RUM(真实用户监控)Agent 来提供帮助。我们提供了一个方便的模板上下文处理器,它将所有必要的信息添加到您的模板上下文中。
初始化 ElasticAPM
时会自动安装上下文处理器。剩下要做的就是像这样更新初始化 RUM Agent 的调用(这可能发生在您的基本模板中)
elasticApm.init({ serviceName: "my-frontend-service", pageLoadTraceId: "{{ apm["trace_id"] }}", pageLoadSpanId: "{{ apm["span_id"]() }}", pageLoadSampled: {{ apm["is_sampled_js"] }} })
有关更多信息,请参阅JavaScript RUM Agent 文档。