博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA Metrics 度量工具使用介绍1
阅读量:4031 次
发布时间:2019-05-24

本文共 9362 字,大约阅读时间需要 31 分钟。

使用介绍1

Metrics是一个给JAVA提供度量工具的包,在JAVA代码中嵌入Metrics代码,可以方便的对业务代码的各个指标进行监控,同时,Metrics能够很好的跟Ganlia、Graphite结合,方便的提供图形化接口。

         下面简单介绍下Metrics如何使用。

Maven地址:

只需要增加metrics-core即可使用

    <dependency>

        <groupId>com.yammer.metrics</groupId>
        <artifactId>metrics-core</artifactId>
        <version>2.2.0</version>
    </dependency>

 

源文档 <>

 

下面通过一些测试代码介绍Metrics每个组件的使用,比较简单,基本看代码就懂了,这里不做过多介绍,请结合介绍一起看,这里相当于完善代码。

Gauges

最简单的度量指标,每次相当于重置这个值。

package com.alibaba.cxf.test.metric; import java.util.LinkedList;import java.util.Queue;import java.util.concurrent.TimeUnit; import com.yammer.metrics.Metrics;import com.yammer.metrics.core.Counter;import com.yammer.metrics.core.Gauge;import com.yammer.metrics.reporting.ConsoleReporter; /** * TODO * @author scutshuxue.chenxf */public class TestGauges {        public static Queue
queue = new LinkedList
(); public static void main(String[] args) throws InterruptedException{ ConsoleReporter.enable(5,TimeUnit.SECONDS); Gauge
g = Metrics.newGauge(TestGauges.class, "pending-jobs", newGauge
() { @Override public Integer value() { return queue.size(); } }); queue.add("ssss"); System.out.println(g.value()); while(true){ Thread.sleep(1000); } }}

执行效果如下:

12-12-20 14:48:53==============================================================com.alibaba.cxf.test.metric.TestGauges:  pending-jobs:    value = 1

 

 

代码中都增加了ConsoleReporter.enable(1, TimeUnit.SECONDS);语句,通过这个命令,可以每秒钟将度量指标打印在屏幕上,理解起来会有更清楚的理解。

 

Counter,计数器

package com.alibaba.cxf.test.metric; import java.util.LinkedList;import java.util.Queue;import java.util.concurrent.TimeUnit; import com.yammer.metrics.Metrics;import com.yammer.metrics.core.Counter;import com.yammer.metrics.reporting.ConsoleReporter; /** * TODO * @author scutshuxue.chenxf */public class TestCounter {         private final Counter pendingJobs = Metrics.newCounter(TestCounter.class, "pending-jobs");        private final Queue
queue = new LinkedList
(); public void add(Stringstr) { pendingJobs.inc(); queue.offer(str); } public String take() { pendingJobs.dec(); return queue.poll(); } /** * TODO * @author scutshuxue.chenxf * @param args * void * @throws InterruptedException */ public static void main(String[]args) throws InterruptedException { // TODOAuto-generated method stub TestCounter tc =new TestCounter(); ConsoleReporter.enable(1,TimeUnit.SECONDS); while(true){ tc.add("1"); Thread.sleep(1000); } } }

 

效果如下:

12-12-20 14:48:53==============================================================com.alibaba.cxf.test.metric.TestGauges:  pending-jobs:    value = 1

 

Meters

Meters会将最近1分钟,5分钟,15分钟的TPS(每秒处理的request数)给打印出来,还有所有时间的TPS。

 

package com.alibaba.cxf.test.metric; import java.util.concurrent.TimeUnit; import com.yammer.metrics.Metrics;import com.yammer.metrics.core.Meter;import com.yammer.metrics.reporting.ConsoleReporter; /** * TODO * @author scutshuxue.chenxf */public class TestMeters {        private static Meter meter = Metrics.newMeter(TestMeters.class, "requests","requests", TimeUnit.SECONDS);         public static void main(String[] args) throws InterruptedException{               ConsoleReporter.enable(1,TimeUnit.SECONDS);               while(true){                       meter.mark();                       meter.mark();                       Thread.sleep(1000);               }        }}

效果如下:

12-12-20 15:02:50==============================================================com.alibaba.cxf.test.metric.TestMeters:  requests:             count = 20         mean rate = 2.20requests/s     1-minute rate = 2.00requests/s     5-minute rate = 2.00requests/s15-minute rate = 2.00requests/s

Histograms 直方图

最大值,最小值,平均值,方差,中位值,百分比数据,如75%,90%,98%,99%的数据在哪个范围内。

 

package com.alibaba.cxf.test.metric; import java.util.concurrent.TimeUnit; import com.yammer.metrics.Metrics;import com.yammer.metrics.core.Histogram;import com.yammer.metrics.reporting.ConsoleReporter; /** * TODO * @author scutshuxue.chenxf */public class TestHistograms {        private static Histogram histo = Metrics.newHistogram(TestHistograms.class,"histo-sizes");         /**         * TODO         * @author scutshuxue.chenxf         * @param args         * void         * @throws InterruptedException         */        public static void main(String[] args) throws InterruptedException {               // TODOAuto-generated method stub                             ConsoleReporter.enable(1,TimeUnit.SECONDS);               int i=0;               while(true){                       histo.update(i++);                       Thread.sleep(1000);               }        } }

效果如下:

com.alibaba.cxf.test.metric.TestHistograms:  histo-sizes:               min = 0.00               max = 5.00              mean = 2.50            stddev = 1.87            median = 2.50              75% <= 4.25              95% <= 5.00              98% <= 5.00              99% <= 5.00            99.9% <= 5.00

Timers

时间统计

package com.alibaba.cxf.test.metric; import java.util.Random;import java.util.concurrent.TimeUnit; import com.yammer.metrics.Metrics;import com.yammer.metrics.core.Timer;import com.yammer.metrics.core.TimerContext;import com.yammer.metrics.reporting.ConsoleReporter; /** * TODO * @author scutshuxue.chenxf */public class TestTimers {        private static Timer timer = Metrics.newTimer(TestTimers.class, "responses", TimeUnit.MILLISECONDS,TimeUnit.SECONDS);        /**         * TODO         * @author scutshuxue.chenxf         * @param args         * void         * @throws InterruptedException         */        public static voidmain(String[] args) throws InterruptedException {               // TODOAuto-generated method stub               ConsoleReporter.enable(2,TimeUnit.SECONDS);               Random rn = newRandom();               timer.time();               System.out.println();               while(true){                       TimerContextcontext = timer.time();                                             Thread.sleep(rn.nextInt(1000));                       context.stop();               }        } }

效果如下:

com.alibaba.cxf.test.metric.TestTimers:  responses:             count = 26         mean rate = 2.15calls/s     1-minute rate = 1.70calls/s     5-minute rate = 1.62calls/s    15-minute rate = 1.61calls/s               min = 35.47ms               max = 878.76ms              mean = 462.50ms            stddev = 284.91ms            median = 419.90ms              75% <=764.13ms              95% <=877.76ms              98% <=878.76ms              99% <=878.76ms            99.9% <=878.76ms

 

Health Checks

健康检查,如心跳:

 

package com.alibaba.cxf.test.metric; import java.util.Map;import java.util.Map.Entry;import java.util.Random;import java.util.concurrent.TimeUnit; import com.yammer.metrics.HealthChecks;import com.yammer.metrics.core.HealthCheck;import com.yammer.metrics.reporting.ConsoleReporter; public class DatabaseHealthCheck extends HealthCheck {    private static Databasedatabase;        private static final Map
results = HealthChecks.runHealthChecks(); public DatabaseHealthCheck(Databasedatabase) { super("database"); this.database =database; } @Override public Result check()throws Exception { if(database.isConnected()) { returnResult.healthy(); } else { return Result.unhealthy("Cannotconnect to database" ); } } public static void main(String[] args) throws Exception{ Database db = new Database(); DatabaseHealthCheck checkHealth = new DatabaseHealthCheck(db); HealthChecks.register(checkHealth); while(true){ Map
results = HealthChecks.runHealthChecks(); for(Entry
entry : results.entrySet()) { if (entry.getValue().isHealthy()) { System.out.println(entry.getKey() +" is healthy"); } else { System.err.println(entry.getKey() +" is UNHEALTHY: " + entry.getValue().getMessage()); } } Thread.sleep(1000); } } }class Database{ static Random rn = newRandom(); public booleanisConnected() { // TODOAuto-generated method stub returnrn.nextBoolean(); } }

效果如下:

com.alibaba.cxf.test.metric.TestTimers:  responses:             count = 26         mean rate = 2.15calls/s     1-minute rate = 1.70calls/s     5-minute rate = 1.62calls/s    15-minute rate = 1.61calls/s               min = 35.47ms               max = 878.76ms              mean = 462.50ms            stddev = 284.91ms            median = 419.90ms              75% <=764.13ms              95% <=877.76ms              98% <=878.76ms              99% <=878.76ms            99.9% <=878.76ms

转载地址:http://eeebi.baihongyu.com/

你可能感兴趣的文章
Centos import torchvision 出现 No module named ‘_lzma‘
查看>>
Maximum Subsequence Sum
查看>>
PTA:一元多项式的加乘运算
查看>>
CCF 分蛋糕
查看>>
解决python2.7中UnicodeEncodeError
查看>>
小谈python 输出
查看>>
Django objects.all()、objects.get()与objects.filter()之间的区别介绍
查看>>
python:如何将excel文件转化成CSV格式
查看>>
Django 的Error: [Errno 10013]错误
查看>>
机器学习实战之决策树(一)
查看>>
[LeetCode By Python] 2 Add Two Number
查看>>
python 中的 if __name__=='__main__' 作用
查看>>
机器学习实战之决策树二
查看>>
[LeetCode By Python]7 Reverse Integer
查看>>
[LeetCode By Python]9. Palindrome Number
查看>>
[leetCode By Python] 14. Longest Common Prefix
查看>>
[LeetCode By Python]107. Binary Tree Level Order Traversal II
查看>>
[LeetCode By Python]108. Convert Sorted Array to Binary Search Tree
查看>>
[leetCode By Python]111. Minimum Depth of Binary Tree
查看>>
[LeetCode By Python]118. Pascal's Triangle
查看>>