美團 CAT 集羣的搭建與集成

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

       https://blog.csdn.net/m0_37499059/article/details/80090779

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章