Metrics相关技术使用点

本文参考了原metrics的get start以及用户手册,如链接:http://metrics.dropwizard.io/3.1.0/getting-started/

技术点

1 Gauge 取值功能

用来进行获取某个值的功能,其封装一个getValue方法,那么在指定的周期时间之内,metrics可以调用这个方法用于获取特定的值。比如,某个队列当前大小,当前cpu,内存等信息。
因为是实时获取,因此可能有些值获取成本较高,或者不需要每次都取最新值,因此可以考虑使用类似缓存的技术。如在5s之内是缓存的。

2 Counter 计数功能

支持+1,-1的操作。这个可以在某些场景代替gauge,以提供更具体的控制。比如在确认已经进入某个方法时+1,退出时-1,就可以得到当前方法最新的活跃数,类似的场景还有获取线程数,数据库连接数。记录当前正在执行的方法数等。

3 Meter 吞吐量

用于记录当前某个方法的调用频率,包括调用总数,平均每秒调用次数,以及最近1分钟,5分钟,15分钟内的调用频率。这个方法不用说,自然记录系统当前运行情况了。

4 Histogram 性能监控

用于记录总数,最大时间,最小时间,以及平均时间,10%,20%,50,90%等花费的时间。针对具体的一个方法,这个可以用来监控性能。

5 Timer Meter+Histogram混合

如上所示,是一个meter和histogram的混合体。惟一的区别,这个需要手动记录耗时,先调用time()记录start,再调用context.stop记录end,以此来达到记录耗时的效果。

数据记录方式

  • ConsoleReporter 控制台输出
  • CsvReporter 输出到指定的csv文件当中
  • Slf4jReporter   使用slf4j日志记录方式进行输出
  • AdminServlet MetricsServlet Health,Ping等web输出方式    
    这是通过暴露一个web接口,可以通过访问这个接口来获取相应的数据,惟一不好的就是,它是以json的方式输出的。并且只有在访问的时候才会输出,不能达到定时记录的效果
  • GangliaReporter GraphiteReporter输出到图表服务器
    使用第三方报表服务器,这里将数据输出过去,就可以绘制相应的实时报表,不过就是需要要求第三方报表服务器,这里即ganglia和graphite(好像这个服务还依赖很多东西的)

自身提供的扩展功能

1 健康检测 指定服务是否有效

这是另一个功能,主要来来检测一个服务是否有效,通过一个HealthCheck的任务,定时调用check来进行检测。如果检测失败,则进行记录

2 metrics-jetty9 记录jetty运行情况

Connector记录jetty当前活跃连接,最大连接,失效连接以及连接的吞吐量以及性能等
Handler拦截记录请求(http请求)的各项指标(访问,数目等),以及1XX,200,404等请求的timer信息
ThreadPool记录jetty的运行线程的情况,数目,初始分配,最大分配以及任务数等

3 log4j 事件记录器

InstrumentedAppender用于记录log4j中各种不同事件的吞吐量统计

4 metrics-jvm JVM情况记录

记录gc情况
记录内存占用情况,包括总量,堆,非堆等
记录线程状态,总量,daemon量以及死锁线程等
记录死锁线程情况(使用MX探测)
记录bufferPool(byteBuffer)池的情况

5 metrics-servlet 记录web请求

与jetty9类似,只不过这里是工作在servlet层

6 第三方包

metrics-aspectj 用于使用aspectj的方式进行指标记录
metrics-spring 用于使用与aspectj类似的注解方式进行指标记录

记录方式考虑

从metrics提供的各项记录来看,除报表类需要安装服务器(暂不考虑)之外,还可以使用的是slf4j和csv。因为这里实际上还需要将不同name输出到不同的目的地,因此这里建议使用csv存储,metrics自己在csv中,即将不同的数据输出到不同的文件当中。

转载请标明出处:i flym
本文地址:https://www.iflym.com/index.php/code/201510250001.html

相关文章:

作者: flym

I am flym,the master of the site:)

发表评论

电子邮件地址不会被公开。 必填项已用*标注