附錄D Metrics簡介

2021-09-20 05:27:21 字數 3749 閱讀 6681

注:本文是為了配合《

spark核心設計的藝術——架構設計與實現

》一書的內容而編寫,目的是為了節省成本、方便讀者查閱。書中附錄d的內容都在本文呈現。

metrics是codahale提供的第三方度量倉庫。metrics作為一款監控指標的度量類庫,可以為第三方庫提供輔助統計資訊,還可以將度量資料傳送給ganglia和graphite以提供圖形化的監控。

本文將對metrics中的核心類進行介紹,方便讀者對spark度量系統更加細緻深入的理解。

metricregistry是metrics提供的度量容器,這裡先列出metricregistry的主要結構。

public class metricregistry implements metricset
從上面**可以看出metricregistry中會快取各種度量和***,下面對metricregistry中的一些方法進行介紹。

功能描述:構建形如「字串1.字串2…字串n-1.字串n」這樣的字串。任何空值或空字串都將被過濾。

public static string name(string name, string... names) 

}return builder.tostring();

}

功能描述:當有新的metric新增到concurrentmapmetrics時,呼叫此方法。根據metric的子介面的不同,呼叫不同方法。例如:gauge則呼叫***的ongaugeadded;counter則呼叫***的oncounteradded;histogram則呼叫***的onhistogramadded。

private void notifylistenerofaddedmetric(metricregistrylistener listener, metric metric, string name)  else if (metric instanceof counter)  else if (metric instanceof histogram)  else if (metric instanceof meter)  else if (metric instanceof timer)  else 

}

功能描述:當有新的metric新增到concurrentmapmetrics時,呼叫此方法。遍歷呼叫***快取listlisteners中的所有***,呼叫notifylistenerofaddedmetric。

private void onmetricadded(string name, metric metric) 

}

功能描述:如果metric的型別是metric並且metrics中還沒有此metric,則將它新增到metrics;

如果metric的型別是metricset,則metricset中包含的所有新的metric新增到快取concurrentmapmetrics;以上新增過程都伴隨onmetricadded的呼叫。

public t register(string name, t metric) throws illegalargumentexception  else  else 

}return metric;

} private void registerall(string prefix, metricset metrics) throws illegalargumentexception else }}

gauge是metrics提供的用於估計度量值的特質,其實現如下:

public inte***ce gaugeextends metric
slf4jreportermetrics提供的使用實現了slf4j介面的實現類的方法,將度量輸出到日誌的類。

功能描述:將度量輸出到日誌的方法。

@override

public void report(sortedmapgauges,

sortedmapcounters,

sortedmaphistograms,

sortedmapmeters,

sortedmaptimers)

for (entryentry : counters.entryset())

for (entryentry : histograms.entryset())

for (entryentry : meters.entryset())

for (entryentry : timers.entryset()) }}

功能描述:將估計度量輸出到日誌的方法。(備註:

slf4jreporter的

report

方法中分別對

gauge

、counter

、histogram

、meter

及timer

進行輸出,為說明問題,附錄

d只挑選了對

gauge

metrics

原始碼。)

private void loggauge(string name, gauge gauge) , value={}", prefix(name), gauge.getvalue());

}

slf4jreporter的日誌輸出依賴於loggerproxy,根據loggerproxy的類名,我們知道這是乙個有關日誌輸出的**類,其實現如下:

/* private class to allow logger configuration */

static abstract class loggerproxy

abstract void log(marker marker, string format, object... arguments);

abstract boolean isenabled(marker marker);

}

可以看到loggerproxy實際上不過是**了org.slf4j.logger介面對日誌輸出。

scheduledreporter是consolereporter、csvreporter、slf4jreporter及graphitereporter的共同父類,scheduledreporter中的很多方法被子類所共用。

功能描述:啟動度量輸出工作,實質為定時器不斷地呼叫report方法輸出。

public void start(long period, timeunit unit)  catch (runtimeexception ex) #report. exception was suppressed.", scheduledreporter.this.getclass().get******name(), ex);}}

}, period, period, unit);

}

功能描述:停止度量輸出工作,實質為停止定時器。

public void stop() 

}} catch (interruptedexception ie)

}

經過近一年的準備,《

spark核心設計的藝術 架構設計與實現

》一書現已出版發行,圖書如圖:

京東:

京東:

附錄 養城之戰

西元前511年 吳王闔閭三年 夏,吳國派出使臣,責令徐國 今安徽泗縣 和鐘吾國 今江蘇宿遷東北 交出領兵在外的公子掩餘和燭庸。二國依仗有強楚撐腰,拒不從命,並私自放走二公子,讓他們去投奔楚國。楚昭王十分得意,立即派出大員隆重迎接二公子,並讓二公子在養地 今河南沈丘縣 暫時住。接著,又命令莠尹然 左司...

Storm入門之附錄A

storm客戶端能讓我們使用命令管理集群中的拓撲。按照以下步驟安裝storm客戶端 把storm目錄加入path環境變數,這樣就不用每次都輸入全路徑執行storm了。如果我們使用了 usr local bin storm,執行export path path usr local bin storm。...

附錄A 術語表

這裡列出了本書中用到的一些技術術語,在別的地方你也能找到它們,不過我想還是把它們集中一處,以便查詢。堆表示程式可用的記憶體區,也叫動態記憶體區。堆記憶體的分配與釋放次序是隨機的,這就是說,如果你按次序分配三塊記憶體,那麼到時並不按分配時的次序釋放記憶體。堆管理器會負責所有操作,你只需簡單地使用get...