java度量页面_JAVA Metrics 度量工具使用介绍1

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

以下简介下Metrics怎样使用。

Maven地址:

仅仅须要添加metrics-core就可以使用

com.yammer.metrics

metrics-core

2.2.0

以下通过一些測试代码介绍Metrics每一个组件的使用,比較简单,基本看代码就懂了,这里不做过多介绍,请结合http://metrics.codahale.com/getting-started/介绍一起看,这里相当于完好代码。

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);

Gaugeg = 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/s

15-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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值