2013-07-01 28 views
4

如何構建AppDynamic或New Relic類系統,通過在應用程序運行的服務器上安裝軟件來收集應用程序的性能指標,包括詳細的調用樹統計信息?AppDynamics或NewRelic類型的系統 - 它是如何工作的?

是否有可能收集這樣的指標,而無需編譯您的應用程序調試信息?

構建此類服務時需要考慮哪些性能折衷?這樣的軟件如何最小化他們自己可能對應用程序的性能影響。

回答

6

這些產品通常工作的方式是通過在常用的庫和方法上執行字節碼注入/函數插入/猴子修補。例如,您可能會掛接到JDBC查詢方法,servlet基類和HTTP客戶端庫。當請求進入應用程序時,跟蹤所有重要的方法/調用,並以某種方式記錄它們。獲取數據並將其分解成分析,圖表和警報。

最重要的是,您可以開始添加統計分析或其他選項。

棘手的問題是跨進程邊界跟蹤請求並處理您將收集的性能數據量。 (我在AppNeta上處理這個問題)

有一點需要注意的是Twitter Zipkin(https://github.com/twitter/zipkin),不支持很多早期階段但很有趣的項目。

10

AppDynamics和New Relic都使用標準BCI來監視開發人員用於構建應用程序(例如Servlet,Struts,SOAP,JMS,JDBC等)的通用接口(入口和出口點)。這提供了一個代碼執行的基本框架(調用圖),其中的時間信息代表了執行代碼的不到5%。

祕訣在於,在減速期間揭示剩餘的95%代碼執行的時間,而不會在生產JVM中產生太多開銷。 AppDynamics使用內存代理分析和Java API調用的組合,然後實時提取剩餘的代碼執行情況。這意味着不需要自定義檢測或明確聲明您希望監控解決方案所需的類/方法。

AppDynamics數據收集與New Relic的數據收集非常不同。例如,使用AppDynamics,您可以針對特定的用戶請求獲取跨多個JVM的完整分佈式調用圖,而不是說明請求聚合。

BCI目前是一種商品,不同之處在於供應商使用的分析和算法觸發診斷/調用圖信息,因此最終在正確的時間獲得正確的可見性以解決問題。

Steve。

相關問題