Yammer Metrics,一种监视应用程序的新方法
當您運行諸如Web應用程序之類的長期應用程序時,最好了解一些關于它們的統計信息,例如,服務的請求數,請求持續時間或活動請求數。
但是還有一些更通用的信息,例如內部集合的狀態,代碼的某些部分被執行了多少次,運行狀況檢查(例如數據庫可用性)或與外部系統的任何類型的連接。
所有這些工具化都可以通過使用本機JMX或使用模塊化項目(例如Metrics)來實現 。 度量標準提供了一種強大的方法來衡量關鍵組件的行為,并將其報告給各種系統,例如JConsole , 系統控制臺 , Ganglia , Graphite , CSV或通過Web服務器提供。 要安裝Metrics ,我們僅需添加指標依賴項。 在此示例中,我們將使用Maven。
現在是時候向我們的代碼中添加一些指標了。 在指標中,我們可以使用6種類型的指標:
- 量規 :離散值的瞬時測量。
- 計數器 :可以遞增和遞減的值。 可以在隊列中使用,以監視掛起作業的剩余數量。
- 儀表 :測量一段時間內事件的發生率。 您可以指定費率單位,事件范圍或事件類型。
- 直方圖 :測量數據流中值的統計分布。
- 計時器 :測量執行一段代碼所需的時間及其持續時間的分布。
- 健康檢查 :顧名思義,它集中了我們服務對外部系統的健康檢查。
因此,讓我們編寫一個非常簡單的應用程序(實際上它是一個控制臺應用程序),它將查詢發送到Google搜索系統。 我們將測量請愿數量,發送給Google的字符數量,搜索到的最后一個單詞以及一個計時器,以測量發送請求和接收響應的速度。
將應用度量的主要類稱為MetricsApplication ,它負責連接到Google并發送輸入的單詞。
public class MetricsApplication {Counterprivate final Counter numberOfSendCharacters = Metrics.newCounter(MetricsApplication.class, 'Total-Number-Of-Characters');Meterprivate final Meter sendMessages = Metrics.newMeter(MetricsApplication.class, 'Sent-Messages', 'Send', TimeUnit.SECONDS);Timerprivate final Timer responseTime = Metrics.newTimer(MetricsApplication.class, 'Response-Time');private LinkedList<String> historyOfQueries = new LinkedList<String>();{GaugeMetrics.newGauge(MetricsApplication.class, 'lastQuery', new Gauge<String>() {@Overridepublic String value() {return historyOfQueries.getLast();}});}public void sendQuery(String message) throws FailingHttpStatusCodeException, MalformedURLException, IOException {updateMetrics(message);TimerContext timerContext = responseTime.time();sendQueryToGoogle(message);timerContext.stop();}private void sendQueryToGoogle(String message) throws FailingHttpStatusCodeException, MalformedURLException, IOException {WebClient webClient = new WebClient();HtmlPage currentPage = webClient.getPage('http:www.google.com');Get the query input textHtmlInput queryInput = currentPage.getElementByName('q');queryInput.setValueAttribute(message);Submit the form by pressing the submit buttonHtmlSubmitInput submitBtn = currentPage.getElementByName('btnG');currentPage = submitBtn.click();}private void updateMetrics(String message) {numberOfSendCharacters.inc(message.length());sendMessages.mark();historyOfQueries.addLast(message);}}我們可以看到的第一件事是計數器實例。 此計數器將計算應用程序整個生命周期中發送給Google的字符數(同時您也不要停止它)。
下一個屬性是一個計量器,用于測量一段時間內發送查詢的速率。 然后,我們有了一個計時器, 它對sendQueryToGoogle方法調用及其隨時間的分布進行評分。 最后是一個LinkedList,用于存儲所有發送的查詢。 該實例將用于返回執行的最后一個查詢,并用于量規返回最后插入的元素。
注意,在每個度量中,我們都設置了一個類,該類將用作jconsole中的文件夾。 此外,提供了一個標簽以用作文件夾內的名稱。
讓我們看一下具有先前配置的jconsole的屏幕截圖,并執行三個搜索:
默認情況下,所有指標都可以通過JMX看到。 但是我們當然可以將測量結果報告給控制臺 , http服務器 , Ganglia或Graphite 。
還要注意,在此示例中,我們將業務代碼和指標代碼混合在一起。 如果您打算使用
生產代碼中的指標我建議您盡可能將指標邏輯放入AOP中。
我們已經了解了一種無需直接使用JMX即可監視我們的應用程序的簡便方法。 還請記住, Metrics附帶了一些內置指標,用于檢測HttpClient , JDBI , Jetty , Jersey , Log4j , Logback或Web應用程序 。
參考: Yammer Metrics,這是一種由JCG合作伙伴 Alex Soto 監控您的應用程序的新方法,位于One Jar To Rule Them All博客中。
翻譯自: https://www.javacodegeeks.com/2012/12/yammer-metrics-a-new-way-to-monitor-your-application.html
總結
以上是生活随笔為你收集整理的Yammer Metrics,一种监视应用程序的新方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么在电脑上画画如何电脑绘画
- 下一篇: 40个Java Collections面