美團點評CAT部署了各種環境不下10次,遇到的坑整理

CAT是什麼

我的理解是一個收集服務調用等運行情況的監控系統。

 相信你能搜到這篇博客我就不多介紹了,這裏有鏈接 傳送門

本博客僅僅只幫助大家解決部署方面的問題

來自一個用戶的吐槽

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環境)

環境準備:

linux centos7(華爲雲or阿里雲等雲服務器)

tomcat8.5

jdk1.8 (配置好環境變量)

mysql5.7

cat.war文件,一般3.0版

數據庫腳本 CatApplication.sql  先創建數據庫cat 到mysql執行建表

datasource.xml 文件,裏面的連接字符串改成自己的

client.xml(這個文件服務部署用不到,客戶端接入的時候用,親測)

材料就是這些,不過雲服務器需要開通外部訪問的端口,切記 保證如果cat服務和數據庫不在一臺機器上時能連接上

服務端部署/data/appdatas/cat/client.xml和 server.xml配置無用(限3.0+war包),可以去掉

部署

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,那當我沒說 - -!

 

出現問題的解決方法

1.出問題CAT的服務端

在瀏覽器輸入 ip:8080/cat/s/config?op=serverConfigUpdate    

<property name="remote-servers" value="xx:8080,xx2:8080"/>

如果是集羣,把這裏配置好,如果這裏配置的是外網地址就會一直出現,不過不影響使用

如果是公司內網,把內網ip寫上去就行

 

2.點任何地方都是500

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的

 

3.客戶端連接不上cat

  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    

<property name="remote-servers" value="xx:8080,xx2:8080"/>

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_HOME

客戶端應用在自動化部署或者本地測試時,不想使用默認路徑時,除了自己編譯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們是遠遠比不了的。

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