天天看點

java性能監控工具MoSKito學習--MoSKito-Essential子產品5

》 Accumulators 收集器

What is an Accumulator? 什麼是收集器

一個收集器是一個值的收集者對于給出的區間,生産者,狀态和值。

收集器收集和存儲資料,那就是他們不同于生産者的地方。生産者隻是對最近産生的動作展示資料,而收集器存儲了從應用開始監控以後的全部資料。

當然,收集者可以通過圖表的形式展示收集到的資料,圖表可以幫助你評估你的應用性能通過很長一段時間。

例如:

我們依然監控我們應用中的session數。

這個收集器,和生産者關聯,将會收集關于session數量的資訊,通過你配置的區間(例如5分鐘).

更多相關的,所有session資訊将會被存儲從收

java性能監控工具MoSKito學習--MoSKito-Essential子產品5

集器被建立後開始。如圖Accumulators.png所示:

Why We Created Accumulators? 為啥我們建立收集器

MoSKito結構不同于stats的收集,在VM中産生,在其他地方收集。現在,在VM中收集的stats值通常有多個值,目前值和每一個區間的值. 對于一個成熟的系統來說,這個值很快就變的非常大。例如設定了1056個生産者有27067statvalues值和216536個值持有者。每個持有者都持有目前值和每一個區間的值。這個預設是9個值,也就是幾乎是2 millions 值存儲在系統中.

人們通常抱怨在MoSKito WebUI和内嵌的UI的值中沒有時間線。上面的計算十分明确增加至少10個曆史值輕松達到 20.000.000. 對于過去的10個曆史值你能由50分鐘擷取,如果你每5分鐘收集的話,其實什麼也沒有。為了有至少一周的曆史也就意味着有每5分鐘有2016個值 - 我覺得你明白這一點.

然而它對最近的曆史值有用,這就是MoSKito收集器的作用。

Adding an Accumulator 添加一個收集器

收集器可以被添加或者定義如下:

  》programmatically by code,以程式設計方式實作

  》programmatically by annotations,以注解方式實作

  》by configuration or via WebUI. 通過配置或者通過WebUI來完成

Via WebUI 通過WebUI

有兩種方法可以通過WebUI來添加一個收集器,對于最終的使用者來說;然而,他們中的一個正在開發中,是以我們專注于工作中的一個。

To add an accumulator via WebUI:

首先,你應該知道你要統計什麼。比方說我們想要統計每5分鐘建立的session數。

  1,來到Producers tab 頁.

  2,找到并點選生産者 (Session統計對于我們來說是)。如圖Click_Producer1.png所示:

java性能監控工具MoSKito學習--MoSKito-Essential子產品5

  3,在出現的生産者頁,單擊Add Accumulator按鈕(在右上角)。如圖CreateAccumulator_button.png所示:

java性能監控工具MoSKito學習--MoSKito-Essential子產品5

  4,在新出現的Accumulatorbox内:

      i,輸入名字(Name box)

      ii,選擇要監視的區間(interval menu)

      iii,選擇測量單元(Unit menu)

   如圖NewAccumulator_Box.png所示

java性能監控工具MoSKito學習--MoSKito-Essential子產品5

  5,在Stats和Values表(在新 Accumnlator box下面),選擇要監視的值(對我們來說是New)并單擊正确的ADD連結。

  如圖ChooseParamater.png所示。

java性能監控工具MoSKito學習--MoSKito-Essential子產品5

  恭喜,一個新的收集器已經添加了。

  你将重定向到Accumulators頁,你能夠檢視你新添加的收集器。

Config 配置

添加一個收集器最容易的方式是使用MoSKito的配置:

MoSKito-Essential Configuration Guide#Accumulators

Programmatically  代碼

為了完成一個收集器的添加,你需要建立一個 AccumulatorDefinition.這是一個例子的代碼:

AccumulatorDefinition definition = new AccumulatorDefinition();

definition.setName(name);

definition.setProducerName(producerName);

definition.setStatName(statName);

definition.setValueName(valueName);

definition.setIntervalName(intervalName);

Accumulator acc = AccumulatorRepository.getInstance().createAccumulator(definition);

我們提供了一個友善的類net.anotheria.moskito.core.accumulation.Accumulators ,其中有一些常用的建立收集器的方法.

static Accumulator  createAccumulator(java.lang.String name, java.lang.String producerName, java.lang.String statName, java.lang.String valueName, java.lang.String intervalName)

Creates a new accumulator.

static Accumulator  createMemoryAccumulator(java.lang.String name, java.lang.String producerName, java.lang.String valueName, java.lang.String interval)

Create a new memory pool value accumulator.

static Accumulator  createMemoryAccumulator1m(java.lang.String name, java.lang.String producerName, java.lang.String valueName)

Create a new memory pool value accumulator for 1m interval.

static Accumulator  createMemoryAccumulator5m(java.lang.String name, java.lang.String producerName, java.lang.String valueName)

Create a new memory pool value accumulator for 5m interval.

static void createServiceAVGAccumulator(java.lang.String name, java.lang.String producerName)

Creates a new accumulator for service average response time measurement.

static void createServiceAVGAccumulator(java.lang.String name, java.lang.String producerName, java.lang.String interval)

Creates a new accumulator for service average response time measurement.

static void createServiceREQAccumulator(java.lang.String name, java.lang.String producerName)

Creates a new accumulator for service req count.

static void createServiceREQAccumulator(java.lang.String name, java.lang.String producerName, java.lang.String interval)

Creates a new accumulator for service req count.

static void createUrlAVGAccumulator(java.lang.String name, java.lang.String url)

Creates a new accumulator for avg response time of the url.

static void createUrlAVGAccumulator(java.lang.String name, java.lang.String url, java.lang.String interval)

Creates a new accumulator for avg response time of the url.

static void createUrlREQAccumulator(java.lang.String name, java.lang.String url)

Creates a new accumulator for request count of the url.

static void createUrlREQAccumulator(java.lang.String name, java.lang.String url, java.lang.String interval)

Creates a new accumulator for request count of the url.

通過這個實用類你的代碼能夠建立一些收集器很容易而且快速:

Accumulators.createAccumulator("SessionCount CurAbsolute", "SessionCount", "Sessions", "cur", "default");

Accumulators.createAccumulator("SessionCount Cur1h", "SessionCount", "Sessions", "cur", "1h");

Accumulators.createAccumulator("SessionCount New1h", "SessionCount", "Sessions", "new", "1h");

Accumulators.createAccumulator("SessionCount Del1h", "SessionCount", "Sessions", "del", "1h");

或者

Accumulators.createMemoryAccumulator5m("PermGenFree 5m", "MemoryPool-PS Perm Gen-NonHeap", "Free");

Accumulators.createMemoryAccumulator5m("PermGenFree MB 5m", "MemoryPool-PS Perm Gen-NonHeap", "Free MB");

Accumulators.createMemoryAccumulator5m("OldGenFree 5m", "MemoryPool-PS Old Gen-Heap", "Free");

Accumulators.createMemoryAccumulator5m("OldGenFree MB 5m", "MemoryPool-PS Old Gen-Heap", "Free MB");

Accumulators.createMemoryAccumulator5m("OldGenUsed 5m", "MemoryPool-PS Old Gen-Heap", "Used");

Accumulators.createMemoryAccumulator5m("OldGenUsed MB 5m", "MemoryPool-PS Old Gen-Heap", "Used MB");

最好的方式來添加你的收集器是使用一些你的應用或容器一啟動就開始的功能。對于webapp最好是上下文監聽。

一些例子關于MoSKito自己:WebUI和MoSKito Demo.

Accumulators tab 收集器頁

為了檢視所有可用的收集器:單擊收集器頁。

收集器頁可能是MoSKito頁中最簡單的一個。單獨列出了收集器集合。如圖Accumulator_Controls.png所示。

java性能監控工具MoSKito學習--MoSKito-Essential子產品5

收集器清單中的4列

Name 收集器的名字

Path  收集器的描述, 被用在MoSKito資料互動配置檔案内部。描述使用如下格式:

<Producer.Stat.Value/Interval/TimeUnit>

For example: SessionCount.Sessions.new/1h/MILLISECONDS

Values  accumulator value (within the last interval)

Last Timestame 最後測量的時間

Displaying Accumulator Data as Charts 用圖表形式展示資料

為了展示收集器圖表并展示其他可用的收集器:

在收集器清單中,單擊需要收集器的連結或者選擇收集器通過它的選擇框然後單擊Submit按鈕。

如圖Accum_ChartOnly.png所示:

java性能監控工具MoSKito學習--MoSKito-Essential子產品5

為了展示收集器圖表中的詳情資訊:單擊icon, 定位相同的需要的收集器的連接配接.

下面的圖表,你能夠看到下面資訊部分:

Data section: 目前時間内的所有收集器的值,

JSON section: 所有可用收集器資訊的JSON檔案.

移動指針到圖表中彎曲點展示調出的菜單如下:

  》時間戳

  》收集器名字

  》收集器值

  如圖AccumulatorChart_AdditionalInfo.png所示:

java性能監控工具MoSKito學習--MoSKito-Essential子產品5

為了隐藏圖表和回到收集器清單:重新整理Accumulatorstab頁。

Displaying Multiple Charts 展示多個圖表

MoSKito收集器的一個優點是你可以同時檢視多個圖表,這樣友善對比。

為了檢視多個圖表:

在收集器清單, 通過選擇框選中收集器 (列的最左側).單擊Submit按鈕.多個圖表被展示.

我們推薦使用Combin和正常的展示模式(檢視展示模式和圖表類型段落)

Display Modes 展示模式

當檢視收集器圖表,你可以選擇多種展示模式來友善自己檢視。而控制器在收集器清單底部.

為了改變展示模式,選擇需要的模式并選擇即可。如圖Chart_ModesTypes.png所示:

java性能監控工具MoSKito學習--MoSKito-Essential子產品5

具體說明見下圖:

java性能監控工具MoSKito學習--MoSKito-Essential子產品5

繼續閱讀