在 New Relic,我们确实有一个原型,我们正在考虑对 Python 代理进行一些更改,这将增加对监控指定 Django 管理命令的支持。我们仍在研究这些更改的一些细节,但有可能在接下来的几个月内将其纳入即将发布的版本之一。
在此期间,您可以在代理配置文件中添加如下内容:
[newrelic:django-manage]
app_name = Python Application (Django Management Commands)
startup_timeout = 10.0
[background-task:django-manage-syncdb]
enabled = true
function = django.core.management.commands.syncdb:Command.handle_noargs
name = syncdb
group = Django
然后您将运行 Django manage.py 脚本:
NEW_RELIC_CONFIG_FILE=newrelic.ini
NEW_RELIC_ENVIRONMENT=django-manage
export NEW_RELIC_CONFIG_FILE
export NEW_RELIC_ENVIRONMENT
newrelic-admin run-python manage.py syncdb
当数据随后报告到我们的 UI 中时,它将出现在指定应用程序的“事务”选项卡中的“类型 -> 其他事务 -> Django”下。
“newrelic:django-manage”部分是一个环境部分,它允许您覆盖“app_name”设置,该设置定义了应向我们的 UI 中的哪个应用程序报告数据。 “NEW_RELIC_ENVIRONMENT”变量表示环境部分应用作默认“newrelic”部分的覆盖。
即使您不覆盖“app_name”并让它从默认的“newrelic”部分继承值,您仍然必须设置“startup_timeout”设置。这是必要的,因为在正常情况下,代理只会在 Web 应用程序处理第一个 Web 请求时在后台懒惰地注册自己。在将 Django 管理命令作为后台任务进行跟踪时,延迟完成注册会导致问题。这是因为只有一个函数调用被监控,不等待代理注册发生将导致没有数据被捕获。因此,为启动超时设置一个非零值表示等待注册发生。
如果由于某种原因代理注册时间过长,超时将在指定时间后到期,并且管理命令仍然允许继续。无论哪种方式,需要等待意味着实际启动管理命令会有延迟。如果需要尽快运行管理命令,请记住这一点。
如有必要,如果代理捕获的数据上传持续时间超过默认的 2.5 秒,因此不总是被报告,也可以指定“shutdown_timeout”。
至于“后台任务”部分,它定义了应作为后台任务进行监控和报告的特定功能。在这种情况下,我们的目标是实现 Django 'syncdb' 命令的特定函数。