序——之前一直在美團內(nèi)部使用cat,十分便捷,這次單位內(nèi)部要使用,拿來研究一番。其實Cat在GitHub上的部署文檔已經(jīng)比較詳細了
服務(wù)端篇
一、準備環(huán)境
tomcat
mysql
jdk8
美團cat源碼包 cat源碼
二、開整
步驟1: 服務(wù)器創(chuàng)建目錄
mkdir /data
chmod -R 777 /data/
mkdir -p /data/appdatas/cat/
步驟2: 服務(wù)器創(chuàng)建文件
cd /data/appdatas/cat/
vim client.xml
將下列配置復(fù)制到client.xml中
注意: 2280是默認的CAT服務(wù)端接受數(shù)據(jù)的端口,不允許修改,http-port是Tomcat啟動的端口,默認是8080,建議使用默認端口
<?xml version="1.0" encoding="utf-8"?>
<config mode="client">
<servers>
<server ip="10.1.1.1" port="2280" http-port="8080"/>
<server ip="10.1.1.2" port="2280" http-port="8080"/>
<server ip="10.1.1.3" port="2280" http-port="8080"/>
</servers>
</config>
vim datasources.xml
將下列配置復(fù)制到datasources.xml中,注意修改自己的地址
集群模式每臺CAT集群10.1.1.1,10.1.1.2,10.1.1.3都需要部署此文件
<?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>
步驟3:數(shù)據(jù)庫配置
創(chuàng)建cat數(shù)據(jù)庫
注意1:一套獨立的CAT集群只需要一個數(shù)據(jù)庫(之前碰到過個別同學(xué)在每臺cat的服務(wù)端節(jié)點都安裝了一個數(shù)據(jù)庫)
注意2:數(shù)據(jù)庫編碼使用utf8mb4,否則可能造成中文亂碼等問題
create database cat charset utf8mb4 collate utf8mb4_general_ci;
刷入表信息 cat建表語句
步驟4:打war包
源碼打包
在cat的源碼目錄,執(zhí)行mvn clean install -DskipTests
war包下載 官方war包下載
注意: 打出來的jar包重命名為cat.war進行部署,此war是用jdk8,服務(wù)端請使用jdk8版本
步驟5:war包部署
將war包扔到10.1.1.1的tomcat的webapps目錄下,啟動tomcat即可
訪問 http://10.1.1.1:8080/cat/s/config?op=routerConfigUpdate
默認用戶名:admin
默認密碼:admin
繼續(xù)將war包扔到10.1.1.2,10.1.1.3中,啟動tomcat
步驟6:服務(wù)器配置
配置鏈接:http://{ip:port}/cat/s/config?op=serverConfigUpdate
說明:這個只需要更新一次,配置是保存在mysql的數(shù)據(jù)庫里面。
CAT節(jié)點職責
控制臺 - 提供給業(yè)務(wù)人員進行數(shù)據(jù)查看【默認所有的cat節(jié)點都可以作為控制臺,不可配置】
消費機 - 實時接收業(yè)務(wù)數(shù)據(jù),實時處理,提供實時分析報表【默認所有的cat節(jié)點都可以作為消費機,不可配置】
告警端 - 啟動告警線程,進行規(guī)則匹配,發(fā)送告警(目前僅支持單點部署)【可以配置】
任務(wù)機 - 做一些離線的任務(wù),合并天、周、月等報表 【可以配置】
集群配置
線上做多集群部署,假設(shè)有10.1.1.1,10.1.1.2,10.1.1.3這三臺機器
建議選取一臺或多臺機器負責角色有控制臺、告警端、任務(wù)機,例如10.1.1.1。
配置域名訪問CAT,該域名關(guān)聯(lián)至10.1.1.1。
10.1.1.2,10.1.1.3 負責消費機處理,這樣能做到有效隔離,任務(wù)機、告警等問題不影響實時數(shù)據(jù)處理
remote-servers 這個一定要配置正確,端口號為8080,這里面的remote-servers為10.1.1.1:8080,10.1.1.2:8080,10.1.1.3:8080
完成以上步驟,重啟下當前CAT節(jié)點
配置的sample如下: id="default"是默認的配置信息,server id="10.1.1.1" 如下的配置是表示10.1.1.1這臺服務(wù)器的節(jié)點配置覆蓋default的配置信息,比如下面的job-machine,alarm-machine,send-machine為true。
<?xml version="1.0" encoding="utf-8"?>
<server-config>
<server id="default">
<properties>
<property name="local-mode" value="false"/>
<property name="job-machine" value="false"/>
<property name="send-machine" value="false"/>
<property name="alarm-machine" value="false"/>
<property name="hdfs-enabled" value="false"/>
<property name="remote-servers" value="10.1.1.1:8080,10.1.1.2:8080,10.1.1.3:8080"/>
</properties>
<storage local-base-dir="/data/appdatas/cat/bucket/" max-hdfs-storage-time="15" local-report-storage-time="7" local-logivew-storage-time="7">
<hdfs id="logview" max-size="128M" server-uri="hdfs://10.1.77.86/" base-dir="user/cat/logview"/>
<hdfs id="dump" max-size="128M" server-uri="hdfs://10.1.77.86/" base-dir="user/cat/dump"/>
<hdfs id="remote" max-size="128M" server-uri="hdfs://10.1.77.86/" base-dir="user/cat/remote"/>
</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="10.1.1.1">
<properties>
<property name="job-machine" value="true"/>
<property name="alarm-machine" value="true"/>
<property name="send-machine" value="true"/>
</properties>
</server>
</server-config>
請注意:當一個機器角色更改后,請重啟該機器!
server模型:代表一臺機器的配置。如果id為default,代表默認配置;如果id為ip,代表該臺服務(wù)器的配置
* property local-mode : 定義服務(wù)是否為本地模式(開發(fā)模式),在生產(chǎn)環(huán)境時,設(shè)置為false,啟動遠程監(jiān)聽模式。默認為 false;
* property hdfs-machine : 定義是否啟用HDFS存儲方式,默認為 false;
* property job-machine : 定義當前服務(wù)是否為報告工作機(開啟生成匯總報告和統(tǒng)計報告的任務(wù),只需要一臺服務(wù)機開啟此功能),默認為 false;
* property alarm-machine : 定義當前服務(wù)是否為報警機(開啟各類報警監(jiān)聽,只需要一臺服務(wù)機開啟此功能),默認為 false;
* property send-machine : 定義當前服務(wù)告警是否發(fā)送(當時為了解決測試環(huán)境開啟告警線程,但是最后告警不通知,此配置后續(xù)會逐步去除,建議alarm-machine開啟為true的時候,這個同步為true)
storage模型: 定義數(shù)據(jù)存儲配置信息
* property local-report-storage-time : 定義本地報告存放時長,單位為(天)
* property local-logivew-storage-time : 定義本地日志存放時長,單位為(天)
* property local-base-dir : 定義本地數(shù)據(jù)存儲目錄,此目錄為上傳到HDFS時所查找的源文件路徑
* property hdfs : 定義HDFS配置信息,便于直接登錄系統(tǒng)
* property server-uri : 定義HDFS服務(wù)地址,支持配置Nameservice
* property console : 定義服務(wù)控制臺信息
* property remote-servers : 定義HTTP服務(wù)列表,(遠程監(jiān)聽端同步更新服務(wù)端信息即取此值)
* ldap : 定義LDAP配置信息(這個可以忽略)
* ldapUrl : 定義LDAP服務(wù)地址(這個可以忽略)
步驟7: 重啟不影響數(shù)據(jù)可用性
單機模式部署可略過此步驟,線上環(huán)境使用建議配置。
請在tomcat重啟之前調(diào)用當前tomcat的存儲數(shù)據(jù)的鏈接 http://${ip}:8080/cat/r/home?op=checkpoint,重啟之后數(shù)據(jù)會恢復(fù)?!咀⒁庵貑r間在每小時的整點10-55分鐘之間】
線上部署時候,建議把此鏈接調(diào)用存放于tomcat的stop腳本中,這樣不需要每次手工調(diào)用
客戶端篇
步驟1: 客戶端機器創(chuàng)建文件
mkdir /data
chmod -R 777 /data/
mkdir -p /data/appdatas/cat/
cd /data/appdatas/cat/
vim client.xml
將下列配置復(fù)制到client.xml中
注意: 2280是默認的CAT服務(wù)端接受數(shù)據(jù)的端口,不允許修改,http-port是Tomcat啟動的端口,默認是8080,建議使用默認端口
<?xml version="1.0" encoding="utf-8"?>
<config mode="client">
<servers>
<server ip="10.1.1.1" port="2280" http-port="8080"/>
<server ip="10.1.1.2" port="2280" http-port="8080"/>
<server ip="10.1.1.3" port="2280" http-port="8080"/>
</servers>
</config>
步驟2: 項目配置
引入jar包
<dependency>
<groupId>com.dianping.cat</groupId>
<artifactId>cat-core</artifactId>
<version>3.0.0</version>
<exclusions>
<exclusion>
<artifactId>cat-client</artifactId>
<groupId>com.dianping.cat</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.dianping.cat</groupId>
<artifactId>cat-client</artifactId>
<version>3.0.0</version>
</dependency>
步驟3: 添加appkey
在resources中創(chuàng)建META-INF目錄,在此目錄下創(chuàng)建app.properties,在此文件寫入
后面名稱隨意制定
app.name=com.dianping.sqldemo
步驟4: 服務(wù)端配置項目名稱

步驟5: 打點上送
示例:打點Transaction、event
@Test
public void aaa() throws Exception {
Transaction t = Cat.newTransaction("safsfasd", "demo");
Cat.logEvent("dddd", "ccccc", Event.SUCCESS, "ip=${serverIp}");
t.complete();
Cat.logEvent("aaaaaaa", "hfkjahsfjkahds", Event.SUCCESS, "ip=${serverIp}");
Thread.sleep(100000000); // 此處 sleep 一會, 就能保證 CAT 異步消息發(fā)送
}
注意:單元測試打點一定要 Thread.sleep(100000000);否則打點送不上去?。。。?!
具體打點規(guī)則請參考 cat客戶端打點
步驟6: 登錄服務(wù)端,查看打點是否上送成功
