性能監控之 Java Metrics 度量包
前言
簡介
舉例說明
總結
前言
簡介
舉例說明
總結
前言
前幾天因為需要,折騰了一下 Java Metrics。發現之前的文章中并沒有寫過這個。
本著要把所有看到的性能相關的話題都要涉及的目的,在這里也要寫一下。
簡介
Metrics的官網首頁簡單的很,里面只有這么段描述:
Metrics is a Java library which gives you unparalleled insight into what your code does in production.
Metrics provides a powerful toolkit of ways to measure the behavior of critical components in your production environment.With modules for common libraries like Jetty, Logback, Log4j, Apache HttpClient, Ehcache, JDBI, Jersey and reporting backends like Graphite, Metrics provides you with full-stack visibility.
也就是說這個工具包可以讓你在生產環境中產生度量的一些數據,并且支持不同的輸出方式。
它可以度量代碼中關鍵組件,響應時間、計數器等都可以采集,也可以取操作系統信息。
它的基本類型有如下幾種:
看下官網的文檔結構,就知道它能干多少事了,英文不錯的,可以看下 https://metrics.dropwizard.io/4.0.0/。
舉例說明
來看一個 Meter 的例子:
/** * Meter * 作用:度量速率(例如,tps) * Meters會統計最近1分鐘(m1),5分鐘(m5),15分鐘(m15),還有全部時間的速率(速率就是平均值)。 */ public class TestMeter { public static void main(String[] args) throws InterruptedException { /** * 實例化一個MetricRegistry,是一個metrics的容器,維護一個MAP */ final MetricRegistry registry = new MetricRegistry(); //因為該類的一個屬性final ConcurrentMap
上面完整的示例代碼都有注釋,就不一一解釋了。輸出如下:
-- Meters ---------------------------------------------------------------------- com.zee.metrics.zeemetrics.TestMeter.request.tps count = 12 mean rate = 2.00 events/second 1-minute rate = 2.00 events/second 5-minute rate = 2.00 events/second 15-minute rate = 2.00 events/second
這就可以統計這個請求在這段時間內訪問了多少次,也就是 TPS。但是也不能老在 console 里看呀。
還是放到圖形化的界面中看比較好,這里用的是 influxDB+Grafana,在 influxDB 中創建一個 database。
[gaolou@7dgroup2 ~]$ influx Connected to http://localhost:8086 version 1.6.0 InfluxDB shell version: 1.6.0 > create database mydb; > use mydb; Using database mydb > show MEASUREMENTS >
其中的 MEASUREMENTS 是空的。
把數據輸出進去。
@Bean public Meter requestMeter(MetricRegistry metrics) { return metrics.meter("request"); } @Bean(name = "influxdbReporter") public ScheduledReporter influxdbReporter(MetricRegistry metrics) throws Exception { return InfluxdbReporter.forRegistry(metrics) .protocol(InfluxdbProtocols.http("1.1.1.1", 8086, "admin", "admin", "mydb")) .convertRatesTo(TimeUnit.SECONDS) .convertDurationsTo(TimeUnit.MILLISECONDS) .filter(MetricFilter.ALL) .skipIdleMetrics(false) .build(); }
select * from request 就看到產生了如下內容。
再配置下 grafana 中的 data source
在 dashboard 中加下 panel,選擇 influxdb 數據源,看到列表,選擇想要看的數據表,再在 field 中選擇想要看的列,保存。
然后在 dashboard 里就可以看到數據了。
總結
這個邏輯,在操作中并不困難。但是,從我自己的行業經驗上來看。在研發時就讓他們把要看到的數據做好監控的規劃,最后運維時能如此清晰地展示出來,并最終對判斷生產問題有用,這個過程的溝通成功會非常的高。
主要是看公司的組織結構是什么樣,如果是全棧的結構會比較容易
如果是研發運維是分開的團隊,并且相互配合的不好,會相當的痛苦。
在之前的項目中,有運維問我怎么才能監控到業務性能,我想了下那個公司的背景之后,沉吟良久說了聲:難。
性能可做的東西并不少,前提是看格局有多大。
Java JVM 應用性能調優
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。