利用 perf4j 做服务监控

perf4j 是什么

--------------------

perf4j 是一套简单的服务监控框架,可以用来做一些系统常需要的监控,比如实时系统吞吐量,系统响应时间

perf4j生成监控图表

----------------------------

pef4j可以生成的图表支持 Mean, Min, Max, StdDev, Count and TPS

  • Mean 平均响应时间
  • Min 最小响应时间
  • Max 最大响应时间
  • Count 总数统计
  • TPS  吞吐量

监控图表样式如下

perf4j 使用与配置

-----------------------

这里只介绍perf4j与log4j配合使用,对于使用log4j之外的系统还是请到官网看介绍http://perf4j.codehaus.org/  ,在log4j.xml中插入下面配置

<!-- 打点记录 -->

<logger name="org.perf4j.TimingLogger" additivity="false">

<level value="INFO"/>

<appender-ref ref="CoalescingStatistics"/>

</logger>

<!-- 具体输出的图表,一个配置对应一张图表 -->

<appender name="ExecutionSlow"

class="org.perf4j.log4j.GraphingStatisticsAppender">

<!-- Possible GraphTypes are Mean, Min, Max, StdDev, Count and TPS <!--

<param name="GraphType" value="Count"/>

<!-- The tags of the timed execution blocks to graph are specified here -->

<!--<param name="TagNamesToGraph" value="[*]"/>-->

<appender-ref ref="graphsFileAppender"/>

</appender>

<appender name="ExecutionTPS"

class="org.perf4j.log4j.GraphingStatisticsAppender">

<param name="GraphType" value="TPS"/>

<param name="TagNamesToGraph" value="firstBlock,/order/commit"/>

<appender-ref ref="graphsFileAppender"/>

</appender>

<appender name="ExecutionMax"

class="org.perf4j.log4j.GraphingStatisticsAppender">

<!-- Possible GraphTypes are Mean, Min, Max, StdDev, Count and TPS -->

<param name="GraphType" value="Max"/>

<!-- The tags of the timed execution blocks to graph are specified here -->

<!--<param name="TagNamesToGraph" value="firstBlock,secondBlock"/>-->

<appender-ref ref="graphsFileAppender"/>

</appender>

<!— 分析打点后得出的结果,用于绘制图表的节点 -->

<appender name="graphsFileAppender" class="org.apache.log4j.FileAppender">

<param name="File" value=“perfGraphs.log"/>

<layout class="org.apache.log4j.PatternLayout">

<param name="ConversionPattern" value="%m%n"/>

</layout>

</appender>

<!-- 需要展现的图表-->

<appender name="CoalescingStatistics" class="org.perf4j.log4j.AsyncCoalescingStatisticsAppender">

<param name="TimeSlice" value="30000"/>

<appender-ref ref="ExecutionTPS"></appender-ref>

<appender-ref ref="ExecutionTimes"></appender-ref>

<appender-ref ref="ExecutionCount"></appender-ref>

<appender-ref ref="ExecutionMax"></appender-ref>

<appender-ref ref="ExecutionStdDev"></appender-ref>

<appender-ref ref="ExecutionSlow"></appender-ref>

</appender>

在自己的web项目中的web.xml文件中配置如下信息

<servlet>

<servlet-name>perf4j</servlet-name>

<servlet-class>org.perf4j.log4j.servlet.GraphingServlet</servlet-class>

<!--

The graphNames parameter determines which graphs to expose. The

param-value should be a comma-separated list of the

appender NAMES as defined in the log4j.xml file.

-->

<!--<init-param>

<param-name>TPS</param-name>

<param-value>graphExecutionTPS</param-value>

</init-param>-->

<!-- <init-param>

<param-name>Mean</param-name>

<param-value>graphExecutionTimes</param-value>

</init-param>-->

</servlet>

<servlet-mapping>

<servlet-name>perf4j</servlet-name>

<url-pattern>/admin</url-pattern>

</servlet-mapping>

以springmvc项目为列,加入一个拦截器

public class PerformanceInterceptor extends HandlerInterceptorAdapter {

protected Logger logger = Logger.getLogger(this.getClass());

@Override

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

StopWatch stopWatch = new Log4JStopWatch();

request.setAttribute("stopWatch", stopWatch);

stopWatch.lap("firstBlock");

String reqURI = request.getRequestURI();

stopWatch.start(reqURI);

return super.preHandle(request, response, handler);

}

@Override

public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

super.postHandle(request, response, handler, modelAndView);

}

@Override

public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

StopWatch stopWatch = (StopWatch) request.getAttribute("stopWatch");

long spentTime = stopWatch.getElapsedTime();

String reqURI = request.getRequestURI();

stopWatch.stop(reqURI);

stopWatch.lap("secondBlock");

if (spentTime > 1000) {

stopWatch.lap("["+reqURI+"]");

}

super.afterCompletion(request, response, handler, ex);

}

}

配置完成,然后访问 http://xxxx.com/admin,此时需要有访问google服务器的能力,因为渲染图表是利用google在线chartAPI

时间: 2024-07-29 20:56:58

利用 perf4j 做服务监控的相关文章

Spring Cloud实战之初级入门(四)— 利用Hystrix实现服务熔断与服务监控

目录 1.环境介绍 2.服务监控 2.1 加入依赖 2.2 修改配置文件 2.3 修改启动文件 2.4 监控服务 2.5 小结 3. 利用hystrix实现消费服务熔断 3.1 加入服务熔断 3.2 测试服务熔断 4. 利用turbine监控所有应用 4.1 创建工程 4.2 修改配置文件 4.3 修改启动文件 4.4 启动 5.一点点重要的事情 1.环境介绍 本篇文章涉及到前面文章的工程,mirco-service-provider.mirco-service-consumer以及需要另外新建

后端线上服务监控与报警方案

一.背景 1.上线期间服务稳定性观察较困难 一个功能上线后,其实研发心里根本没底儿,不知道这个功能上线以后是不是真的没问题:有经验一些老同学还知道直接登录线上机器去tail -f php.error.log,但是对于新同学来说,基本就只能等着被通知服务故障. 退一步说,即便是能去线上去tail -f查看错误日志,但是线上是多集群部署的,服务器都特别多,研发不可能在每一台机器上都能看到日志:即便是有日志收集机器,也得在各个集群下分别tail -f,定位问题很不方便! 再退一步说,即便是在线上机器看

SpringCloud系列七:Hystrix 熔断机制(Hystrix基本配置、服务降级、HystrixDashboard服务监控、Turbine聚合监控)

1.概念:Hystrix 熔断机制 2.具体内容 所谓的熔断机制和日常生活中见到电路保险丝是非常相似的,当出现了问题之后,保险丝会自动烧断,以保护我们的电器, 那么如果换到了程序之中呢? 当现在服务的提供方出现了问题之后整个的程序将出现错误的信息显示,而这个时候如果不想出现这样的错误信息,而希望替换为一个错误时的内容. 一个服务挂了后续的服务跟着不能用了,这就是雪崩效应 对于熔断技术的实现需要考虑以下几种情况: · 出现错误之后可以 fallback 错误的处理信息: · 如果要结合 Feign

利用jstat 自动发现监控java程序

利用jstat 自动发现监控java程序 这个项目搞了好几天,总结了一下原因: 对自动发现注册监控不了解原理,之前有遗留的脚本很多都不支持不能 用对脚本还不能够完全掌握,有时间还是要好好看看 还是思路问题,解决问题的方法千千万,不要吊死在一棵树上,多试试几种死法本人比较懒,之前打算使用jmx监控,发现公司使用的supervisorctl 管理jar包启动,自己也是第一次使用,这里不做赘述. 使用jstat 命令来获取参数,这里使用的是计划任务,之前放在脚本中,服务搞死了 哈哈哈 干货在这里直接上

为什么要做IT监控?

为什么要做监控? 根据企业的发展,信息化水平的提高,各个企事业单位的IT设备,尤其是服务器.网络安全设备就越来越多.从几台设备到几十台上百台等等,机房也越来越大,从一个房间到一层楼的机房. 业务上也越来越依赖IT的支撑,各种计费系统.生产系统.控制系统,任何的停顿都会造成巨大的经济损失,甚至社会影响: 过去的IT部门做的是什么,"救火队",平时就在那里等着,等着用户打电话来,某个系统用户打电话来:系统不能用,用户不能交费:立马就会有几个人IT部门的人跳起来,登录服务器查看系统是怎么了,

利用Zabbix ODBC monitoring监控SQL Server

利用Zabbix ODBC monitoring监控SQL Server 1. 创建群组ODBC Templates 2. 创建Template SQL Server和Template MySQL 3. 在Zabbbix上安装unixODBC shell> yum -y install unixODBC unixODBC-devel 4. 在Zabbix上安装对应数据库的unixODBC驱动 unixODBC有一个支持的数据库和驱动列表: http://www.unixodbc.org/driv

利用XtraBackup做mysql不停机重做主从复制

不停机做mysql主从同步,可以使用mysqldump,但是这个效率比较低,利用XtraBackup来实现这个,效率比较高! 一 xtrabackup安装: yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL rpm -ivh percona-xtrabackup-2.2.12-1.el6.x86_64.rpm 安装libenv: wget ftp://rpmfind.net/linu

利用Shell生成Zabbix监控的数字报表

我们都知道Zabbix是一个非常强大的监控工具,我们公司呢也在用Zabbix监控所有网站的状态. 最近有一个需求,就是我们需要生成一份报告,报告里要包含前一天一整天的时间节点和对应的响应时间,这样的报告用来统计网站的可用性达到了什么水准. ? Zabbix本身自带报告功能,可是都是图像的,并没有数据格式的.虽然没有提供数据格式的报表,但是Zabbix提供了一套API,可以根据需求获取对应的数据(JSON格式),于是我就写了个脚本,用来把每个监控的网址的监控数据输出到一个CSV文件中.(后续可以用

通过Spark Rest 服务监控Spark任务执行情况

1.Rest服务 Spark源为了方便用户对任务做监控,从1.4版本启用Rest服务,用户可以通过访问地址,得到application的运行状态. Spark的REST API返回的信息是JSON格式的,开发者们可以很方便地通过这个API来创建可视化的Spark监控工具.目前 这个API支持正在运行的应用程序,也支持历史服务器.在请求URL都有/api/v1.比如,对于历史服务器来说,我们可以通过 http://***:18080/api/v1 来获取一些信息,端口可以改:对于正在运行的Spar