2014-10-10 38 views
5

我們正在使用Amazon Kinesis(一種隊列服務)並且擁有用Java編寫的隊列讀取器。他們基本上從隊列中讀取數據並將數據插入到數據存儲中。 我想知道是否有人成功使用New Relic監控後臺隊列工作人員?亞馬遜Kinesis工作人員監控的新遺物

一些分析我感興趣的是:

  1. 多少隊列工人現在運行? (它們根據負載上下調整)
  2. 每個隊列工作人員處理多少條消息/秒?這看起來如何?
  3. 整個工作人員處理的郵件數/秒是多少?
  4. 工作人員向MySQL和Cassandra發出請求。這樣做花費了多少時間?
  5. 我們使用log4j進行日誌記錄。如果工人產生錯誤/痕跡,他們是什麼?隨着時間的推移錯誤率是多少?

感謝,

Advait

回答

2

New Relic的沒有任何麻煩的監視批處理作業,而不是網絡交易,這樣就不會成爲一個問題。

假設您剛開始使用可用的源代碼的Java應用程序,最佳路徑是使用代理API:https://docs.newrelic.com/docs/agents/java-agent/custom-instrumentation/java-agent-api。這使您可以報告任何您喜歡的指標,即使我們沒有自動記錄它們。我會回答你的問題1:

1)我們有幾種方法來分割這個餅,但我能想到的最簡單的方法是創建一個NewRelic.recordMetric(「Custom/Queue_worker/alive」, 1)電話。我只需要一個計時器來運行每個員工一次撥打電話一次(因爲這是我們的度量收穫週期)。然後在自定義儀表板(https://docs.newrelic.com/docs/apm/dashboards-menu/custom-dashboards)中,您可以忽略衡量指標值(這些衡量指標值將進行平均處理 - 因此,除非您擁有一個「知道」該值並可以按需要經常報告的主控制器,否則無法獲得所需的通過報告1 + 1 + 1 ... = 1)的影響。您將繪製call_count字段以查看該分鐘有多少人在運行。

2)在這種情況下,你會想很多使用相同的圖案,上面除了創建每個員工不同的自定義指標。幸運的是,自定義儀表板幫助解決了繁重的工作 - 對於x =已處理消息的數量,執行NewRelic.recordMetric(「Custom/Queue_worker/y/number_of_messages」,x)y =某些唯一標識符(GUID?隨機值? )每個工作人員......一分鐘以上 - 然後您可以繪製Custom/Queue_worker/*/number_of_messages以將它們全部放在同一圖表上。

3)每個工人提交相同的自定義指標,自定義/ queue_worker/message_sent和圖形呼叫計該指標。由於後續的度量數據將被平均在一起,因此您不能只爲每個工作人員報告,但我們會爲您保留一個很好的通話計數。你會得到免費MySQL時間(只要你使用mysql或JDBC連接器:https://docs.newrelic.com/docs/agents/java-agent/getting-started/new-relic-java#h2-compatibility) - 它會在你的圖表和事務跟蹤中顯示爲'數據庫'時間。對於Cassandra,我們沒有特定的工具,但您可以再次使用代理API(建議使用NewRelic.recordResponseTimeMetric()),以至少記錄它並單獨繪製它。5)只要你的錯誤包含未處理的異常,你可以獲得錯誤率 - 或者你可以在你處理NewRelic異常(或任何你想標記的錯誤條件)的任何時候進行API調用。 noticeError()。此外,如果錯誤以未處理的異常形式出現(整潔的技巧:處理您的代碼中的異常,然後重新拋出它,以便我們的代理通過上下文查看它),您將獲得堆棧跟蹤和任何有關您所執行事務的元數據用NewRelic.addCustomParameter()記錄。我們不進行日誌文件處理,儘管您可以編寫一個非常小的程序來執行該處理並使用上述方法導入度量標準,並且由於我們對每個運行主機授權,而不是每個代理授權,因此您可以在已授權工人不需要額外的費用。

使用Insights(https://docs.newrelic.com/docs/insights/new-relic-insights)有很多簡單的方法可以做到這一點 - 例如,您可以隨時訪問正在運行的代理列表而無需任何額外的工作,並且您可以報告不會被平均的數字,您可以做數學和圖表。但是,這是一個單獨的產品,我並不想向你推銷:)

注意:我爲New Relic工作。