調用鏈監(jiān)控 CAT 之 入門

文章首發(fā)于微信公眾號《程序員果果》
地址:https://mp.weixin.qq.com/s/G15cw9yXpq4cOFB2C29JYw

簡介

CAT 是一個實時和接近全量的監(jiān)控系統,它側重于對Java應用的監(jiān)控,基本接入了美團上海所有核心應用。目前在中間件(MVC、RPC、數據庫、緩存等)框架中得到廣泛應用,為美團各業(yè)務線提供系統的性能指標、健康狀況、監(jiān)控告警等。

優(yōu)勢

  • 實時處理:信息的價值會隨時間銳減,尤其是事故處理過程中。
  • 全量數據:全量采集指標數據,便于深度分析故障案例。
  • 高可用:故障的還原與問題定位,需要高可用監(jiān)控來支撐。
  • 故障容忍:故障不影響業(yè)務正常運轉、對業(yè)務透明。
  • 高吞吐:海量監(jiān)控數據的收集,需要高吞吐能力做保證。
  • 可擴展:支持分布式、跨 IDC 部署,橫向擴展的監(jiān)控系統。

開源產品比較

快速上手

本地部署

步驟1:部署tomcat

準備一個tomcat,修改 tomcat conf 目錄下 server.xml,防中文亂碼。

Connector port="8080" protocol="HTTP/1.1"
           URIEncoding="utf-8"    connectionTimeout="20000"
               redirectPort="8443" />  <!-- 增加  URIEncoding="utf-8"  -->

步驟2:程序對于/data/目錄具體讀寫權限(重要)

  • Linux

  • 要求/data/目錄能進行讀寫操作,如果/data/目錄不能寫,建議使用linux的軟鏈接鏈接到一個固定可寫的目錄。

  • 此目錄會存一些CAT必要的配置文件以及運行時候的數據存儲目錄。

  • CAT支持CAT_HOME環(huán)境變量,可以通過JVM參數修改默認的路徑。

mkdir /data
chmod -R 777 /data/
  • Windows

對程序運行盤下的/data/appdatas/cat和/data/applogs/cat有讀寫權限。例如cat服務運行在e盤的tomcat中,則需要對e:/data/appdatas/cat和e:/data/applogs/cat有讀寫權限。

步驟3: 配置/data/appdatas/cat/client.xml ($CAT_HOME/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>

此配置文件的作用是所有的客戶端都需要一個地址指向CAT的服務端。

步驟4: 安裝CAT的數據庫

下載cat源碼包:https://codeload.github.com/dianping/cat/
解壓后,數據庫的腳本文件為 script/CatApplication.sql

mysql -uroot -Dcat < CatApplication.sql

步驟5: 配置/data/appdatas/cat/datasources.xml($CAT_HOME/datasources.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>  <!-- 請?zhí)鎿Q為真實數據庫URL及Port  -->
            <user>root</user>  <!-- 請?zhí)鎿Q為真實數據庫用戶名  -->
            <password>root</password>  <!-- 請?zhí)鎿Q為真實數據庫密碼  -->
            <connectionProperties><![CDATA[useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&socketTimeout=120000]]></connectionProperties>
        </properties>
    </data-source>
</data-sources>

步驟6: war打包

官方下載:http://unidal.org/nexus/service/local/repositories/releases/content/com/dianping/cat/cat-home/3.0.0/cat-home-3.0.0.war

重命名為cat.war進行部署,注意此war是用jdk8,服務端請使用jdk8版本

步驟7: war部署

<?xml version="1.0" encoding="utf-8"?>
<router-config backup-server="你的本機ip(不要用127.0.0.1)" backup-server-port="2280">
   <default-server id="你的本機ip(不要用127.0.0.1)" weight="1.0" port="2280" enable="true"/>
   <network-policy id="default" title="默認" block="false" server-group="default_group">
   </network-policy>
   <server-group id="default_group" title="default-group">
      <group-server id="你的本機ip(不要用127.0.0.1)"/>
   </server-group>
   <domain id="cat">
      <group id="default">
         <server id="你的本機ip(不要用127.0.0.1)" port="2280" weight="1.0"/>
      </group>
   </domain>
</router-config>

提交后,重啟tomcat,訪問http://127.0.0.1:8080/cat,出現如下界面,說明搭建成功。

測試

安裝jar包

進入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

創(chuàng)建工程

創(chuàng)建一個springboot 工程,關鍵代碼如下。

pom.xml
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>com.dianping.cat</groupId>
    <artifactId>cat-client</artifactId>
    <version>3.0.0</version>
</dependency>

app.properties

需要在你的項目中創(chuàng)建 src/main/resources/META-INF/app.properties 文件, 并添加如下內容:

app.name={appkey}

appkey 只能包含英文字母 (a-z, A-Z)、數字 (0-9)、下劃線 (_) 和中劃線 (-)

application.yml

server:
  port: 8760

spring:
  application:
    name: cat-simple

啟動類

@SpringBootApplication
@RestController
public 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();

        // 創(chuàng)建一個 Transaction
        Transaction transaction = Cat.newTransaction( "URL", url );
        try {
            // 處理業(yè)務
            myBusiness();
            // 設置狀態(tài)
            transaction.setStatus(Transaction.SUCCESS);
        } catch (Exception e) {
            // 設置錯誤狀態(tài)
            transaction.setStatus(e);
            // 記錄錯誤信息
            Cat.logError(e);
        } finally {
            // 結束 Transaction
            transaction.complete();
        }

        return "hello";
    }

    @PostMapping("/error")
    public String error(HttpServletRequest request){
        String url = request.getRequestURL().toString();

        // 創(chuàng)建一個 Transaction
        Transaction transaction = Cat.newTransaction( "URL", url );
        try {
            // 處理業(yè)務
            int i = 1 / 0;
            // 設置狀態(tài)
            transaction.setStatus(Transaction.SUCCESS);
        } catch (Exception e) {
            // 設置錯誤狀態(tài)
            transaction.setStatus(e);
            // 記錄錯誤信息
            Cat.logError(e);
        } finally {
            // 結束 Transaction
            transaction.complete();
        }

        return "500";
    }

    private void myBusiness() {
        //模擬業(yè)務處理的時間
        try {
            Thread.sleep( 500 );
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }


}

請求 http://localhost:8760/hi

curl -X POST  http://localhost:8760/hi

請求 http://localhost:8760/error

curl -X POST  http://localhost:8760/error

查看監(jiān)控信息

進入 cat 控制臺,點擊 Transaction 按鈕 ,之后點擊全部,會看到有哪些客戶端,如圖:

點擊客戶端 cat-simple ,出現如圖:

如上圖,可以清晰的看到 請求的 總個數(tatal)、均值(avg)、最大/最小(max/min)、標準差(std)等,其他都比較直觀,標準差稍微復雜一點,大家自己可以推演一下怎么做增量計算。那集合運算,比如95線(表示95%請求的完成時間)、999線(表示99.9%請求的完成時間)

點擊 “l(fā)og View” 可以查看 錯誤信息,如圖:

源碼

https://github.com/gf-huanchupk/SpringCloudLearning/tree/master/chapter14

參考

https://github.com/dianping/cat/wiki

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 個人專題目錄 Dianping CAT 安裝說明文檔 CAT基于Java開發(fā)的實時應用監(jiān)控平臺,包括實時應用監(jiān)控,...
    Java及SpringBoot閱讀 5,735評論 0 2
  • CAT安裝環(huán)境 CentOS 6.5 Java 6,7,8,服務端推薦是用jdk7的版本,客戶端jdk6、7、8都...
    陳陽001閱讀 3,316評論 3 1
  • 作者在基于Spring Cloud微服務的架構時,一直苦于尋找一個可靠的性能監(jiān)控平臺,后在大神的推薦下,詳細研究了...
    愛騎車的豆子閱讀 1,161評論 0 2
  • 一、環(huán)境準備 jdk1.8 maven3.6.3 tomcat 8.5.50 cat2.0 二、JDK安裝步驟省略...
    七秒的記憶_d4a7閱讀 2,333評論 0 0
  • CAT是點評的一個開源的監(jiān)控項目,基于Java開發(fā)的,可以有效的監(jiān)控各種url,sql,以及代碼塊的運行狀況及運行...
    nhhnhh閱讀 2,665評論 0 1

友情鏈接更多精彩內容