文章目录

    • 什么是CAT
    • CAT报表介绍
    • 下载和发布服务
    • 代码模块介绍
    • Linux系统搭建CAT服务
      • 前提
  • springboot集成CAT客户端
  • API介绍
    • Transaction
    • Event
    • Metric
  • 服务端页面的介绍
    • Transaction栏
    • Event栏
    • Problem栏
    • Heartbeat
    • Business
    • State
  • 框架集成
    • mybatis集成CAT
    • 日志整合(推荐)
    • springboot整合CAT(不推荐,会拦截所有请求并且不会上报日志)
    • Spring AOP整合(不推荐,如果异常被捕获则无法记录异常信息)
    • springMVC整合
  • CAT日志

什么是CAT

CAT是由大众点评开源的一款调用链监控系统,基于Java开发的。
优点:聚合报表丰富,中文支持好,国内案例多。
缺点:具有代码侵入性

CAT报表介绍

报表名称 报表内容
Transaction报表 一段代码的运行时间、次数、比如URL/cache/sql执行次数相应时间
Event报表 一段代码运行次数,比如出现一次异常
Problem报表 根据Transaction/Event数据分析出系统可能出现的一次慢程序
Heartbeat JVM状态信息
Business报表 业务指标等,用户可以自己定制

下载和发布服务

下载地址:https://github.com/dianping/cat.git

代码模块介绍

模块 介绍
cat-client 客户端,上报监控数据,代码集成的就是此模块
cat-consumer 服务端,收集监控数据进行统计分析,构建丰富的统计报表
cat-alerm 实时告警,提供报表指标的监控告警
cat-hadoop 数据存储,logview存储至Hdfs
cat-home 管理端,报表展示,配置管理等
cat-core 核心代码块,其他模块的通用依赖

Linux系统搭建CAT服务

前提

  1. 程序对于/data/目录具有读写权限,此目录会存储一些CAT必要的配置文件以及运行时的数据存储目录, CAT支持CAT_HOME环境变量,可以通过JVM参数修改默认的路径。使用命令mkdir /data ; chmod -R 777 /data
  2. 创建客户端和数据源配置文件,client.xml和datasources.xml配置文件,此两个配置文件在下载下来的代码与模块同级别的docker目录中有,只需要修改地址,使用命令
mkdir -p /data/appdatas/cat
cd /data/appdatas/cat/
vi client.xml
vi datasources.xml

client.xml配置文件讲解

<?xml version="1.0" encoding="utf-8"?>
<config mode="client"><servers><server ip="127.0.0.1" port="2280" http-port="8080"/></servers>
</config>

配置说明:

  • mode : 定义配置模式,固定值为client;–暂未使用
  • servers : 定义多个服务端信息;
  • server : 定义某个服务端信息;
  • ip : 配置服务端(cat-home)对外IP地址
  • port : 配置服务端(cat-home)对外TCP协议开启端口,固定值为2280;
  • http-port : 配置服务端(cat-home)对外HTTP协议开启端口, 如:tomcat默认是8080端口,若未指定,默认为8080端口;
  1. 创建数据库,并执行script目录下的SQL文件,
  2. 用maven打包,如果test报错,需要打包时忽略test,需要把cat-home打包为cat.war的包名,否则启动后访问不到
  3. 修改服务端的配置文件通过http://ip:port/cat/s/config?op=serverConfigUpdate 账号密码都为admin,
    需要将属性为remote-servers的节点value值改为服务器的ip,还有server节点的id属性的值改为服务器的ip。
    修改路由http://ip:port/cat/s/config?op=routerConfigUpdate,
    配置说明:

    • 把backup-server设置为当前服务器对外IP地址,端口固定为2280;
    • default-server定义可跳转的路由地址,可以设置多个。default-server的id属性配置可路由的cat-home服务IP地址,端口固定为2280;若需要禁用路由地址,可把enable设置为false。
    • 点击“提交”按钮,保存修改的路由配置

其他配置修改可参考项目中CAT部署.txt文件

springboot集成CAT客户端

依赖

<dependency><groupId>com.dianping.cat</groupId><artifactId>cat-client</artifactId><version>3.0.0</version>
</dependency>
  1. 配置app.properties文件
    在resources资源文件META-INF下新建app.properties,注意是src/main/resources/META-INF/文件夹。
    内容如:app.name=${appName};appName表示项目名
  2. 配置客户端文件,拷贝client.xml文件
    A、Linux\Mac 到/data/appdatas/cat下
    B、Windows 到系统运行盘的根目录/data/appdatas/cat下
    打开/data/appdatas/cat/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="10.1.5.87" port="2280" http-port="8999" /><!-- 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>

配置说明:

  • servers : 定义多个服务端信息;
  • server : 定义某个服务端信息;
  • ip : 配置服务端(cat-home)对外IP地址
  • port : 配置服务端(cat-home)对外TCP协议开启端口,固定值为2280;
  • http-port : 配置服务端(cat-home)对外HTTP协议开启端口, 如:tomcat默认是8080端口,若未指定,默认为8080端口;

测试代码

package cat.client;import com.dianping.cat.Cat;
import com.dianping.cat.message.Event;
import com.dianping.cat.message.Transaction;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class CatTestController {@RequestMapping("/test")public String test() {Transaction transaction = Cat.newTransaction("URL", "pageName");try {Cat.logEvent("URL.Server","serverIp", Event.SUCCESS,"ip=192.168.1.4");Cat.logMetricForCount("metric.key");Cat.logMetricForDuration("metric.key",5);int i = 1 / 0;transaction.setStatus(Transaction.SUCCESS);} catch (Exception e) {System.out.println(e);transaction.setStatus(e);Cat.logError(e);} finally {transaction.complete();}return "hello cat";}
}


API介绍

Transaction

Transaction适合记录系统跨越边界的程序访问行为,比如远程调用、数据库调用,也适合执行时间较长的业务逻辑监控,也可用来记录一段代码的执行时间和次数。

  • addData 添加额外的数据显示
  • setStatus 设置装填,成功可以设置Transaction.SUCCESS,异常可以把异常对象设置
  • setDurationInMillis 设置执行耗时(毫秒)
  • complete 结束Transaction,在finally里设置

Event

Event用来记录一件事发生的次数,比如记录系统异常,它和Transaction相比缺少了时间的统计,开销比Transaction要小
Cat.logEvent

// 参数1:type类型, 参数2:名称, 参数3:状态, 参数4:打印字符串
Cat.logEvent("URL.Server","serverIp", Event.SUCCESS,"ip=192.168.1.4");

Metric

Metric用于记录业务指标,指标可能包含对一个指标记录次数、记录平均值、记录总和,业务指标最低统计粒度为1分钟
代码

// 每秒会聚合Metric,举例来说,如果你在同一秒调用count三次(相同的name),累加他们的值,并且一次性上报给服务端,有两个参数的调用,第二个参数为count累加的基数,如果不写默认为1,
Cat.logMetricForCount("metric.key");

服务端页面的介绍

  • 图中1是上报日志类型栏
  • 2是应用栏,选择2才能到此界面
  • 3是选择时间栏,因为日志是根据时间分的,选择哪段时间可以查询哪段的,左侧为显示的查询时间
  • 4为分钟,要查看的日志分钟
  • 5为上报日志的应用

Transaction栏


监控代码运行情况:运行次数、QPS、错误次数、失败率、响应时间统计等,
如果看客户端的监控信息,需要看Type为URL的信息

Event栏

监控一段代码运行次数:例如记录程序中一个事件记录了多少次,错误了多少次。基本和Transaction栏一样,只是缺少了时间统计

Problem栏

Problem记录整个项目在运行过程中出现的问题,包括一些异常、错误、访问较长的行为。Problem报表是由logView存在的特征整合而成,方便用户定位问题。
所有错误汇总报表第一层分类,代表错误类型(称为type),比如error、long-url等,第二级分类(称为status),对应具体的错误,比如一个异常类名等

Heartbeat

Heartbeat报表是CAT客户端,以一分钟为周期,定期向服务端汇报当前运行时候的一些状态,包括JVM数据

Business

Business报表是可以查看业务的消耗时间

State

State报表显示了与CAT相关的信息

框架集成

在下载的代码中有可以用到的插件在integration目录,里面有框架集成CAT所需要的依赖和代码等相关信息

mybatis集成CAT

需要引入下载代码中的CatMybatisPlugin类,并配置mybatis的配置文件中,且此配置文件加载到springboot中,在application.yml中配置mybatis.config-location: classpath:mybatis/mybatis-config.xml
mybatis-config.xml

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><plugins><plugin interceptor="com.cat.plugin.CatMybatisPlugin"></plugin></plugins>
</configuration>

日志整合(推荐)

测试时用的3.0.0版本,但是CatLogbackAppender类中使用Cat.logTrace(type, name, “0”, data);提示Cat没有logTrace方法,而且即使走另一步logError,此错误必须在日志中记录日志的时候第二个参数为异常对象才能记录异常信息,否则只是log.error(“进入了testLog方法”);的话不会上报异常信息
需要把代码CatLogbackAppender.java类添加到项目中,在logback配置文件中添加此插件

<appender name="CatLog" class="com.cat.plugin.CatLogbackAppender"></appender>
<root level="info"><appender-ref ref="CatLog" />
</root>

此配置就可以自动记录异常的日志,但是不能记录非异常的日志,如果想记录info级别的需要在代码中添加Cat.getManager().setTraceMode(true);,因为从CatLogbackAppender源码中发现会判断此配置是否为true,如果为true才会记录日志信息,然而本人的logTrace方法的Cat.logTrace(type, name, “0”, data);报红,提示没有Cat没有logTrace方法,不知道是不是版本的问题

springboot整合CAT(不推荐,会拦截所有请求并且不会上报日志)

只需要添加CAT的过滤器,添加后可以在Transaction栏的type为URL的查看日志信息

package com.cat.plugin;import com.dianping.cat.servlet.CatFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class CatFileterConfig {@Beanpublic FilterRegistrationBean catFilter(){FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();CatFilter catFilter = new CatFilter();filterRegistrationBean.setFilter(catFilter);filterRegistrationBean.addUrlPatterns("/*");filterRegistrationBean.setName("cat-filter");filterRegistrationBean.setOrder(1);return filterRegistrationBean;}
}

Spring AOP整合(不推荐,如果异常被捕获则无法记录异常信息)

将CatAnnotation类和CatAopService类添加到项目中,CatAopService还需要添加@Component注解,在需要统计的方法上添加CatAnnotation注解即可

springMVC整合

和springboot整合一样,添加过滤器

CAT日志

服务端和客户端的CAT日志都保存在/data/applogs/cat目录下,如果配置完成后没达到想要的效果可以查看日志是否有错误信息,如客户端的日志可以看到连接的服务端的ip和端口是否正确。

服务监控CAT的使用相关推荐

  1. 大众美团服务链监控CAT

    github链接:https://github.com/dianping/cat CAT 作为服务端项目基础组件,提供了 Java, C/C++, Node.js, Python, Go 等多语言客户 ...

  2. 大众点评开源监控CAT概览

    1. CAT介绍 CAT是一个实时和接近全量的监控系统,它侧重于对Java应用的监控,除了与点评RPC组件融合的很好之外,他将会能与Spring.MyBatis.Dubbo 等框架以及Log4j 等结 ...

  3. 图文讲解Zabbix 分布式监控平台添加服务监控项(http,nginx,mysql)

    一.导语 此实验是在搭建好zabbix集群的基础上操作的,读者可查看文章 二.添加 http 服务监控项 http是zabbix自带的监控模板 点击 配置->主机-> server2 -& ...

  4. 聊聊Spring Boot服务监控,健康检查,线程信息,JVM堆信息,指标收集,运行情况监控等!...

    来自:https://juejin.im/post/5e2179def265da3e152d2561 前言 去年我们项目做了微服务1.0的架构转型,但是服务监控这块却没有跟上.这不,最近我就被分配了要 ...

  5. 揭秘百度微服务监控:百度游戏服务监控的演进

    导读:臣闻防患于未然者易,除患于已然者难 -- 明·马文升<添风宪以抚流民疏> 作为一个程序员,是否有留意到每逢节假日在各大景区时有程序员打开电脑紧急处理线上问题?如果线上出现大量的报警, ...

  6. Spring Boot 服务监控,健康检查,线程信息,JVM堆信息,指标收集,运行情况监控...

    作者:Richard_Yi 来源:http://39sd.cn/B2A0B 去年我们项目做了微服务1.0的架构转型,但是服务监控这块却没有跟上.这不,最近我就被分配了要将我们核心的微服务应用全部监控起 ...

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

    声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅. 1.概念:Hystrix 熔断机制 2.具体内容 所谓的熔断机制和日常生活中见到电路保险丝是非常相似的,当出现了问题之后,保险丝 ...

  8. 微服务架构 — 服务治理 — 服务监控与告警、服务日志与审计

    目录 文章目录 目录 日志与审计 监控与告警 配置中心 文档中心 日志与审计 日志分析组件应该在微服务兴起之前就被广泛使用了.即使单体应用架构,当访问数变大.或服务器规模增多时,日志文件的大小会膨胀到 ...

  9. 如何做自己的服务监控?spring boot 2.x服务监控揭秘

    Actuator是spring boot项目中非常强大一个功能,有助于对应用程序进行监视和管理,通过 restful api请求来监管.审计.收集应用的运行情况,针对微服务而言它是必不可少的一个环节. ...

最新文章

  1. unbuntu下安装flash插件
  2. VS2005右键点击转到定义后出现“未定义符号”的提示及其解决
  3. Nacos离GA更进一步:0.9.0发布
  4. 【待填坑】LG_4996_咕咕咕
  5. Java实现excel的读与写(Apache POI)
  6. 服务器与网页之间异步,在服务器端判断request来自Ajax请求(异步)还是传统请求(同步)...
  7. 雨林木风win11 64位原版系统v2021.08
  8. hbase sqoop 实验_SQOOP安装及使用-实验
  9. Your branch is ahead of ‘origin/main‘ by 1 commit.
  10. atitit 项目团队管理之道.docx
  11. 网络安全:系统进程的基本概述
  12. 唐宇迪数据分析学习笔记
  13. 史上最全!!收藏了!3D建模软件大全
  14. 环境工程学(整理知识点)
  15. android 焦点的作用,详细介绍Android中的视图焦点Focus的使用
  16. 新手零基础如何系统的自学网络安全,2022最新最全学习路线
  17. 【工具】解决Windows7影音制作的错误:C946001E
  18. Shiro教程,整合SpringBoot项目实战(笔记)
  19. 从服务器基础环境配置到搭建Docker+Gitlab+Gitlab Runner,完整介绍Spring Boot项目的持续集成与持续交付具体实现!
  20. 自学 iOS 开发的一些经验 - 转自无网不剩的博客

热门文章

  1. 创建表空间(Oracle)
  2. qq令牌64位密钥提取_QQ令牌工具 活令牌查询动态密码(大哥牌)
  3. Jquery选择器(一)
  4. matlab 小波的分解与重构
  5. 20144306《网络对抗》MAL_恶意代码分析
  6. 机房空调系统集中控制节能降耗方案
  7. pLC支持C语言编程执行复杂控制,能够实现多种工作方式的plc控制系统的编程
  8. 将特殊字体添加到了html页面中
  9. mybatis-config.xml配置文件中“http://mybatis.org/dtd/mybatis-3-config.dtd”报错
  10. 从一个CFS调度案例谈Linux系统卡顿的根源