點評CAT在Spring Cloud中的實踐

做者在基於Spring Cloud微服務的架構時,一直苦於尋找一個可靠的性能監控平臺,後在大神的推薦下,詳細研究了點評CAT,其知足對應用性能監控的需求(包含SQL性能,URL響應性能等),將踩過的坑進行分享一下。mysql

下載cat 3.0並啓動

因爲微服務集羣並非很龐大,且服務器資源有限,因此暫時只採用了單點部署的CAT,集羣部署和使用請參考CAT的github,這裏暫不作分享git

  1. 配置系統的JDK,以及下載對應的tomcat,本人使用的是JDK8和tomcat8.5.x版本(JDK的配置和tomcat的下載不作詳細說明)CAT下載地址http://unidal.org/nexus/servi...
  2. 修改tomcat的server.xml使其支持中文的URLgithub

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

    mkdir /data
    chmod -R 777 /data/
  4. 修改CAT配置文件,建立/data/appdatas/cat/client.xml並修改以下spring

    <?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.xmlsql

    <?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腳本初始化數據庫

    clipboard.png

  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 clienttomcat

    clipboard.png

    其中com.dianping.cat.configuration.ClientConfigProvider文件中填寫完成實現類名稱,實現類代碼以下:springboot

    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,插件位置

    clipboard.png
    咱們分別使用了mybatis中的sql跟蹤,log4j2的CatAppender,springboot的CatFilter,context中的結合feign對鏈路進行跟蹤(cat鏈路跟蹤不是一個完整的功能,若是對鏈路跟蹤沒有很高的要求能夠進行使用)

    注意:若是項目中使用了Hystrix,由於cat使用ThreadLocal保存跟蹤的ID,因此若是須要保證鏈路跟蹤的正確性,須要將隔離策略改成SEMAPHORE

CAT基本使用

Problem很是重要這裏顯示應用的報錯,慢SQL,慢URL等,也是做者最經常使用的模塊,其餘功能能夠參考Documents進行使用,另外做者最近使用Alert功能,能將告警信息發送至釘釘,第一時間響應問題,仍是很嗨的!固然須要本身實現一個相似於webhook的服務。

clipboard.png

相關文章
相關標籤/搜索