昨天已经搭建好了cat服务端,今天我们来看怎么在一个ssm项目中去用cat(一个小小的demo)

1.背景:

CAT(Central Application Tracking)是由吴其敏(前大众点评首席架构师,现携程架构负责人)主导设计基于Java开发打造的实时应用监控平台,为大众点评网提供了全面的监控服务和决策支持。AT作为大众点评网基础监控组件,它已经在中间件框架(MVC框架,RPC框架,数据库框架,缓存框架等)中得到广泛应用,为点评各业务线提供系统的性能指标、健康状况、基础告警等。

2.为什么要用cat实时监控

  • 线上发布了服务,怎么知道它一切正常,比如发布5台服务器,如何直观了解是否有请求进来,访问一切正常。
  • 当年有一次将线上的库配置到了Beta,这么低级的错误,排错花了一个通宵,十几个人。
  • 某个核心服务挂了,导致大量报错,如何确定到底是哪里出了问题。
  • SOA带来的问题,调用XX服务出问题,很慢,是否可以衡量?
  • 应用程序有性能瓶颈,如何提供一些有效工具发现?


3.demo





demo下载:


https://download.csdn.net/download/m0_37499059/10375430

核心代码如下:

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.cxx.demo</groupId><artifactId>cat</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency><dependency><groupId>com.dianping.cat</groupId><artifactId>cat-core</artifactId><version>2.0.0</version></dependency><dependency><groupId>com.dianping.cat</groupId><artifactId>cat-client</artifactId><version>2.0.0</version></dependency><dependency><groupId>com.dianping.cat</groupId><artifactId>cat-consumer</artifactId><version>2.0.0</version></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.14</version></dependency><!--spring mvc--><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>4.0.9.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>4.0.9.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>4.0.9.RELEASE</version></dependency><!--jsp--><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version><type>jar</type></dependency><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.1</version><scope>provided</scope></dependency><!-- https://mvnrepository.com/artifact/org.apache.commons/commons-io --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-io</artifactId><version>1.3.2</version></dependency></dependencies><build><plugins><!--配置tomcat插件--><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat6-maven-plugin</artifactId><configuration><path>/</path><port>8081</port></configuration></plugin></plugins></build>
</project>

spring-mvc.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd"><!-- scan the package and the sub package --><context:component-scan base-package="com.k12ct.demo" /><!-- don't handle the static resource --><mvc:default-servlet-handler /><!-- if you use annotation you must configure following setting --><mvc:annotation-driven /><!-- configure the InternalResourceViewResolver --><beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"id="internalResourceViewResolver"><!-- 前缀 --><property name="prefix" value="/WEB-INF/jsp/" /><!-- 后缀 --><property name="suffix" value=".jsp" /></bean><!-- 配置拦截器 --><mvc:interceptors><mvc:interceptor><mvc:mapping path="/**" /><bean class="com.k12ct.demo.CatInterceptor"></bean></mvc:interceptor></mvc:interceptors>
</beans>

web.xml

<?xml version="1.0"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd"><web-app><display-name>class-service</display-name><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring-mvc.xml</param-value></init-param><!-- <load-on-startup>1</load-on-startup> --></servlet><servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>/</url-pattern></servlet-mapping>
</web-app>

在resources下建立如下文件:

app.properties:

app.name=demo

client.xml

<config mode="client"><domain id="demo" />
</config>

写拦截器:

package com.k12ct.demo;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;import com.dianping.cat.Cat;
import com.dianping.cat.message.Message;
import com.dianping.cat.message.Transaction;public class CatInterceptor implements HandlerInterceptor {private ThreadLocal<Transaction> tranLocal = new ThreadLocal<Transaction>();private ThreadLocal<Transaction> pageLocal = new ThreadLocal<Transaction>();@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception {String uri = request.getRequestURI();Transaction t = Cat.newTransaction("URL", uri);Cat.logEvent("URL.Method", request.getMethod(), Message.SUCCESS, request.getRequestURL().toString());Cat.logEvent("URL.Host", request.getMethod(), Message.SUCCESS, request.getRemoteHost());tranLocal.set(t);return true;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,ModelAndView modelAndView) throws Exception {String viewName = modelAndView != null ? modelAndView.getViewName() : "无";Transaction t = Cat.newTransaction("View", viewName);pageLocal.set(t);}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)throws Exception {// 请求-页面渲染前Transaction pt = pageLocal.get();pt.setStatus(Transaction.SUCCESS);pt.complete();// 总计Transaction t = tranLocal.get();t.setStatus(Transaction.SUCCESS);t.complete();}}

在业务逻辑中添加监控代码:

package com.k12ct.demo;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;import com.dianping.cat.Cat;
import com.dianping.cat.message.Event;
import com.dianping.cat.message.Transaction;  @Controller
@RequestMapping("/mvc")
public class HelloController {@RequestMapping("/hello")public String hello(){    String pageName = "helloworld";String serverIp = "localhost";double amount = 0;Transaction t = Cat.newTransaction("URL", pageName);try {Cat.logEvent("URL.Server", serverIp, Event.SUCCESS, "ip="+ serverIp + "&...");Cat.logMetricForCount("PayCount");Cat.logMetricForSum("PayAmont", amount);t.setStatus(Transaction.SUCCESS);} catch (Exception e) {e.printStackTrace();t.setStatus(e);} finally {t.complete();}return "hello";}
}

注意:在项目根目录下创建如下文件

比如我idea项目在F盘,


client.xml

<?xml version="1.0" encoding="utf-8"?><config mode="client" xmlns:xsi="http://www.w3.org/2001/XMLSchema" xsi:noNamespaceSchemaLocation="config.xsd"><servers><!-- Local mode for development --><server ip="127.0.0.1" port="2280" http-port="2280" /><!-- If under production environment, put actual server address as list. --><!-- <server ip="192.168.7.71" port="2280" /> <server ip="192.168.7.72" port="2280" /> --></servers>
</config>

cat实时监控-入门demo相关推荐

  1. CAT实时监控预警系统

    项目地址:https://github.com/dianping/cat CAT 简介 CAT 是基于 Java 开发的实时应用监控平台,为美团点评提供了全面的实时监控告警服务. CAT 作为服务端项 ...

  2. CAT 实时监控与项目集成

    一. CAT概要 1.CAT是什么? CAT(Central Application Tracking)是大众点评开源的一套基于Java开发的实时应用监控平台,提供了全面的监控服务和业务决策支持.主要 ...

  3. 看大众点评如何通过实时监控系统CAT打造7*24服务

    为什么80%的码农都做不了架构师?>>>    看大众点评如何通过实时监控系统CAT打造7*24服务 2015-06-08  尤勇  高可用架构 https://github.com ...

  4. 网络视频监控如何入门?如何安装和配置、设备选择和实时监控?

    网络视频监控是一种先进的安全技术,它可以通过互联网连接到远程视频服务器,使用户可以随时随地监控所关注的地点.本文将介绍网络视频监控的基础入门知识,包括安装和配置.设备选择和实时监控等方面. 一.安装和 ...

  5. CAT ----分布式实时监控系统

    2011年底,我加入大众点评网,出于很偶然的机会,决定开发CAT,为各个业务线打造分布式实时监控系统,CAT的核心概念源自eBay闭源系统CAL----eBay的几大法宝之一. 在当今互联网时代,业务 ...

  6. 实时监控Cat之旅~对Get和Post进行封装,支持分布式消息树

    对第三方接口的调用我们需要对GET和POST进行监控,看一些请求的执行是否成功,如A调用B,B调用C,C调用D,这一连串的东西需要我们使用cat进行记录,进行记录之后,我们可以很容易的发现请求响应的时 ...

  7. hive读取hdfs存放文件_数据获取层之Flume快速入门(一) 实时监控单个追加文件

    实时监控 Hive 日志,并上传到 HDFS 中 实现步骤 1.Flume 要想将数据输出到 HDFS,必须持有 Hadoop 相关 jar 包 commons-configuration-1.6.j ...

  8. 监控url_熬夜之作:一文带你了解Cat分布式监控

    Cat 是什么? CAT(Central Application Tracking)是基于 Java 开发的实时应用监控平台,包括实时应用监控,业务监控. CAT 作为服务端项目基础组件,提供了 Ja ...

  9. 熬夜之作:一文带你了解Cat分布式监控

    Cat 是什么? CAT(Central Application Tracking)是基于 Java 开发的实时应用监控平台,包括实时应用监控,业务监控. CAT 作为服务端项目基础组件,提供了 Ja ...

最新文章

  1. 实用的项目管理系统,才能让协同工作更顺畅
  2. 客户端连接XENAPP 6.5 提示 该地址未配置xenapp服务器
  3. [19/03/21-星期四] 异常(Exception) (一)
  4. 大数据 java 代码示例_Java变量类型与示例
  5. VHDL基础 学习笔记
  6. ASP.NET的分页方法(一)
  7. django 模型 使用 DateTimeFields 字段 auto_now_add 属性 实现 插入数据时 自动记录时间...
  8. 黑苹果hidp显示不清楚_魔兽世界9.0:盟约指挥台不显示胜率?搞清楚机制,轻松收菜!...
  9. kubenetes 1.4 安装后8080端口无法访问
  10. Nachos Lab3 同步机制
  11. HCIA-RS(211-中文题库,2019最新题库)
  12. SAP 特殊字符的处理CL_ABAP_CHAR_UTILITIES(去除多余的换行符、换页符、Tab符)
  13. 计算机硬盘无法启动怎么办,解决办法:如果计算机无法从硬盘启动怎么办
  14. 缩减50%调试成本  小匠物联推可远程的串口调试助手
  15. 制作启动U盘重装系统
  16. 【无标题】c++ 实现 interpolate.interp1d插值
  17. Hexo文件压缩:使用hexo-neat插件压缩页面静态资源
  18. 怎样读 nacos 源码——服务端处理客户端注册解读
  19. 我在CSDN发表原创文章,被别人拿去发了一篇北大核心,论文难道就是东拼西凑?
  20. 3D打印与3D扫描的未来在哪里

热门文章

  1. NEON----ARM通用 SIMD 引擎
  2. 京东商城项目实战(1)------京东商城首页
  3. LeetCode刷题之python解法(持续更新)
  4. win10操作系统如何进行局域网文件共享
  5. 谋杀之谜 良辰吉日 人物关系图
  6. 应用时间序列分析清华大学出版社电子版_数据分析模型9——预知未来的算法:时间序列分析...
  7. 魔兽服务器优化,官方:游戏环境优化方案启动 新服务器开放
  8. 简单易懂ppi和dpi的本质和由来
  9. HTML动画实现唱片封面,HTML5专辑封面创意设计
  10. 密码(Password)