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

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

簡介

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

優(yōu)勢

  • 實時處理:信息的價值會隨時間銳減波材,尤其是事故處理過程中股淡。
  • 全量數(shù)據(jù):全量采集指標(biāo)數(shù)據(jù),便于深度分析故障案例廷区。
  • 高可用:故障的還原與問題定位唯灵,需要高可用監(jiān)控來支撐。
  • 故障容忍:故障不影響業(yè)務(wù)正常運轉(zhuǎn)隙轻、對業(yè)務(wù)透明埠帕。
  • 高吞吐:海量監(jiān)控數(shù)據(jù)的收集,需要高吞吐能力做保證玖绿。
  • 可擴展:支持分布式敛瓷、跨 IDC 部署,橫向擴展的監(jiān)控系統(tǒng)斑匪。

開源產(chǎn)品比較

快速上手

本地部署

步驟1:部署tomcat

準(zhǔn)備一個tomcat呐籽,修改 tomcat conf 目錄下 server.xml,防中文亂碼蚀瘸。

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

步驟2:程序?qū)τ?data/目錄具體讀寫權(quán)限(重要)

  • Linux

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

  • 此目錄會存一些CAT必要的配置文件以及運行時候的數(shù)據(jù)存儲目錄贪惹。

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

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

對程序運行盤下的/data/appdatas/cat和/data/applogs/cat有讀寫權(quán)限奏瞬。例如cat服務(wù)運行在e盤的tomcat中,則需要對e:/data/appdatas/cat和e:/data/applogs/cat有讀寫權(quán)限垫释。

步驟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的服務(wù)端丝格。

步驟4: 安裝CAT的數(shù)據(jù)庫

下載cat源碼包:https://codeload.github.com/dianping/cat/
解壓后,數(shù)據(jù)庫的腳本文件為 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為真實數(shù)據(jù)庫URL及Port  -->
            <user>root</user>  <!-- 請?zhí)鎿Q為真實數(shù)據(jù)庫用戶名  -->
            <password>root</password>  <!-- 請?zhí)鎿Q為真實數(shù)據(jù)庫密碼  -->
            <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显蝌,服務(wù)端請使用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="默認(rèn)" 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父叙,出現(xiàn)如下界面神郊,說明搭建成功肴裙。

測試

安裝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 工程蜻懦,關(guān)鍵代碼如下。

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 文件, 并添加如下內(nèi)容:

app.name={appkey}

appkey 只能包含英文字母 (a-z, A-Z)夕晓、數(shù)字 (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è)務(wù)
            myBusiness();
            // 設(shè)置狀態(tài)
            transaction.setStatus(Transaction.SUCCESS);
        } catch (Exception e) {
            // 設(shè)置錯誤狀態(tài)
            transaction.setStatus(e);
            // 記錄錯誤信息
            Cat.logError(e);
        } finally {
            // 結(jié)束 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è)務(wù)
            int i = 1 / 0;
            // 設(shè)置狀態(tài)
            transaction.setStatus(Transaction.SUCCESS);
        } catch (Exception e) {
            // 設(shè)置錯誤狀態(tài)
            transaction.setStatus(e);
            // 記錄錯誤信息
            Cat.logError(e);
        } finally {
            // 結(jié)束 Transaction
            transaction.complete();
        }

        return "500";
    }

    private void myBusiness() {
        //模擬業(yè)務(wù)處理的時間
        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 躬贡,出現(xiàn)如圖:

如上圖谆奥,可以清晰的看到 請求的 總個數(shù)(tatal)、均值(avg)逗宜、最大/最行塾摇(max/min)、標(biāo)準(zhǔn)差(std)等纺讲,其他都比較直觀擂仍,標(biāo)準(zhǔn)差稍微復(fù)雜一點,大家自己可以推演一下怎么做增量計算熬甚。那集合運算逢渔,比如95線(表示95%請求的完成時間)、999線(表示99.9%請求的完成時間)

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

源碼

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

參考

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末肃廓,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子诲泌,更是在濱河造成了極大的恐慌盲赊,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件敷扫,死亡現(xiàn)場離奇詭異哀蘑,居然都是意外死亡,警方通過查閱死者的電腦和手機葵第,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門绘迁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人卒密,你說我怎么就攤上這事缀台。” “怎么了哮奇?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵膛腐,是天一觀的道長睛约。 經(jīng)常有香客問我,道長依疼,這世上最難降的妖魔是什么痰腮? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任而芥,我火速辦了婚禮律罢,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘棍丐。我一直安慰自己误辑,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布歌逢。 她就那樣靜靜地躺著巾钉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪秘案。 梳的紋絲不亂的頭發(fā)上砰苍,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天,我揣著相機與錄音阱高,去河邊找鬼赚导。 笑死,一個胖子當(dāng)著我的面吹牛赤惊,可吹牛的內(nèi)容都是我干的吼旧。 我是一名探鬼主播,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼未舟,長吁一口氣:“原來是場噩夢啊……” “哼圈暗!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起裕膀,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤员串,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后昼扛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體寸齐,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年野揪,在試婚紗的時候發(fā)現(xiàn)自己被綠了访忿。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡斯稳,死狀恐怖海铆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情挣惰,我是刑警寧澤卧斟,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布殴边,位于F島的核電站,受9級特大地震影響珍语,放射性物質(zhì)發(fā)生泄漏锤岸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一板乙、第九天 我趴在偏房一處隱蔽的房頂上張望是偷。 院中可真熱鬧,春花似錦募逞、人聲如沸蛋铆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽刺啦。三九已至,卻和暖如春纠脾,著一層夾襖步出監(jiān)牢的瞬間玛瘸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工苟蹈, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留糊渊,地道東北人。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓汉操,卻偏偏與公主長得像再来,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子磷瘤,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 個人專題目錄 Dianping CAT 安裝說明文檔 CAT基于Java開發(fā)的實時應(yīng)用監(jiān)控平臺芒篷,包括實時應(yīng)用監(jiān)控,...
    Java及SpringBoot閱讀 5,395評論 0 2
  • CAT安裝環(huán)境 CentOS 6.5 Java 6采缚,7针炉,8,服務(wù)端推薦是用jdk7的版本扳抽,客戶端jdk6篡帕、7、8都...
    陳陽001閱讀 3,163評論 3 1
  • 作者在基于Spring Cloud微服務(wù)的架構(gòu)時贸呢,一直苦于尋找一個可靠的性能監(jiān)控平臺镰烧,后在大神的推薦下,詳細(xì)研究了...
    愛騎車的豆子閱讀 1,063評論 0 2
  • 一楞陷、環(huán)境準(zhǔn)備 jdk1.8 maven3.6.3 tomcat 8.5.50 cat2.0 二怔鳖、JDK安裝步驟省略...
    七秒的記憶_d4a7閱讀 2,100評論 0 0
  • CAT是點評的一個開源的監(jiān)控項目,基于Java開發(fā)的固蛾,可以有效的監(jiān)控各種url结执,sql度陆,以及代碼塊的運行狀況及運行...
    nhhnhh閱讀 2,531評論 0 1