Metrics:通过JMX或HTTP发布参数,并且支持存储到数据库

 ,  , 

metrics

Metrics是一个Java开发库,可以很好地监视代码在生产环境下的行为。Metrics提供了一组强大的工具集,可以用多种方法测量生产环境下的关键组件。

Metrics基于很多通用组件和报表后端提供了全栈可视化。使用的通用组件包括Jetty、Logback、Log4jApache HttpClientEhcacheJDBIJersey,报表后端有GangliaGraphite。

配置Maven

添加metrics-core到Maven依赖:

注意:请确保POM文件中添加metrics.version属性,最新的版本是3.1.0。

Meters(度量器)

Meter能够测量一段时间内的事件发生频率(例如“每秒的请求数”)。除了平均速率,Meters还可以追踪1分钟、5分钟和15分钟的移动平均数(Moving Average)。

上面的Meter会监测每秒钟发生的请求频率。

Console Reporter(命令行报告器)

Console Reporter的功能和名字一样,可以在命令行报告信息,每秒钟打印输出。

完整示例

下面是一个完整的示例:

注意:请确保POM文件中添加metrics.version属性,最新的版本是3.1.0。

运行示例时可以执行:

Registry(注册表)

Metrics的核心是MetricRegistry类,它是存储所有应用度量数据的容器。下面的代码会创建一个新的MetricRegistry:

你可能想要将这个对象加入应用程序的生命周期(可能会采用依赖注入框架),static字段也可以集成。

Gauge(测量)

Gauge是对值的瞬时测量。例如,我们可能想要测量队列中等待的任务数:

Gauge测量时会返回队列中的任务数。

每个registry都有唯一的名字,字符串中间用点号分隔,比如"things.count"或"com.example.Thing.latency"。MetricRegistry提供了一个static帮助方法可以构建名字。

上面的代码能够返回一个类似"com.example.QueueManager.jobs.size"的字符串。

对大多数队列或者类似队列的结构,不会简单地调用queue.size()。因为大多数java.util和java.util.concurrent的#size()方法实现效率都是O(n),也就是说gauge的速度非常慢(带锁操作时变慢的可能性更大)。

Counter(计数器)

Counter是AtomicLong实例的一种测量(gauge),可以增加或减少实例的值。例如,我们需要一种高效测量队列中待处理任务数量的方法:

每次counter测量时都会返回队列中的任务数量。

上面的示例中,counters调用的API与之前稍有不同:调用#counter(String) 而不是之前的#register(String, Metric)。当然,也可以先注册然后自己创建Counter实例,#counter(String)会帮你完成这些工作。通过名字可以重复使用这些metrics。

当然,也可以静态导入MetricRegistry的name方法避免混乱。

Histogram(直方图)

Histogram用来测量流数据的统计分布。除了最小值、最大值、平均值等常规指标外,直方图还可以测量中值、第75个、90个、95个、98个、99个和99.9个百分位。

上面的直方图能够用给出响应数量的字节表示。

Timer(定时器)

Timer能够测量给定代码调用频率的持续时间分布。

上面示例中的定时器能够测量每个请求处理花费的时间(纳秒),并给出每秒钟的请求频率。

Health Check(健康检查)

Metrics还可以通过metrics-healthchecks模块将服务的检查检查数据集中展示。

首先,创建一个HealthCheckRegistry实例:

接着,实现一个HealthCheck子类:

把这个实例注册给Metrics:

运行所有已注册的检查:

Metrics发布时内置了健康检查:ThreadDeadlockHealthCheck,通过Java内建的线程锁监测工具检查是否存在线程死锁。

通过JMX生成报告

要通过JMX生成报告:

一旦reporter启动,所有注册过的metrics都可以在JConsoleVisualVM中看到(前提是安装了MBeans插件):

metrics-visualvm

小贴士:双击选中任何一个metric属性,VisualVM就会开始为该数据绘制图形。很赞,不是吗?

通过HTTP生成报告

Metrics还提供了一个servlet(AdminServlet),为所有已注册的metrics提供了JSON表示。这个servlet还会执行健康检查,输出线程的转储信息(dump),并且为简单的“ping”回复提供负载均衡(除此以外,还提供了单servlet实例——MetricsServlet、HealthCheckServlet、ThreadDumpServletPingServlet,执行独立任务)。

要使用servlet,需要添加metrics-servlets模块到依赖:

注意:请确保POM文件中添加metrics.version属性,最新的版本是3.1.0。

到这里,你就可以将servlet映射到期望的路径。

其它报告

除了JMX和HTTP,Metrics还为下面的输出提供reporter:

开发资源

协议

Metrics遵循Apache 2.0开源协议发布。

官方网站:http://metrics.dropwizard.io/3.1.0/
开源地址:https://github.com/dropwizard/metrics

打赏支持我整理更多优质资源,谢谢!

打赏编辑

打赏支持我整理更多优质资源,谢谢!

任选一种支付方式

3 2 收藏

资源整理者简介:唐尤华

做自己喜欢的,编程、喝茶、看世界 个人主页 · 贡献了108个资源 · 18 ·    


直接登录

推荐关注

按分类快速查找

关于资源导航
  • 伯乐在线资源导航收录优秀的工具资源。内容覆盖开发、设计、产品和管理等IT互联网行业相关的领域。目前已经收录 1440 项工具资源。
    推送伯乐头条热点内容微信号:jobbole 分享干货的技术类微信号:iProgrammer