故障排除
编辑故障排除
编辑以下是有关 Python Agent 故障排除和调试的一些资源和技巧。
简单修复
编辑在尝试其他任何操作之前,请查看以下部分,以确保 Agent 配置正确。这不是一个详尽的列表,而是一个用户经常遇到的常见问题的列表。
调试模式
编辑大多数框架都支持调试模式。通常,此模式适用于非生产环境,并提供详细的错误消息和潜在敏感数据的日志记录。由于这些安全问题,默认情况下,如果应用程序处于调试模式,Agent 将不会收集跟踪。
您可以使用 DEBUG
配置来覆盖此行为。
请注意,Agent 的配置应在创建任何 ElasticAPM
对象之前进行。
app = Flask(__name__) app.config["ELASTIC_APM"] = {"DEBUG": True} apm = ElasticAPM(app, service_name="flask-app")
用于指标的 psutil
编辑要在非 Linux 系统上获取 CPU 和系统指标,必须安装 psutil
。如果未安装,Agent 应该在启动时自动显示警告,但有时此警告可能会被抑制。安装 psutil
后,Agent 应该会收集指标并将其发送到 APM 服务器。
python3 -m pip install psutil
凭据问题
编辑为了让 Agent 将数据发送到 APM 服务器,它可能需要 API_KEY
或 SECRET_TOKEN
。仔细检查您的 APM 服务器设置,并确保您的凭据配置正确。此外,请检查 SERVER_URL
是否正确。
Django check
和 test
编辑与 Django 一起使用时,Agent 提供两个管理命令来帮助调试常见问题。请访问 Django 故障排除部分 以获取更多信息。
Agent 日志记录
编辑要使 Agent 记录更多数据,只需要一个附加到 elasticapm
记录器或根记录器的 Handler。
请注意,如果您将 Handler 附加到根记录器,则还需要显式设置 elasticapm
记录器的日志级别。
import logging apm_logger = logging.getLogger("elasticapm") apm_logger.setLevel(logging.DEBUG)
Django
编辑记录 Agent 更多数据的最简单方法是向 elasticapm
记录器添加一个控制台日志记录 Handler。这是一个(非常简化的)示例
LOGGING = { 'handlers': { 'console': { 'level': 'DEBUG', 'class': 'logging.StreamHandler' } }, 'loggers': { 'elasticapm': { 'level': 'DEBUG', 'handlers': ['console'] }, }, }
Flask
编辑Flask 建议使用 dictConfig()
来设置日志记录。如果您使用此格式,则为 Agent 添加日志记录将与 上面的 Django 说明 非常相似。
否则,您可以使用 下面的通用说明。
通用说明
编辑创建控制台 Handler 并将其添加到 elasticapm
记录器很容易。
import logging elastic_apm_logger = logging.getLogger("elasticapm") console_handler = logging.StreamHandler() console_handler.setLevel(logging.DEBUG) elastic_apm_logger.addHandler(console_handler)
您也可以只将控制台 Handler 添加到根记录器。这会将该 Handler 应用于所有模块的所有日志消息。
import logging logger = logging.getLogger() console_handler = logging.StreamHandler() console_handler.setLevel(logging.DEBUG) logger.addHandler(console_handler)
有关 Handler 的更多详细信息(以及有关如何使用 Formatter 格式化日志的信息),请参阅 python 日志记录文档。
禁用 Agent
编辑如果 Agent 意外导致生产应用程序中断,您可以在进行故障排除时禁用 Agent。
如果您有权访问 动态配置,则可以通过将 recording
设置为 false
来禁用事件的记录。当从支持的来源在运行时更改时,无需重新启动应用程序。
如果这不起作用,或者您无权访问动态配置,则可以通过将 enabled
设置为 false
来禁用 Agent。您需要重新启动应用程序才能使更改生效。