Metrics可以为你的代码的运行提供无与伦比的洞察力。作为一款监控指标的度量类库,它提供了很多模块可以为第三方库或者应用提供辅助统计信息, 比如Jetty, Logback, Log4j, Apache HttpClient, Ehcache, JDBI, Jersey, 它还可以将度量数据发送给Ganglia和Graphite以提供图形化的监控。 Metrics提供了Gauge、Counter、Meter、Histogram、Timer等度量工具类以及Health Check功能。 引用Metric库 将metrics-core加入到maven pom.xml中: <dependencies> <dependency> <groupId>com.codahale.metrics</groupId> <artifactId>metrics-core</artifactId> <version>${metrics.version}</version> </dependency> </dependencies> 将metrics.version 设置为metrics最新的版本。现在你可以在你的程序代码中加入一些度量了。 Registry Metric的中心部件是MetricRegistry。 它是程序中所有度量metric的容器。让我们接着在代码中加入一行: final MetricRegistry metrics = new MetricRegistry(); Gauge (仪表) Gauge代表一个度量的即时值。 当你开汽车的时候, 当前速度是Gauge值。 你测体温的时候, 体温计的刻度是一个Gauge值。 当你的程序运行的时候, 内存使用量和CPU占用率都可以通过Gauge值来度量。比如我们可以查看一个队列当前的size。 public class QueueManager { private final Queue queue; public QueueManager(MetricRegistry metrics, String name) { this.queue = new Queue(); metrics.register(MetricRegistry.name(QueueManager.class, name, "size"), new Gauge<Integer>() { @Override public Integer getValue() { return queue.size(); } }); } } registry 中每一个metric都有唯一的名字。 它可以是以.连接的字符串。 如"things.count" 和 "com.colobu.Thing.latency"。 MetricRegistry 提供了一个静态的辅助方法用来生成这个名字: MetricRegistry.name(QueueManager.class, "jobs", "size") 生成的name为com.colobu.QueueManager.jobs.size。 实际编程中对于队列或者类似队列的数据结构,你不会简单的度量queue.size(), 因为在java.util和java.util.concurrent包中大部分的queue的#size是O(n),这意味的调用此方法会有性能的问题, 更深一步,可能会有lock的问题。 RatioGauge可以计算两个Gauge的比值。 Meter和Timer可以参考下面的代码创建。下面的代码用来计算计算命中率 (hit/call)。 public class CacheHitRatio extends RatioGauge { private final Meter hits; private final Timer calls; public Cache
Metrics可以为你的代码的运行提供无与伦比的洞察力。作为一款监控指标的度量类库,它提供了很多模块可以为第三方库或者应用提供辅助统计信息, 比如Jetty, Logback, Log4j, Apache HttpClient, Ehcache, JDBI, Jersey, 它还可以将度量数据发送给Ganglia和Graphite以提供图形化的监控。
Metrics提供了Gauge、Counter、Meter、Histogram、Timer等度量工具类以及Health Check功能。
引用Metric库
将metrics-core加入到maven pom.xml中:
将
metrics.version
设置为metrics最新的版本。现在你可以在你的程序代码中加入一些度量了。
Registry
Metric的中心部件是
MetricRegistry
。 它是程序中所有度量metric的容器。让我们接着在代码中加入一行:Gauge (仪表)
Gauge
代表一个度量的即时值。 当你开汽车的时候, 当前速度是Gauge值。 你测体温的时候, 体温计的刻度是一个Gauge值。 当你的程序运行的时候, 内存使用量和CPU占用率都可以通过Gauge值来度量。比如我们可以查看一个队列当前的size。
registry
中每一个metric
都有唯一的名字。 它可以是以.连接的字符串。 如"things.count" 和 "com.colobu.Thing.latency"。MetricRegistry
提供了一个静态的辅助方法用来生成这个名字:MetricRegistry.name(QueueManager.class, "jobs", "size")
生成的name为
com.colobu.QueueManager.jobs.size
。RatioGauge可以计算两个Gauge的比值。 Meter和Timer可以参考下面的代码创建。下面的代码用来计算计算命中率 (hit/call)。