故障排除编辑

以下是一些用于对 Python 代理进行故障排除和调试的资源和技巧。

简单修复编辑

在尝试任何其他操作之前,请先阅读以下部分,以确保代理配置正确。这不是一个详尽的列表,而是一个用户经常遇到的常见问题列表。

调试模式编辑

大多数框架都支持调试模式。通常,此模式适用于非生产环境,并提供详细的错误消息和可能敏感数据的日志记录。由于这些安全问题,默认情况下,如果应用程序处于调试模式,则代理不会收集跟踪。

您可以使用 DEBUG 配置覆盖此行为。

请注意,代理的配置应在创建任何 ElasticAPM 对象之前进行

app = Flask(__name__)
app.config["ELASTIC_APM"] = {"DEBUG": True}
apm = ElasticAPM(app, service_name="flask-app")

psutil 用于指标编辑

要在非 Linux 系统上获取 CPU 和系统指标,必须安装 psutil。如果未安装,代理应在启动时自动显示警告,但有时可以抑制此警告。安装 psutil 后,代理应收集指标并将其发送到 APM 服务器。

python3 -m pip install psutil

凭据问题编辑

为了使代理能够将数据发送到 APM 服务器,它可能需要 API_KEYSECRET_TOKEN。仔细检查您的 APM 服务器设置,并确保您的凭据配置正确。此外,请检查 SERVER_URL 是否正确。

Django checktest编辑

与 Django 一起使用时,代理提供两个管理命令来帮助调试常见问题。请转到 Django 故障排除部分 了解更多信息。

代理日志记录编辑

要使代理记录更多数据,只需一个附加到 elasticapm 记录器或根记录器的 处理程序 即可。

请注意,如果将处理程序附加到根记录器,则还需要显式设置 elasticapm 记录器的日志级别

import logging
apm_logger = logging.getLogger("elasticapm")
apm_logger.setLevel(logging.DEBUG)

Django编辑

从代理记录更多数据的最简单方法是向 elasticapm 记录器添加一个控制台日志记录处理程序。这是一个(非常简化的)示例

LOGGING = {
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler'
        }
    },
    'loggers': {
        'elasticapm': {
            'level': 'DEBUG',
            'handlers': ['console']
        },
    },
}

Flask编辑

Flask 建议使用 dictConfig() 来设置日志记录。如果您使用这种格式,则为代理添加日志记录将与 上面针对 Django 的说明 非常相似。

否则,您可以使用 下面的通用说明

通用说明编辑

创建控制台处理程序并将其添加到 elasticapm 记录器很容易

import logging

elastic_apm_logger = logging.getLogger("elasticapm")
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)
elastic_apm_logger.addHandler(console_handler)

您也可以将控制台处理程序添加到根记录器。这会将该处理程序应用于来自所有模块的所有日志消息。

import logging

logger = logging.getLogger()
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)
logger.addHandler(console_handler)

有关处理程序的更多详细信息(以及有关如何使用格式化程序格式化日志的信息),请参阅 Python 日志记录文档

禁用代理编辑

如果代理导致生产应用程序中断,您可以禁用代理,同时进行故障排除。

如果您有权访问 动态配置,则可以通过将 recording 设置为 false 来禁用事件记录。当从受支持的源在运行时更改时,无需重新启动应用程序。

如果这不起作用,或者您无权访问动态配置,则可以通过将 enabled 设置为 false 来禁用代理。您需要重新启动应用程序才能使更改生效。