点评CAT在Spring-Cloud中的实践

42次阅读

共计 2684 个字符,预计需要花费 7 分钟才能阅读完成。

作者在基于 Spring Cloud 微服务的架构时,一直苦于寻找一个可靠的性能监控平台,后在大神的推荐下,详细研究了点评 CAT,其满足对应用性能监控的需求(包含 SQL 性能,URL 响应性能等),将踩过的坑进行分享一下。

下载 cat 3.0 并启动

由于微服务集群并不是很庞大,且服务器资源有限,所以暂时只采用了单点部署的 CAT,集群部署和使用请参考 CAT 的 github,这里暂不做分享

  1. 配置系统的 JDK,以及下载对应的 tomcat,本人使用的是 JDK8 和 tomcat8.5.x 版本(JDK 的配置和 tomcat 的下载不做详细说明)CAT 下载地址 http://unidal.org/nexus/servi…
  2. 修改 tomcat 的 server.xml 使其支持中文的 URL

    <Connector port="8080" protocol="HTTP/1.1"
              URIEncoding="utf-8"    connectionTimeout="20000"
                  redirectPort="8443" />
    <!-- 增加  URIEncoding="utf-8"  -->
    
  3. 创建 CAT 使用的文件夹,并修改其配置

    mkdir /data
    chmod -R 777 /data/
     
  4. 修改 CAT 配置文件,创建 /data/appdatas/cat/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>
  5. 修改 cat 的数据库配置文件 /data/appdatas/cat/datasource.xml

    <?xml version="1.0" encoding="utf-8"?>
    
    <data-sources>
      <data-source id="cat">
        <maximum-pool-size>3</maximum-pool-size>
        <connection-timeout>1s</connection-timeout>
        <idle-timeout>10m</idle-timeout>
        <statement-cache-size>1000</statement-cache-size>
        <properties>
          <driver>com.mysql.jdbc.Driver</driver>
          <url><![CDATA[jdbc:mysql://127.0.0.1:3306/cat]]></url>  <!-- 请替换为真实数据库 URL 及 Port  -->
          <user>root</user>  <!-- 请替换为真实数据库用户名  -->
          <password>root</password>  <!-- 请替换为真实数据库密码  -->
          <connectionProperties><![CDATA[useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&socketTimeout=120000]]></connectionProperties>
        </properties>
      </data-source>
    </data-sources>
    
  6. 运行 CAT 的 SQL 脚本初始化数据库

  7. 将 CAT 的 war 重命名为 cat.war 放到 tomcat 的 webapps 下,并启动 tomcat(默认用户名密码 admin:admin),即可通过服务器 IP:8080/cat 进行访问

springboot 集成 cat client

  1. maven 引入 cat client

    <dependency>
        <groupId>com.dianping.cat</groupId>
        <artifactId>cat-client</artifactId>
        <version>3.0.0</version>
    </dependency>
    
  2. 使用 SPI 方式配置 cat client

    其中 com.dianping.cat.configuration.ClientConfigProvider 文件中填写完成实现类名称, 实现类代码如下:

    public class CatClientConfigProvider implements ClientConfigProvider {
    
        @Override
        public ClientConfig getClientConfig() {List<Server> servers = Lists.newArrayList();
            //cat 服务器地址,多个则需要使用, 分割
            String catServersStr = SpringUtils.getProperties("cat.servers");
            if (catServersStr != null) {String[] catServers = catServersStr.split(",");
                for (String catServer : catServers) {servers.add(new Server(catServer));
                }
                //domain 直接去 springboot 的 application name
                String domain = SpringUtils.getProperties("spring.application.name");
                ClientConfig config = new ClientConfig();
                config.setServers(servers);
                config.setDomain(domain);
    
                return config;
            }
    
            return null;
        }
    }
    

    app.properties 文件中填写 app.name= 应用名称

  3. 集成插件使用 cat client,插件位置


    我们分别使用了 mybatis 中的 sql 跟踪,log4j2 的 CatAppender,springboot 的 CatFilter,context 中的结合 feign 对链路进行跟踪(cat 链路跟踪不是一个完整的功能,如果对链路跟踪没有很高的要求可以进行使用)

    注意:如果项目中使用了 Hystrix,因为 cat 使用 ThreadLocal 保存跟踪的 ID,所以如果需要保证链路跟踪的正确性,需要将隔离策略改为 SEMAPHORE

CAT 基本使用

Problem 非常重要这里显示应用的报错,慢 SQL,慢 URL 等,也是作者最常用的模块,其他功能可以参考 Documents 进行使用,另外作者最近使用 Alert 功能,能将告警信息发送至钉钉,第一时间响应问题,还是很嗨的!当然需要自己实现一个类似于 webhook 的服务。

正文完
 0