2014-02-26 50 views
1

Django的命令時間我有一組做一些複雜的操作Django的命令,我想開始跟蹤他們需要多長時間的持續時間,以監控其性能隨時間。測量與NewRelic的

我一直在努力弄清楚如何使用newrelic來捕捉持續時間。我嘗試了一切,從'假設'標準django newrelic代理將神奇地捕獲它,試圖將他們自己作爲一個自定義事件,所有這些都取得了不同程度的成功。

做這件事的最好方法是什麼,並且newrelic提供了什麼來促進這一點?文檔對於這種情況非常缺乏。

此外,我認爲這是background_tasks - 什麼是用於對NewRelic的領域background_task?

感謝

回答

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 

當數據被報告到我們的用戶界面時,它將出現在指定應用程序的「交易」選項卡中的「類型 - >其他交易 - > Django」下。

enter image description here

的「NewRelic的:Django的管理」部分是一個環境部分,使您可以覆蓋「APP_NAME」設置,定義在我們的UI應用程序的數據,應當報。 'NEW_RELIC_ENVIRONMENT'變量表示環境部分應該用作默認'newrelic'部分的替代。

即使你不重寫「APP_NAME」,並讓它繼承默認「NewRelic的」部分的價值,你還必須設置「startup_timeout」設置。這是非常必要的,因爲在正常情況下,當第一個Web請求由Web應用程序處理時,代理只會在後臺懶散地註冊自己。當註冊被懶惰地完成時,雖然會在將Django管理命令作爲後臺任務進行跟蹤時導致問題。這是因爲只有一個函數調用需要被監視,並且不等待代理註冊發生將導致沒有數據被捕獲。因此,爲啓動超時設置非零值表示等待註冊發生。

如果由於某種原因代理註冊時間太長,超時將在指定的時間,並允許仍要繼續管理命令後到期。無論哪種方式,需要等待意味着實際開始管理命令會有延遲。如果管理命令需要儘快運行,應該記住這一點。

如果有必要,一個「shutdown_timeout」也可以,如果由代理捕獲的數據的上傳始終比默認2.5秒花費的時間指定,並因此並不總是被報告。

至於「背景任務」部分,它定義了應該監視和報告爲背景任務的特定功能。在這種情況下,我們針對實現Django'syncdb'命令的特定功能。

+0

感謝您的回覆。我做了你所說的(但做了一些微調,因爲我的命令有一個破折號,如test-foo),但我似乎無法找到數據將在儀表板中的位置。我點擊應用程序,然後點擊我的應用程序(這需要我監視),然後點擊事務。我似乎無法找到「其他交易」或Django。有什麼想法嗎? – Steve

+0

我已添加屏幕截圖。使用選項卡左上角的「類型」下拉菜單,進入「其他交易 - > Django」。 –

+0

不幸的是,我的儀表板看起來不像你的,我似乎無法找到它。下面是我的外觀 - http://imgur.com/P6qDHUc - 也許這是因爲我的Heroku是來自Heroku的?思考? – Steve