CAT 是大衆點評開源的實時監控系統,它側重於 Java 應用監控,可與各種流行的中間件框架集成(MVC框架、RPC框架、數據庫框架、緩存框架等),實現應用各層級系統的運行狀況監控。本文總結了 CAT 服務器集羣的搭建、Java 應用的集成、以其控制檯的使用。
作者:王克鋒
出處:https://kefeng.wang/2018/07/06/tracing-cat/
版權:自由轉載-非商用-非衍生-保持署名,轉載請標明作者和出處。
1 概述
官網: https://github.com/dianping/cat/
1.1 概述
CAT(Central Application Tracking) 是大衆點評開源的一套基於 Java 的實時應用監控平臺,主要應用於服務中間件框架(MVC 框架、RPC 框架、持久層框架、分佈式緩存框架)的監控(服務端、移動端、前端),爲開發和運維提供各項性能指標、健康檢查、自動報警等可視化服務。
1.2 依賴環境
本文只實現了本地磁盤文件存儲(非大數據)方式。所用環境:
CentOS: 7.4.1708(內核 3.10.0),安裝方法
Java: 1.8.0,安裝方法
Maven: 3.5.4,安裝方法
MySQL: 5.7.20,安裝方法
Tomcat: 7.0.90,安裝方法
Git Client: 1.8.3.1(版本關係不大),安裝方法
Hadoop(可選): 小規模公司可採用磁盤模式,大規模公司採用Hadoop。
2 準備數據庫
只需部署一個 MySQL 實例,CAT 集羣中各節點共用。
2.1 配置數據庫
增大 MySQL 最大允許的 SQL 字節數(默認爲 4M)。
### sudo vim /etc/my.cnf
### 修改後重啓: sudo systemctl restart mysqld
[mysqld]
max_allowed_packet=64M
2.2 創建數據庫
DROP DATABASE IF EXISTS cat;
CREATE DATABASE cat CHARACTER SET utf8;
GRANT ALL ON cat.* TO cat_user@'192.168.%' IDENTIFIED BY 'MySQL5.7';
FLUSH PRIVILEGES;
2.3 創建數據表
執行 CAT 腳本: /opt/cat/script/Cat.sql
3 部署 CAT 集羣
假設要部署三臺: 192.168.126.101/102/103,以 192.168.126.101 爲例來說明。
3.1 下載並構建
sudo rm -rf /opt/cat
## sudo git clone https://github.com/dianping/cat.git /opt/cat
sudo git clone https://github.com/kefeng-wang/cat.git /opt/cat
sudo chown -R admin:admin /opt/cat
cd /opt/cat
mvn clean install -DskipTests
## 如果遇到“找不到 jar 包”的報錯,可從本地倉庫刪除相應目錄,再重試
3.2 準備目錄
sudo mkdir -p /data/{appdatas,applogs}/cat
## sudo mkdir -p /data/appdatas/cat/bucket ## 會自動創建(本地數據目錄)
sudo chown admin:admin /data/{appdatas,applogs}/cat
cp /opt/cat/script/*.xml /data/appdatas/cat/
3.3 配置 datasources.xml
文件 /data/appdatas/cat/datasources.xml,替換中的參數:
${jdbc.url}: 數據庫地址。形如 jdbc:mysql://localhost:3306,不要加額外選項
${jdbc.user}: 數據庫用戶。比如 cat_user
${jdbc.password}: 數據庫用戶密碼。比如 MySQL5.7
3.4 配置 server.xml
3.4.1 節點的職責
控制檯 - 提供給業務人員進行數據查看【默認所有的cat節點都可以作爲控制檯,不可配置】
消費機 - 實時接收業務數據,實時處理,提供實時分析報表【默認所有的cat節點都可以作爲消費機,不可配置】
任務機(job-machine) - 做一些離線的任務,合併天、周、月等報表 【可以配置】
告警端(alert-machine) - 啓動告警線程,進行規則匹配,發送告警(目前僅支持單點部署)【可以配置】
3.4.2 配置文件
文件 /data/appdatas/cat/server.xml,
<?xml version="1.0" encoding="utf-8"?>
<config local-mode="false" hdfs-machine="false" job-machine="false" alert-machine="false">
<storage local-base-dir="/data/appdatas/cat/bucket/" max-hdfs-storage-time="15" local-report-storage-time="7" local-logivew-storage-time="7">
</storage>
<console default-domain="Cat" show-cat-domain="true">
<remote-servers>192.168.126.101:8080,192.168.126.102:8080,192.168.126.103:8080</remote-servers>
</console>
</config>
一臺(192.168.126.101) 部署“控制檯、告警端、任務機”,可綁定域名以便外部訪問: 指定 job-machine=”true” alert-machine=”true”;
兩臺(192.168.126.102/103),部署爲“消費機”: 指定 job-machine=”false” alert-machine=”false”。
3.4.3 參數詳解
local-mode: 建議在開發環境以及生產環境時,都設置爲false
hdfs-machine: 定義是否啓用 HDFS 存儲方式,默認爲 false
job-machine: 定義當前服務是否爲報告工作機(開啓生成彙總報告和統計報告的任務,只需要一臺服務機開啓此功能),默認爲 false
alert-machine: 定義當前服務是否爲報警機(開啓各類報警監聽,只需要一臺服務機開啓此功能),默認爲 false;
storage: 定義數據存儲配置信息
local-report-storage-time: 定義本地報告文件存放時長,單位爲(天)
local-logivew-storage-time: 定義本地日誌文件存放時長,單位爲(天)
local-base-dir: 定義本地數據存儲目錄,建議直接使用/data/appdatas/cat/bucket目錄
hdfs: 定義HDFS配置信息
server-uri: 定義HDFS服務地址
console: 定義服務控制檯信息
remote-servers: 定義HTTP服務列表,(遠程監聽端同步更新服務端信息即取此值)
3.5 配置 client.xml
文件 /data/appdatas/cat/client.xml,用於指定 CAT 各服務器節點的信息:
server.ip: CAT 服務端的 IP;
server.port: CAT服務端接受數據的端口(不要修改);
server.http-port: Tomcat啓動的端口(建議默認)。
<servers>
<server ip="192.168.126.101" port="2280" http-port="8080" />
<server ip="192.168.126.102" port="2280" http-port="8080" />
<server ip="192.168.126.103" port="2280" http-port="8080" />
</servers>
3.6 啓動
sudo cp -f /opt/cat/cat-home/target/cat-alpha-2.0.0.war $CATALINA_HOME/webapps/cat.war
sudo systemctl restart tomcat
3.7 防火牆放行
### sudo vim /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
### 重啓生效: sudo systemctl restart iptables
3.8 源碼的遠程調試
如果運行過程中遇到問題,可採用遠程調試來跟蹤:
項目導入 IDEA:本機下載源碼,IDEA 中打開 cat 源碼根目錄,即可;
遠程調試的設置:參考 IDEA 遠程調試
4 Java 應用的集成
CAT 技術入門總結-0.1.0.doc
4.1 本機全局指定 Maven 倉庫
由於 cat-client 等開發包並未加入 Maven 官方倉庫(repo1.maven.org),所以需要指定 cat 專用的遠程倉庫。
<!-- %MAVEN_HOME%\conf\settings.xml -->
<profiles>
<profile>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<repositories>
<repository>
<id>central</id>
<layout>default</layout>
<url>http://repo1.maven.org/maven2</url>
</repository>
<repository>
<id>unidal.nexus</id>
<url>http://unidal.org/nexus/content/repositories/releases/</url>
</repository>
</repositories>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
</profile>
</profiles>
4.2 加入依賴(pom.xml)
<dependencies>
<dependency>
<groupId>com.dianping.cat</groupId>
<artifactId>cat-client</artifactId>
<version>2.0.0</version>
</dependency>
</dependencies>
4.3 添加過濾器 CatFilter
SpringMVC 和 SpringBoot 項目,都是加入過濾器 com.dianping.cat.servlet.CatFilter,具體形式有差別。
4.3.1 SpringMVC 項目(web.xml)
<filter>
<filter-name>cat-filter</filter-name>
<filter-class>com.dianping.cat.servlet.CatFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>cat-filter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
4.3.2 SpringBoot 項目(CatFilterConfigure.java)
/**
* @author: kefeng.wang
* @date: 2018-07-06 14:00
* @description: 添加過濾器 CatFilter
**/
@Configuration
public class CatFilterConfigure {
@Bean
public FilterRegistrationBean catFilter() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(new CatFilter());
registration.addUrlPatterns("/*");
registration.setName("cat-filter");
registration.setOrder(1);
return registration;
}
}
4.4 添加註解
@CatCacheTransaction
public void test() {
}
@ResponseBody
@RequestMapping("/hello")
@CatHttpRequestTransaction(type = "URL", name = "/hello")
public String hello() {
return "hello!";
}
5 更多集成
CAT 框架埋點方案集成
5.1 集成 MyBatis
SpringBoot 集成 Mybatis
參考文檔:CAT 集成 MyBatis
5.2 集成 Dubbo
參考文檔:CAT 集成 Dubbo,只需在 pom.xml 中添加依賴。
<dependency>
<groupId>net.dubboclub</groupId>
<artifactId>cat-monitor</artifactId>
<version>0.0.6</version>
</dependency>
5.3 集成 Logback
參考文檔:CAT 集成 Logback,logback.xml 中添加配置:
<appender name="CatAppender" class="com.dianping.cat.logback.CatLogbackAppender"></appender>
<root level="info">
<appender-ref ref="CatAppender" />
</root>
6 管理平臺的使用
6.1 控制檯
http://192.168.126.101:8080/cat
帳號/密碼: catadmin/catadmin
6.2 項目配置
http://192.168.126.101:8080/cat/s/config?op=projects
6.3 相關文檔
部署文檔: http://192.168.126.101:8080/cat/r/home?op=view&docName=deploy
用戶文檔:http://192.168.126.101:8080/cat/r/home?op=view&docName=user
告警文檔:http://192.168.126.101:8080/cat/r/home?op=view&docName=alert
集成文檔:http://192.168.126.101:8080/cat/r/home?op=view&docName=integration
開發文檔:http://192.168.126.101:8080/cat/r/home?op=view&docName=develop
設計文檔:http://192.168.126.101:8080/cat/r/home?op=view&docName=design
常見問題:http://192.168.126.101:8080/cat/r/home?op=view&docName=problem
6.4 實時查看
http://192.168.126.101:8080/cat/r/t
轉自:https://blog.csdn.net/kefengwang/article/details/81213031
其它相關文章https://blog.csdn.net/csdnxingyuntian/article/details/73028816