Metric

1.簡介
系統(tǒng)越來越大,我們所需要關(guān)聯(lián)的組件也越來越多遥诉,為了更好的排查問題,我們需要對不同的指標(biāo)進(jìn)行監(jiān)控噪叙,從而發(fā)現(xiàn)問題矮锈,Metrics作為一款監(jiān)控指標(biāo)的度量類庫,提供了許多工具幫助開發(fā)者來完成自定義的監(jiān)控工作睁蕾。

2.環(huán)境
添加maven依賴

<dependency>
    <groupId>io.dropwizard.metrics</groupId>
    <artifactId>metrics-core</artifactId>
    <version>${metrics.version}</version>
</dependency>

3.使用
Metrics中MetricRegistry是中心容器苞笨,它是程序中所有度量的容器,所有新的度量工具都要注冊到一個MetricRegistry實例中才可以使用子眶,盡量在一個應(yīng)用中保持讓這個MetricRegistry實例保持單例瀑凝。

Metrics提供了多個指標(biāo) Gauges、Counters臭杰、Histograms粤咪、Meters、Timers

3.1Timers
Timer用于統(tǒng)計QPS和耗時硅卢,這里用于統(tǒng)記DB查詢所耗時間射窒,由于try-catch-resources屬性自動stop了,也可以顯示調(diào)用Context stop方法

@RestController
@RequestMapping("/metric")
public class MetricCtrl {

    private static final MetricRegistry metricRegistry = new MetricRegistry();

    private Timer timer;

    private static ConsoleReporter reporter = ConsoleReporter.forRegistry(metricRegistry).build();//使用控制臺打印

    @Autowired
    private DailyTradeMarkingDao dailyTradeMarkingDao;//獲取用戶天維度的標(biāo)記

    @PostConstruct
    public void setup() {
        timer = metricRegistry.timer("dbQuery");
        reporter.start(10, TimeUnit.SECONDS);//報告10秒輸出一次
    }

    @PostMapping("/timer")
    public JsonResult testTimer() {
        List<DailyTradeMarking> markingList = null;
        try (Timer.Context context = timer.time()) {
            markingList = dailyTradeMarkingDao.getByAccountIdAndStockId(401422L, 14L);
        }
        return JsonResult.ok(markingList);
    }
}

顯示結(jié)果:
-- Timers ----------------------------------------------------------------------
dbQuery
             count = 7
         mean rate = 0.12 calls/second
     1-minute rate = 0.08 calls/second
     5-minute rate = 0.02 calls/second
    15-minute rate = 0.01 calls/second
               min = 42.75 milliseconds
               max = 1228.59 milliseconds
              mean = 211.34 milliseconds
            stddev = 401.27 milliseconds
            median = 46.35 milliseconds
              75% <= 87.25 milliseconds
              95% <= 1228.59 milliseconds
              98% <= 1228.59 milliseconds
              99% <= 1228.59 milliseconds
            99.9% <= 1228.59 milliseconds

3.2Meters
Meter用于測試QPS 将塑,這里統(tǒng)計/meter接口的QPS是多少

{
    meter = metricRegistry.meter("qps");
    @PostMapping("/meter")
    public JsonResult testMeter() {
        meter.mark();//根據(jù)不同的需求設(shè)置不同的n ,默認(rèn)1
        return JsonResult.ok();
    }
}


顯示結(jié)果:


-- Meters ----------------------------------------------------------------------
qps
             count = 6
         mean rate = 0.02 events/second
     1-minute rate = 0.09 events/second
     5-minute rate = 0.02 events/second
    15-minute rate = 0.01 events/second

3.3Histograms
Histogram 是一個統(tǒng)計圖表,可以統(tǒng)計次數(shù)蝌麸、最大点寥、最小、平均值等, 這里記錄reques長度的大小

{
    
    histogram = metricRegistry.histogram("request.size");
    @PostMapping("/histogram")
    public JsonResult testHistogram(HttpServletRequest request) {
        histogram.update(request.toString().length());
        return JsonResult.ok();
    }
}
顯示結(jié)果:
-- Histograms ------------------------------------------------------------------
request.size
             count = 8
               min = 52
               max = 52
              mean = 52.00
            stddev = 0.00
            median = 52.00
              75% <= 52.00
              95% <= 52.00
              98% <= 52.00
              99% <= 52.00
            99.9% <= 52.00

3.4 Counters
counter用來統(tǒng)計次數(shù)来吩,這里用來統(tǒng)計大于5的個數(shù)有多少個

{
    
    counter = metricRegistry.counter("count");
    counterFive = metricRegistry.counter("counterFive");

    @PostMapping("/counter")
    public JsonResult testCounter() {
        Random random = new Random();
        counter.inc();
        if (random.nextInt(10) > 5) {
            counterFive.inc();
        }
        return JsonResult.ok();
    }

}


顯示結(jié)果:
-- Counters --------------------------------------------------------------------
counterFive
             count = 1
count
             count = 7

3.5Gauges
gauge可以實現(xiàn)自己的度量標(biāo)準(zhǔn)敢辩,這里用來檢測緩存的大小


{
    private LoadingCache<Integer, Integer> cache = CacheBuilder.newBuilder()
        .maximumSize(1000)
        .refreshAfterWrite(10, TimeUnit.SECONDS).build(
        new CacheLoader<Integer, Integer>() {
            @Override
            public Integer load(Integer key) throws Exception {
                return 1;
            }
        }
    );
    gauge = metricRegistry.gauge("cache.size", new MetricRegistry.MetricSupplier<Gauge>() {
        @Override
        public Gauge newMetric() {
            return new Gauge<Long>() {
                @Override
                public Long getValue() {
                    return cache.size();
                }
            };
        }
    });
    
    @PostMapping("/gauge")  
    public JsonResult testGauge() throws ExecutionException {
        Random random = new Random();
        cache.get(random.nextInt(100));
        return JsonResult.ok(gauge.getValue());
    }
}




顯示結(jié)果:
-- Gauges ----------------------------------------------------------------------
cache.size
             value = 10
-- Gauges ----------------------------------------------------------------------
cache.size
             value = 11

4.數(shù)據(jù)上報(顯示)

ConsoleReporter reporter = ConsoleReporter.forRegistry(metricRegistry).build();//輸出在控制臺

也可以繼承ScheduledReporter實現(xiàn)自己的聚合格式

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市弟疆,隨后出現(xiàn)的幾起案子戚长,更是在濱河造成了極大的恐慌,老刑警劉巖怠苔,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件同廉,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機迫肖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進(jìn)店門锅劝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蟆湖,你說我怎么就攤上這事故爵。” “怎么了隅津?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵诬垂,是天一觀的道長。 經(jīng)常有香客問我伦仍,道長剥纷,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任呢铆,我火速辦了婚禮晦鞋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘棺克。我一直安慰自己悠垛,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布娜谊。 她就那樣靜靜地躺著确买,像睡著了一般。 火紅的嫁衣襯著肌膚如雪纱皆。 梳的紋絲不亂的頭發(fā)上湾趾,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天,我揣著相機與錄音派草,去河邊找鬼搀缠。 笑死,一個胖子當(dāng)著我的面吹牛近迁,可吹牛的內(nèi)容都是我干的艺普。 我是一名探鬼主播,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼鉴竭,長吁一口氣:“原來是場噩夢啊……” “哼歧譬!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起搏存,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤瑰步,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后璧眠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體缩焦,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡读虏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了舌界。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片掘譬。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖呻拌,靈堂內(nèi)的尸體忽然破棺而出葱轩,到底是詐尸還是另有隱情,我是刑警寧澤藐握,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布靴拱,位于F島的核電站,受9級特大地震影響猾普,放射性物質(zhì)發(fā)生泄漏袜炕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一初家、第九天 我趴在偏房一處隱蔽的房頂上張望偎窘。 院中可真熱鬧,春花似錦溜在、人聲如沸陌知。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽仆葡。三九已至,卻和暖如春志笼,著一層夾襖步出監(jiān)牢的瞬間沿盅,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工纫溃, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留腰涧,地道東北人。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓皇耗,卻偏偏與公主長得像南窗,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子郎楼,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,697評論 2 351

推薦閱讀更多精彩內(nèi)容