分散式監控CAT服務端的本地部署

  • 2019 年 10 月 30 日
  • 筆記

一、CAT簡介

CAT

CAT(Central Application Tracking),是美團點評基於 Java 開發的一套開源的分散式實時監控系統。美團點評基礎架構部希望在基礎存儲、高性能通訊、大規模在線訪問、服務治理、實時監控、容器化及集群智慧調度等領域提供業界領先的、統一的解決方案,CAT 目前在美團點評的產品定位是應用層的統一監控組件,在中間件(RPC、資料庫、快取、MQ 等)框架中得到廣泛應用,為各業務線提供系統的性能指標、健康狀況、實時告警等服務。

二、部署環境

  • Windows 7
  • CAT 3.0
  • Java 8
  • Tomcat 8.5
  • Maven 3
  • MySQL 5.7
  • 內網IP:192.168.1.111

三、開始部署

1.下載CAT源碼

git clone https://github.com/dianping/cat.git

2.初始化資料庫

在MySQL中創建cat資料庫,然後執行script/Cat.sql中的SQL語句。

3.創建配置文件

在Tomcat所在的盤中創建/data/appdatas/cat文件夾,然後創建/data/appdatas/cat/client.xml文件,寫入如下內容:

<?xml version="1.0" encoding="utf-8"?>  <config mode="client">      <servers>          <server ip="192.168.1.111" port="2280" http-port="8080"/>      </servers>  </config>

其中,192.168.1.111改為你電腦的內網IP,2280是默認的CAT服務端接受數據的埠,不允許修改,http-port是Tomcat啟動的埠,默認是8080,建議使用默認埠。

再創建/data/appdatas/cat/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://192.168.1.111: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>

其中,需要替換的有:資料庫IP、port、用戶名和密碼。

4.CAT的war部署

使用Maven構建AT的war:

mvn clean install -DskipTests

構建成功後,將cat-home/target/cat-alpha-3.0.0.war重命名為cat.war,複製到Tomcat的webapps下,啟動tomcat。

5.修改路由配置

訪問http://192.168.1.111:8080/cat/s/config?op=routerConfigUpdate,默認用戶名:admin 默認密碼:admin,修改客戶端路由配置:

<?xml version="1.0" encoding="utf-8"?>  <router-config backup-server="192.168.1.111" backup-server-port="2280">     <default-server id="192.168.1.111" 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="192.168.1.111"/>     </server-group>     <domain id="cat">        <group id="default">           <server id="192.168.1.111" port="2280" weight="1.0"/>        </group>     </domain>  </router-config>

配置說明:

  • backup-server屬性:設置為當前伺服器對外IP地址,埠固定為2280
  • default-server屬性:定義可跳轉的路由地址,可以設置多個。default-server的id屬性配置可路由的cat-home服務IP地址,埠固定為2280;若需要禁用路由地址,可把enable設置為false
  • network-policy 這邊可以配置多個不同網段,表示這個網段使用server-group的cat節點,這裡面的作用主要是當多機房部署cat的時候,可以將cat分為多個多個子集群,然後多個子集群處理不同的客戶端,避免跨專線訪問
  • domain id=cat 這部分主要是訂製路由,當發現一些項目數據量特別大,或者其他場景,可以將這些domain的監控請求單獨隔離處理

6.修改服務端配置

訪問http://192.168.1.111:8080/cat/s/config?op=serverConfigUpdate,修改服務端配置:

<?xml version="1.0" encoding="utf-8"?>  <server-config>     <server id="default">        <properties>           <property name="local-mode" value="false"/>           <property name="job-machine" value="true"/>           <property name="send-machine" value="false"/>           <property name="alarm-machine" value="true"/>           <property name="hdfs-enabled" value="false"/>           <property name="remote-servers" value="192.168.1.111:8080"/>        </properties>        <storage local-base-dir="/data/appdatas/cat/bucket/" max-hdfs-storage-time="15" local-report-storage-time="2" local-logivew-storage-time="1" har-mode="true" upload-thread="5">           <hdfs id="dump" max-size="128M" server-uri="hdfs://127.0.0.1/" base-dir="/user/cat/dump"/>           <harfs id="dump" max-size="128M" server-uri="har://127.0.0.1/" base-dir="/user/cat/dump"/>           <properties>              <property name="hadoop.security.authentication" value="false"/>              <property name="dfs.namenode.kerberos.principal" value="hadoop/[email protected]"/>              <property name="dfs.cat.kerberos.principal" value="[email protected]"/>              <property name="dfs.cat.keytab.file" value="/data/appdatas/cat/cat.keytab"/>              <property name="java.security.krb5.realm" value="value1"/>              <property name="java.security.krb5.kdc" value="value2"/>           </properties>        </storage>        <consumer>           <long-config default-url-threshold="1000" default-sql-threshold="100" default-service-threshold="50">              <domain name="cat" url-threshold="500" sql-threshold="500"/>              <domain name="OpenPlatformWeb" url-threshold="100" sql-threshold="500"/>           </long-config>        </consumer>     </server>     <server id="192.168.1.111">        <properties>           <property name="job-machine" value="true"/>           <property name="send-machine" value="false"/>           <property name="alarm-machine" value="true"/>        </properties>     </server>  </server-config>

配置說明:
server節點:代表一台機器的配置。如果id為default,代表默認配置;如果id為ip,代表該台伺服器的配置

  • local-mode : 定義服務是否為本地模式(開發模式),在生產環境時,設置為false,啟動遠程監聽模式。默認為 false;
  • hdfs-machine : 定義是否啟用HDFS存儲方式,默認為 false;
  • job-machine : 定義當前服務是否為報告工作機(開啟生成匯總報告和統計報告的任務,只需要一台服務機開啟此功能),默認為 false;
  • alarm-machine : 定義當前服務是否為報警機(開啟各類報警監聽,只需要一台服務機開啟此功能),默認為 false;
  • send-machine : 定義當前服務告警是否發送(當時為了解決測試環境開啟告警執行緒,但是最後告警不通知,此配置後續會逐步去除,建議alarm-machine開啟為true的時候,這個同步為true)

storage節點: 定義數據存儲配置資訊

  • local-report-storage-time : 定義本地報告存放時長,單位為(天)
  • local-logivew-storage-time : 定義本地日誌存放時長,單位為(天)
  • local-base-dir : 定義本地數據存儲目錄
  • hdfs : 定義HDFS配置資訊,便於直接登錄系統
  • server-uri : 定義HDFS服務地址
  • console : 定義服務控制台資訊
  • remote-servers : 定義HTTP服務列表,(遠程監聽端同步更新服務端資訊即取此值)
  • ldap : 定義LDAP配置資訊(這個可以忽略)
  • ldapUrl : 定義LDAP服務地址(這個可以忽略)

重新啟動Tomcat。

四、驗證

訪問http://192.168.1.111:8080/cat/r,點擊「State」,可以看到「CAT服務端正常」和CAT一些基本狀態,如下圖:

點擊「Transaction」,CAT自身的監控資訊,如下圖: