本文共 4664 字,大约阅读时间需要 15 分钟。
CAT 是一个实时和接近全量的监控系统,它侧重于对Java应用的监控,基本接入了美团上海所有核心应用。目前在中间件(MVC、RPC、数据库、缓存等)框架中得到广泛应用,为美团各业务线提供系统的性能指标、健康状况、监控告警等。
准备一个tomcat,修改 tomcat conf 目录下 server.xml,防中文乱码。
Connector port="8080" protocol="HTTP/1.1" URIEncoding="utf-8" connectionTimeout="20000" redirectPort="8443" />
Linux
mkdir /datachmod -R 777 /data/
Windows
对程序运行盘下的/data/appdatas/cat和/data/applogs/cat有读写权限。例如cat服务运行在e盘的tomcat中,则需要对e:/data/appdatas/cat和e:/data/applogs/cat有读写权限。
此配置文件的作用是所有的客户端都需要一个地址指向CAT的服务端。
下载cat源码包:
解压后,数据库的脚本文件为 script/CatApplication.sqlmysql -uroot -Dcat < CatApplication.sql
3 1s 10m 1000 com.mysql.jdbc.Driver root root
官方下载:
重命名为cat.war进行部署,注意此war是用jdk8,服务端请使用jdk8版本
提交后,重启tomcat,访问http://127.0.0.1:8080/cat,出现如下界面,说明搭建成功。
进入cat源码包的 lib/java/jar ,将cat-client-3.0.0.jar 包 安装到本地maven仓库。
mvn install:install-file -DgroupId=com.dianping.cat -DartifactId=cat-client Dversion=3.0.0 -Dpackaging=jar -Dfile=cat-client-3.0.0.jar
创建一个springboot 工程,关键代码如下。
org.springframework.boot spring-boot-starter-web com.dianping.cat cat-client 3.0.0
需要在你的项目中创建 src/main/resources/META-INF/app.properties 文件, 并添加如下内容:
app.name={appkey}
appkey 只能包含英文字母 (a-z, A-Z)、数字 (0-9)、下划线 (_) 和中划线 (-)
server: port: 8760spring: application: name: cat-simple
@SpringBootApplication@RestControllerpublic class CatSimpleApplication { public static void main(String[] args) { SpringApplication.run( CatSimpleApplication.class, args ); } @PostMapping("/hi") public String hi(HttpServletRequest request){ String url = request.getRequestURL().toString(); // 创建一个 Transaction Transaction transaction = Cat.newTransaction( "URL", url ); try { // 处理业务 myBusiness(); // 设置状态 transaction.setStatus(Transaction.SUCCESS); } catch (Exception e) { // 设置错误状态 transaction.setStatus(e); // 记录错误信息 Cat.logError(e); } finally { // 结束 Transaction transaction.complete(); } return "hello"; } @PostMapping("/error") public String error(HttpServletRequest request){ String url = request.getRequestURL().toString(); // 创建一个 Transaction Transaction transaction = Cat.newTransaction( "URL", url ); try { // 处理业务 int i = 1 / 0; // 设置状态 transaction.setStatus(Transaction.SUCCESS); } catch (Exception e) { // 设置错误状态 transaction.setStatus(e); // 记录错误信息 Cat.logError(e); } finally { // 结束 Transaction transaction.complete(); } return "500"; } private void myBusiness() { //模拟业务处理的时间 try { Thread.sleep( 500 ); } catch (InterruptedException e) { e.printStackTrace(); } }}
请求
curl -X POST http://localhost:8760/hi
请求
curl -X POST http://localhost:8760/error
进入 cat 控制台,点击 Transaction 按钮 ,之后点击全部,会看到有哪些客户端,如图:
点击客户端 cat-simple ,出现如图:
如上图,可以清晰的看到 请求的 总个数(tatal)、均值(avg)、最大/最小(max/min)、标准差(std)等,其他都比较直观,标准差稍微复杂一点,大家自己可以推演一下怎么做增量计算。那集合运算,比如95线(表示95%请求的完成时间)、999线(表示99.9%请求的完成时间)
点击 “log View” 可以查看 错误信息,如图:
欢迎关注我的公众号《程序员果果》,关注有惊喜~~
转载于:https://blog.51cto.com/13698036/2395422