欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

详解Metrics应用监控指标的使用说明

程序员文章站 2024-02-19 19:45:40
题前:做过虚拟化级别、系统级别、容器级别监控;应用级别监控有哪些方法可以做?metrics是个很好的选择。java、python、go均可支持。metrics可以为你的代码的运行提供无与伦比的洞察力。...

题前:做过虚拟化级别、系统级别、容器级别监控;应用级别监控有哪些方法可以做?

metrics是个很好的选择。java、python、go均可支持。

metrics可以为你的代码的运行提供无与伦比的洞察力。作为一款监控指标的度量类库,它提供了很多模块可以为第三方库或者应用提供辅助统计信息, 比如jetty, logback, log4j, apache httpclient, ehcache, jdbi, jersey, 它还可以将度量数据发送给ganglia和graphite以提供图形化的监控。

metrics提供了gauge、counter、meter、histogram、timer等度量工具类以及health check功能。

详解Metrics应用监控指标的使用说明

引用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 提供了一个静态的辅助方法用来生成这个名字:

生成的name为com.colobu.queuemanager.jobs.size

实际编程中对于队列或者类似队列的数据结构,你不会简单的度量queue.size(), 因为在java.util和java.util.concurrent包中大部分的queue的#size是o(n),这意味的调用此方法会有性能的问题, 更深一步,可能会有lock的问题。

ratiogauge可以计算两个gauge的比值。 meter和timer可以参考下面的代码创建。下面的代码用来计算计算命中率 (hit/call)。

cachedgauge可以缓存耗时的测量。derivativegauge可以引用另外一个gauage。

counter (计数器)

counter是一个atomiclong实例, 可以增加或者减少值。 例如,可以用它来计数队列中加入的job的总数。

和上面gauage不同,这里我们使用的是metrics.counter方法而不是metrics.register方法。 使用metrics.counter更简单。

meter ()

meter用来计算事件的速率。 例如 request per second。 还可以提供1分钟,5分钟,15分钟不断更新的平均速率。

histogram (直方图)

histogram可以为数据流提供统计数据。 除了最大值,最小值,平均值外,它还可以测量 中值(median),百分比比如xx%这样的quantile数据 。

private final histogram responsesizes     = metrics.histogram(name(requesthandler.class, "response-sizes"); public void handlerequest(request request, response response) {     // etc     responsesizes.update(response.getcontent().length); }

这个例子用来统计response的字节数。
metrics提供了一批的reservoir实现,非常有用。例如slidingtimewindowreservoir 用来统计最新n个秒(或其它时间单元)的数据。

timer (计时器)

timer用来测量一段代码被调用的速率和用时。

这段代码用来计算中间的代码用时以及request的速率。

health check (健康检查)

metric还提供了服务健康检查能力, 由metrics-healthchecks模块提供。
先创建一个healthcheckregistry实例。

再实现一个healthcheck子类, 用来检查数据库的状态。

注册一下。

最后运行健康检查并查看检查结果。

metric内置一个threaddeadlockhealthcheck, 它使用java内置的线程死锁检查方法来检查程序中是否有死锁。

jmx报表

通过jmx报告metric。

一旦启动, 所有registry中注册的metric都可以通过jconsole或者visualvm查看 (通过mbean插件)。

http报表

metric也提供了一个servlet (adminservlet)提供json风格的报表。它还提供了单一功能的servlet (metricsservlet, healthcheckservlet, threaddumpservlet, pingservlet)。
你需要在pom.xml加入metrics-servlets。

其它报表

除了jmx和http, metric还提供其它报表。

stdout, using consolereporter from metrics-core

csv files, using csvreporter from metrics-core

slf4j loggers, using slf4jreporter from metrics-core

ganglia, using gangliareporter from metrics-ganglia

graphite, using graphitereporter from metrics-graphite

metricset

可以将一组metric组织成一组便于重用。

一些模块 metrics-json提供了json格式的序列化。
以及为其它库提供度量的能力metrics-ehcachemetrics-httpclientmetrics-jdbimetrics-jerseymetrics-jettymetrics-log4jmetrics-logbackmetrics-jvmmetrics-servlet 注意不是metrics-servlets

第三方库

这里重点介绍一下metrics for spring

metrics for spring

这个库为spring增加了metric库, 提供基于xml或者注解方式。

  • 可以使用注解创建metric和代理类。 @timed, @metered, @exceptionmetered, @counted
  • 为注解了 @gauge 和 @cachedgauge的bean注册gauge
  • 为@metric注解的字段自动装配
  • 注册healthcheck
  • 通过xml配置产生报表
  • 通过xml注册metric和metric组

你需要在pom.xml加入

基本用法

xml风格的配置

java注解的方式

注: go metrics使用: go语言metrics应用监控指标基本使用说明

以上就是详解metrics应用监控指标的使用说明的详细内容,更多关于metrics应用监控指标使用的资料请关注其它相关文章!