【问题标题】:Measuring Django Command duration with NewRelic使用 NewRelic 测量 Django 命令持续时间
【发布时间】:2014-02-26 21:21:02
【问题描述】:

我有一组执行一些复杂操作的 Django 命令,我想开始跟踪它们所花费的持续时间,以便随着时间的推移监控它们的性能。

我一直在努力弄清楚如何使用 newrelic 来捕捉持续时间。我尝试了各种方法,从“假设”标准 django newrelic 代理会神奇地捕获它,到尝试自己将它们作为自定义事件进行检测,所有这些都取得了不同程度的成功。

最好的方法是什么,newrelic 是否提供了一些东西来促进这一点?对于这种情况,文档非常缺乏。

此外,我会将这些视为 background_tasks - newrelic 中的 background_task 字段用于什么?

谢谢

【问题讨论】:

    标签: django newrelic


    【解决方案1】:

    在 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' 命令的特定函数。

    【讨论】:

    • 感谢您的回复。我按照您所说的做了(但由于我的命令有破折号,所以做了一些细微的调整,例如 test-foo),但我似乎无法找到数据在仪表板中的位置。我点击应用程序,然后点击我的应用程序(这会带我进行监控),然后我点击交易。我似乎找不到“其他交易”或 django。有什么想法吗?
    • 我添加了一个屏幕截图。使用选项卡左上角的“类型”下拉菜单进入“其他事务 -> Django”。
    • 很遗憾,我的仪表板看起来不像你的,而且我似乎找不到它。这是我的外观片段 - imgur.com/P6qDHUc - 也许是因为我的来自 Heroku?想法?
    • 您能否尝试清除浏览器缓存中与 New Relic 网站相关的项目。那或尝试不同的浏览器。在“事务”选项卡下显示 Web 事务和后台任务的更改是最近的更改,由于浏览器缓存保留旧 CSS 等,有些人没有看到它正确显示。如果这无助于在 New Relic 提交支持票我们可以确认代理是否真的从您的脚本连接。请记住确保按说明指定启动超时,并且如果在选择的单独环境部分中指定。
    猜你喜欢
    • 2016-05-11
    • 2017-11-20
    • 2019-02-10
    • 1970-01-01
    • 2016-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多