点评CAT在Spring Cloud中的实践

作者: 爱骑车的豆子 | 来源:发表于2019-06-20 11:08 被阅读99次

    作者在基于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/service/local/repositories/releases/content/com/dianping/cat/cat-home/3.0.0/cat-home-3.0.0.war

    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 ClientConfiggetClientConfig() {

            List 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);

                    returnconfig; 

                 }returnnull;

            }

    }

    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的服务。

    CAT的文档位置

    相关文章

      网友评论

        本文标题:点评CAT在Spring Cloud中的实践

        本文链接:https://www.haomeiwen.com/subject/vfkdqctx.html