故障排除

编辑

以下是有关 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_KEYSECRET_TOKEN。仔细检查您的 APM 服务器设置,并确保您的凭据配置正确。此外,请检查 SERVER_URL 是否正确。

Django checktest

编辑

与 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。您需要重新启动应用程序才能使更改生效。