Metrics使用常规概念介绍

在我们系统运营过程中,需要时刻掌握系统的运行状态。状态监控是进行预警告警,异常排除,故障排查,应急实施的重要依据。在常规运维系统中我们有很好的工具可以监控服务器的运行状态,但是对业务系统的运行状态监控往往是比较欠缺的。本文介绍的是一个java运行状态监控工具Metrics。Metrics本来是一个Java库, 捕获JVM和应用程序级指标,当我们需要为某个系统某个服务做监控、做统计,就需要用到Metrics。Metrics可以监控代码级别的数据指标,比如TPS,RT等指标。这个指标能反应系统当前的处理能力,帮助我们判断资源是否已经不足,服务状态是否健康。

认识Metrics主要就是认识Metrics的核心类MetricRegistry和5种基本的度量类型:Meters Gauges  Counters   Histograms   和 Timers,以及四种 reporter数据报告工具:JMX, console, SLF4J, 和 CSV。

引入Metrics配置


使用Metrics之前,我们需要在pom.xml中依赖 metrics-core 包:

<dependencies>
        <dependency>
            <groupId>io.dropwizard.metrics</groupId>
            <artifactId>metrics-core</artifactId>
            <version>3.2.6</version>
        </dependency>
        
        <dependency>
            <groupId>io.dropwizard.metrics</groupId>
            <artifactId>metrics-healthchecks</artifactId>
            <version>3.2.6</version>
        </dependency>
</dependencies>


核心类MetricRegistry


MetricRegistry是Metics的核心类,在Metrics应用中作为其他度量的容器。所有的度量工具需要注册到MetricRegistry实例中。


五种 Metrics 类型


Gauges (仪表)
       Gauges是一个仪表盘,它是最简单的度量指标,只有一个简单的返回值,或者叫瞬时状态,类似我们汽车上的仪表盘,反应车辆的实时运行状态。Gauges用来获取的值最好是在应用中维护好的唯一值,如果返回值需要做额外的处理则会导致Gauges效率降低。通常这在系统设计中是不可取的,我们不能让监控系统影响业务系统的服务能量。

registry.register(name(SessionStore.class, "cache-evictions"), new Gauge<Integer>() {
    @Override
    public Integer getValue() {
        return cache.getEvictionsCount();
    }
});


Counters
       Counter 就是计数器,可以通过inc()和dec()方法对计数器做修改。Counter 只是用 Gauge 封装了 AtomicLong。通常用在消息队列,请求连接数上,用来获取当前队列或者请求数的数量大小。

final Counter evictions = registry.counter(name(SessionStore.class, "cache-evictions"));
evictions.inc();
evictions.inc(3);
evictions.dec();
evictions.dec(2);

Meters
         Meter是一种只能自增的计数器,用来度量一系列事件发生的速率(rate),例如统计函数调用频率TPS,统计数据库查询次数QPS都可以使用Meters。Meters可以统计最近1分钟,5分钟,15分钟,还有全部时间的速率。
Histograms度量一系列事件响应的效率(rate),例如统计某个函数的响应时长(RT)。

final Meter getRequests = registry.meter(name(WebProxy.class, "get-requests", "requests"));
getRequests.mark();
getRequests.mark(requests.size());

Histograms

final Histogram resultCounts = registry.histogram(name(ProductDAO.class, "result-counts");
resultCounts.update(results.size());


Timers
       Timers是Meters和Histograms的集成,当我们既要统计TPS又要统计耗时时,我们会使用Timers。

final Timer timer = registry.timer(name(WebProxy.class, "get-requests"));

final Timer.Context context = timer.time();
try {
    // handle request
} finally {
    context.stop();
}


HealthCheck
 HealthCheck 用来检测某个某个系统是否健康,例如数据库连接是否正常。

四种 reporter数据报告工具

Metrics本身不提供图表化的报告工具,但是它提供了很多模块可以为第三方库或者应用提供辅助统计信息, 比如Jetty, Logback, Log4j, Apache HttpClient, Ehcache, JDBI, Jersey, 它还可以将度量数据发送给Ganglia和Graphite以提供图形化的监控。


使用经验总结
        一般情况下,当我们需要统计某个函数被调用的频率(TPS),会使用Meters。当我们需要统计某个函数的执行耗时时,会使用Histograms。当我们既要统计TPS又要统计耗时时,我们会使用Timers。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值