CAT 是一個實時和接近全量的監控系統,它側重於對Java應用的監控,基本接入了美團上海全部核心應用。目前在中間件(MVC、RPC、數據庫、緩存等)框架中獲得普遍應用,爲美團各業務線提供系統的性能指標、健康情況、監控告警等。java
準備一個tomcat,修改 tomcat conf 目錄下 server.xml,防中文亂碼。mysql
Connector port="8080" protocol="HTTP/1.1" URIEncoding="utf-8" connectionTimeout="20000" redirectPort="8443" /> <!-- 增長 URIEncoding="utf-8" -->
Linuxlinux
mkdir /data chmod -R 777 /data/
對程序運行盤下的/data/appdatas/cat和/data/applogs/cat有讀寫權限。例如cat服務運行在e盤的tomcat中,則須要對e:/data/appdatas/cat和e:/data/applogs/cat有讀寫權限。git
<?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的服務端。程序員
下載cat源碼包:https://codeload.github.com/d...
解壓後,數據庫的腳本文件爲 script/CatApplication.sqlgithub
mysql -uroot -Dcat < CatApplication.sql
<?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>
官方下載:http://unidal.org/nexus/servi...web
重命名爲cat.war進行部署,注意此war是用jdk8,服務端請使用jdk8版本spring
<?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,出現以下界面,說明搭建成功。sql
進入cat源碼包的 lib/java/jar ,將cat-client-3.0.0.jar 包 安裝到本地maven倉庫。shell
mvn install:install-file -DgroupId=com.dianping.cat -DartifactId=cat-client Dversion=3.0.0 -Dpackaging=jar -Dfile=cat-client-3.0.0.jar
建立一個springboot 工程,關鍵代碼以下。
<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>
須要在你的項目中建立 src/main/resources/META-INF/app.properties 文件, 並添加以下內容:
app.name={appkey}
appkey 只能包含英文字母 (a-z, A-Z)、數字 (0-9)、下劃線 (_) 和中劃線 (-)
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(); // 建立一個 Transaction Transaction transaction = Cat.newTransaction( "URL", url ); try { // 處理業務 myBusiness(); // 設置狀態 transaction.setStatus(Transaction.SUCCESS); } catch (Exception e) { // 設置錯誤狀態 transaction.setStatus(e); // 記錄錯誤信息 Cat.logError(e); } finally { // 結束 Transaction transaction.complete(); } return "hello"; } @PostMapping("/error") public String error(HttpServletRequest request){ String url = request.getRequestURL().toString(); // 建立一個 Transaction Transaction transaction = Cat.newTransaction( "URL", url ); try { // 處理業務 int i = 1 / 0; // 設置狀態 transaction.setStatus(Transaction.SUCCESS); } catch (Exception e) { // 設置錯誤狀態 transaction.setStatus(e); // 記錄錯誤信息 Cat.logError(e); } finally { // 結束 Transaction transaction.complete(); } return "500"; } private void myBusiness() { //模擬業務處理的時間 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
進入 cat 控制檯,點擊 Transaction 按鈕 ,以後點擊所有,會看到有哪些客戶端,如圖:
點擊客戶端 cat-simple ,出現如圖:
如上圖,能夠清晰的看到 請求的 總個數(tatal)、均值(avg)、最大/最小(max/min)、標準差(std)等,其餘都比較直觀,標準差稍微複雜一點,你們本身能夠推演一下怎麼作增量計算。那集合運算,好比95線(表示95%請求的完成時間)、999線(表示99.9%請求的完成時間)
點擊 「log View」 能夠查看 錯誤信息,如圖:
https://github.com/gf-huanchu...
https://github.com/dianping/c...
歡迎掃碼或微信搜索公衆號《程序員果果》關注我,關注有驚喜~