微服务架构时代,服务运行状况通过服务埋点设计越来越多。熔断器,服务网格,API网关 怎么洞悉他们运行状态,仅通过传统外部Agent采集,实现复杂,双方对接开发成本高,可能远远满足不了要求,java-metrics可以有效满足这些场景.
介绍
Metrics是一个给JAVA服务的各项指标提供度量工具的包,在JAVA代码中嵌入Metrics代码,可以方便的对业务代码的各个指标进行监控,同时,Metrics能够很好的跟Ganglia、Graphite,influxdb 优秀监控工具整合使用,方便的提供图形化接口。基本使用方式直接将core包(目前稳定版本3.0.1)导入pom文件即可,配置如下:
com.codahale.metrics
metrics-core
3.0.1
基本功能
core包主要提供如下核心功能:
Metrics Registries类似一个metrics容器,维护一个Map,可以是一个服务 或者一个静态实例。
支持五种metric类型:Gauges、Counters、Meters、Histograms和Timers。
支持多种指标数据输出:JMX、Console,CSV文件和SLF4J loggers 等输出方式;
支持自定义扩展输出,同时也可以和Ganglia,Graphite 结合使用
Metrics类型(5种):
1. Gauges
Gauges是一个最简单的计量,一般用来统计瞬时状态的数据信息
GaugesExample.java
package example;
import java.util.Queue;
import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.TimeUnit;
import com.codahale.metrics.ConsoleReporter;
import com.codahale.metrics.Gauge;
import com.codahale.metrics.MetricRegistry;
/**
* User: guoenzhou
* 测试Gauges,实时统计pending状态的job个数
*/
public class GaugesExample {
/**
* 实例化一个registry,最核心的一个模块,相当于一个应用程序的metrics系统的容器,维护一个Map
*/
private static final MetricRegistry metrics = new MetricRegistry();
private static Queue queue = new LinkedBlockingDeque();
/**
* ConsoleReporter 在控制台上打印输出
*/
private static ConsoleReporter reporter = ConsoleReporter.forRegistry(metrics).build();
public static void main(String[] args) throws InterruptedException {
reporter.start(10, TimeUnit.SECONDS);
//实例化一个Gauge
Gauge gauge = new Gauge() {
public Integer getValue() {
return queue.size();
}
};
//注册到容器中
metrics.register(MetricRegistry.name(GaugesExample.class, "pending.job", "size"), gauge);
//模拟数据
for (int i=0; i<1000; i++){
queue.add("a");
Thread.sleep(1000);
}
}
}
通过以上步骤将会向MetricsRegistry容器中注册一个指标名字为 example.GaugesExample.pending.job.size 的metrics,实时获取队列长度的指标。
输出:
-- Gauges ----------------------------------------------------------------------
example.TestGauges.pending-job.size
value = 340
18-1-2 15:03:17 ==========&#