我的理解是一個收集服務呼叫等執行情況的監控系統。
相信你能搜到這篇部落格我就不多介紹了,這裡有連結 傳送門
本部落格僅僅只幫助大家解決部署方面的問題
1.部署真他孃的困難,坑點太多了。
2.初期部署經常被難住點:原始碼拉下來編譯不通過
3.mysql版本要求5.7及以下,現在都普遍8.0了
4.cat-client 服務啟動找CAT-HOME ,找不到預設/data/appdatas/cat 固定目錄,對mac系統非常不友好
5.設定化的東西太多了,操作難度直線上升
a.使用者端需要到META_INF/app.properties 讀取app.name 作為應用名稱
b.使用者端需要到指定目錄建立/data/appdatas/cat 資料夾,並在裡面建立client.xml檔案,加上伺服器端設定
c.伺服器端需要生成cat資料庫,利用手中的sql指令碼 這個在公司內網雲平臺執行校驗時各種索引命名規範問題,大文字不可空問題,搞死了
d.伺服器端把war包放到tomcat/webapps目錄下後,點啥選單都出現500,可能導致的問題太多了,還每次都不一樣,執行環境是個大問題
e.伺服器端部署好後,還得設定伺服器端設定、使用者端設定、單機和叢集環境還不太一樣
d.使用者端連不上伺服器端問題,又是一頓排查
linux centos7(華為雲or阿里雲等雲伺服器)
tomcat8.5
jdk1.8 (設定好環境變數)
mysql5.7
cat.war檔案,一般3.0版
資料庫指令碼 CatApplication.sql 先建立資料庫cat 到mysql執行建表
datasource.xml 檔案,裡面的連線字串改成自己的
client.xml(這個檔案服務部署用不到,使用者端接入的時候用,親測)
材料就是這些,不過雲伺服器需要開通外部存取的埠,切記 保證如果cat服務和資料庫不在一臺機器上時能連線上
1.把apache-tomcat-8.5.84.tar.gz 上傳到伺服器/usr/local目錄 解壓成資料夾 tar -zxvf apache-tomcat-8.5.84.tar.gz 得到檔案目錄apache-tomcat-8.5.84
2.把jdk-8u333-linux-x64.tar.gz 上傳到伺服器/usr/local目錄 解壓成資料夾 tar -zxvf jdk-8u333-linux-x64.tar.gz 得到檔案目錄 jdk1.8.0_333
3.把檔案cat.war (如果叫cat-home.war 重新命名為cat.war) 上傳到目錄/usr/local/apache-tomcat-8.5.84/webapps/
4.設定java_home環境變數 vim ~/etc/profile 在最結尾輸入
export JAVA_HOME =/usr/local/jdk1.8.0_333
export CLASSPATH =.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
wq儲存後執行source ~/etc/profile 重新整理快取
執行java -version 如果不成功搜教學
5.伺服器新建cat執行目錄並授權
mkdir -p /data/appdatas/cat
mkdir -p /data/applogs/cat
chmod 777 /data/appdatas/cat
chmod 777 /data/applogs/cat
6.把改好的datasource.xml 檔案上傳到/data/appdatas/cat 目錄
7.啟動tomcat
cd /usr/local/apache-tomcat-8.5.84/bin
sh ./startup.sh 啟動後tomcat會自動解壓cat.war 並啟動cat服務,cat服務會去載入設定
觀察/usr/local/apache-tomcat-8.5.84/logs裡面的紀錄檔,看看有沒有異常
觀察/data/applogs/cat 裡面的cat啟動紀錄檔,一般看資料庫能不能連線上
cd /data/applogs/cat
cat cat_xxx.log xx自己換一下日期
8. 存取cat地址
在瀏覽器輸入ip:8080/cat/r
9.修改伺服器端設定
(2者選其一):
在瀏覽器輸入 ip:8080/cat/s/config?op=serverConfigUpdate
或者頁面點Configs->全域性系統設定->伺服器端設定 效果是一樣的
如果是叢集部署,還需要改一下本檔案 default裡面的,搜一下remote-servers
<property name="remote-servers" value="ip1:8080,ip2:8080"/>
此設定用於同步各個機器設定
點提交
10.使用者端路由設定
在瀏覽器輸入 ip:8080/cat/s/config?op=routerConfigUpdate
或者頁面點Configs->全域性系統設定->使用者端路由 效果是一樣的
此設定主要是告訴使用者端 應該連線哪個伺服器,單臺部署就配一個,多臺部署配多個,也是替換掉ip為自己的就行了
11.專案資訊設定
在Configs->專案資訊設定中,加入自己的專案資訊,聯絡人之類的,方便後續新增監控,告警聯絡人之類的
如果使用者端接入不成功,出現connection error的錯誤,就要來使用者端路由這裡看看是不是配錯什麼了
部署完成!!!
不出意外的話,點選applition ->tranaction 應該不會出現500了。
如果還是出現500,那當我沒說 - -!
在瀏覽器輸入 ip:8080/cat/s/config?op=serverConfigUpdate
如果是叢集,把這裡設定好,如果這裡設定的是外網地址就會一直出現,不過不影響使用
如果是公司內網,把內網ip寫上去就行
1.檢查jdk版本,我部署過多套,1.8基本不會出問題,1.7偶爾會有問題
2.檢查tomcat版本,和啟動紀錄檔
3.檢查我上訴安裝流程,有沒有沒有做到的,例如資料夾路徑,許可權,java_home環境變數
4.啟動後tomcat會自動解壓cat.war 並啟動cat服務,cat服務會去/data/appdatas/cat載入組態檔datasource.xml,
所以要確定mysql可用,表建立完整,連線字串設定無問題,無特殊字元 圓角,設定確定無誤進行下一項
5.再次執行一遍安裝步驟中的9,10 兩項,必要情況下可以重啟tomcat ,甚至伺服器
6.確認war包來源無問題,如果自己用編譯的war包有問題,儘量用官網的 3.0的
1.檢查網路環境,特別是公司內網,有時候是不能存取外網的
2.檢查使用者端client.xml 檔案路徑,app.properties路徑
3.檢視cat_home/cat_xx.log紀錄檔 排查問題,不外乎組態檔找不到,組態檔設定錯誤,組態檔ip無法存取,cat伺服器未正常對外提供服務
對外通訊埠 如3306,8080,2280,2281等埠要放開,可以在控制檯設定
雲伺服器下載什麼的都非常簡單,部署幾分鐘就好了
公司內網生產環境一般無法存取外網,無法線上安裝和下載,所以一些檔案上傳解壓會麻煩一些,特別是有些埠是置頂的,如tomcat不是8080,要改成8000這張,還要叢集部署,設定nginx,設定域名
叢集要注意的是多個機器之間的通訊,例如我2臺機器一個在阿里雲一個在華為雲,ip用的都是公網ip,會出現 【出問題的cat伺服器端】,正常在公司內網部署,用的都是內網ip,不會出現這個,當然 出現這個提示不影響使用
在瀏覽器輸入 ip:8080/cat/s/config?op=serverConfigUpdate
remote-servers 是在一臺機器上設定這個後,多臺機器會自動同步伺服器設定
使用者端路由設定
<default-server id="10.xx" weight="1.0" port="2280" enable="true"/>
<default-server id="10.xx2" weight="1.0" port="2280" enable="true"/>
enable="true" 要注意,預設可能是false
如果使用者端和伺服器端 都部署在一臺伺服器上,/data/appdatas/cat/client.xml檔案是給使用者端用的,/data/appdatas/cat/datasource.xml是給伺服器端用的
使用者端應用在自動化部署或者本地測試時,不想使用預設路徑時,除了自己編譯cat-client修改原始碼外,還可以指定系統變數CAT_HOME的路徑
伺服器端設定
<?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="true"/> <property name="alarm-machine" value="true"/> <property name="hdfs-enabled" value="false"/> <property name="remote-servers" value="139.196.1.1:8080,123.60.1.2: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="139.196.1.1"> <properties> <property name="job-machine" value="true"/> <property name="send-machine" value="true"/> <property name="alarm-machine" value="true"/> </properties> </server> </server-config>
使用者端路由設定
<?xml version="1.0" encoding="utf-8"?> <router-config backup-server="139.196.1.1" backup-server-port="2280"> <default-server id="139.196.1.1" weight="1.0" port="2280" enable="true"/> <default-server id="123.60.1.2" 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="139.196.1.1"/> <group-server id="123.60.1.2"/> </server-group> <domain id="cat"> <group id="default"> <server id="139.196.1.1" port="2280" weight="1.0"/> <server id="123.60.1.2" port="2280" weight="1.0"/> </group> </domain> </router-config>
datasource.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://xx:3306/cat]]></url> <!-- 請替換為真實資料庫URL及Port --> <user>root</user> <password>123456</password> <connectionProperties><![CDATA[useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&socketTimeout=120000]]></connectionProperties> </properties> </data-source> </data-sources>
client.xml
<?xml version="1.0" encoding="utf-8"?> <config mode="client"> <servers> <server ip="139.196.1.1" port="2280" http-port="8001"/> <server ip="123.60.1.2" port="2280" http-port="8001"/> </servers> </config>
app.name =xxx-app
路徑 專案中resource/META-INF/app.properties
各種環境的cat我都部署了好多次,每次遇到的情況也不一樣,只能說想要在公司搭一套進行簡單的使用,上手難度還是非常高的,不像skywalking 部署超級簡單docker環境下 docker compose 直接搞定,不過skywalking擅長的是鏈路追蹤和紀錄檔查詢,對於metrics+監控告警 方面還不夠。結合使用效果更佳。
目前cat已經屬於比較老的中介軟體了,美團方面開源部分沒維護了,部署起來又困難,加上程式碼侵入性,用的人不多了。
但是用過cat的人,基本都會喜歡用cat,那種服務視覺化、透明化,超強控制力的感覺,以agent為代表的skywaling們是遠遠比不了的。