2014-11-23 31 views
1

在Java或Scala中使用CodaHale度量標準編寫集羣環境時向Graphite報告時有什麼問題?Java/Scala度量--Codahale - Cluster/Mulitnode和Graphite Reporter

如果我的應用程序有多個實例在運行並創建不同的度量標準,那麼Graphite可以應付 - 即報告累積嗎?

例如,如果我有AppInstance A和B.如果B的計量器報告爲1.2,另一個報告爲1.3 - 那麼Graphite中的結果是什麼?它會是一個平均值嗎?或者會超越另一個。

櫃檯是否累計?

定時器是否累計?

或者我應該以某種方式給每個實例一些標籤來區分不同的JVM實例?

+1

*或者我應該以某種方式給每個實例一些標籤來區分不同的JVM實例?*從定位不正當行爲的角度來看也是有意義的 – 2014-11-23 12:57:18

回答

1

您可以在aggreagtion-rules.conf的聚合期間發現您的默認行爲。 我認爲graphite的默認設置是在聚合期間取最後一個接收點。

如果您可能對流程實例中的度量詳細信息感興趣(並且您可能在某個時間點),則應以某種方式標記實例並在度量路徑中使用該標記。 Graphite對於在請求時進行聚合非常有用,並且可以找到聚合個人指標(總和,平均,最大或更復雜)的方法,這很難實現。

有一件事情可以讓你不願意由發件人進程有不同的指標,如果你有一個非常通用的環境,實例總是在變化(因此創建了很多瞬態指標)。否則,只需使用ip + pid就可以了。

1

我爲每個我知道同時進入的度量集添加了一個「count」字段。然後我彙總了所有的值,包括計數爲'總和'。這讓我可以找到集合中所有度量的平均值,總和和計數。 (是的,石墨的默認值是在一段時間內採用最新的樣本,您需要使用碳聚合器前端。)

將IP地址添加到度量標準名稱可讓您計算不同服務器的相對速度。如果它們都是相同的類型,有些是其他類型的速度的4倍,那麼就有問題。 (我見過這個)。如上所述,添加像IP這樣的臨時值會產生一個死的度量標準問題。如果你關心歷史,你可以爲「老」創建一個特殊的IP並在那裏收集死亡指標,然後刪除死亡條目。事實上,任何計時器期間的機器數量都是非常有用的指標。

1

我們發現處理這個問題的最簡單方法是使用每個實例指標。這樣你可以看到每個實例是如何獨立運作的。如果要全面瞭解羣集,則通過在度量標準名稱中使用通配符,可以輕鬆查看一組度量的sumSeries

對這種方法的警告是,您要跟蹤石墨實例中的更多指標,所以如果您使用的是託管解決方案,則成本會更高。

相關問題