點評cat系列-服務器開發環境部署


我們有三種部署方式:
1. docker 部署
2. 采用官方的 war 包部署.
3. 源碼部署

很顯然 docker 部署是最簡單的, 我嘗試了多次, 都在 cat docker 容器鏡像的編譯過程失敗了. 原因是: 鏡像編譯需要先編譯 java 源碼為 war 包, 這中間要從 maven 官網庫下載很多 org.unidal 下的 jar 包, org.unidal 下的 jar 包已經升級到新版本, 而 cat 源碼中 pom.xml 指定的仍是老版本, 導致下載失敗. 這應該是官方最近在升級 3.0 版, 代碼沒有完全 align 好.

顯然, 源碼部署暫時也行不通, 所以我采用了官方 war 包部署.

========================
Docker 部署步驟
========================
參考: https://github.com/dianping/cat/blob/master/cat-doc/posts/ch4-server/README.md
官方並沒提供已經編譯好的 docker 鏡像, 大致步驟如下:
1. 從 github 上下載完整源碼
2. 將 docker/docker-compose.yml 文件中的漢字都刪除, 否則之后的 docker-compose up 命令會報錯.
3. 運行 docker-compose up 命令, 該命令將完成:
    (1)cat docker 容器鏡像的編譯
    (2)mysql 鏡像下載,
    (3) 啟動 mysql 容器和 cat 容器.
4. 第一次運行以后,數據庫中沒有表結構,需要通過下面的命令創建表
docker exec <container_id> bash -c "mysql -uroot -Dcat < /init.sql"
說明:<container_id> 需要替換為 cat 容器的真實 id. 通過 docker ps 可以查看到 mysql 容器 id


========================
windows 下 war 包部署開發環境
========================
准備工作: 配置好 jdk8 和 tomcat, 官方建議 tomcat 使用版本 7.*.或 8.0.

步驟 1: 初始化 Mysql 數據庫, 一套 CAT 集群需要部署一個數據庫, 先新建一個名為 cat 數據庫, 數據庫編碼使用 utf8mb4, 建表語句為 script/CatApplication.sql .

步驟 2: 在 tomcat 程序運行盤下新建 /data/appdatas/cat 和 /data/applogs/cat 兩個目錄.


步驟 3: [非必需] 配置 /data/appdatas/cat/client.xml, 其中 http-port 為 tomcat 端口, 我機器上是 8888 端口. 配置 client.xml 之后, 將監控本機的cat服務. 

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

 

步驟 4: 配置/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://127.0.0.1:3306/cat]]></url>  <!-- 請替換為真實數據庫 URL 及 Port  -->
            <user>root</user>  <!-- 請替換為真實數據庫用戶名  -->
            <password>toor</password>  <!-- 請替換為真實數據庫密碼  -->
            <connectionProperties><![CDATA[useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&socketTimeout=120000]]></connectionProperties>
        </properties>
    </data-source>
</data-sources>

 

步驟 5: 下載編譯好的 war 包, 此 war 是用 jdk8, 服務端請使用 jdk8 版本.
http://cat.meituan.com/nexus/service/local/repositories/releases/content/com/dianping/cat/cat-home/3.0.0/cat-home-3.0.0.war

步驟 6: 將下載的 war 文件重命名為 cat.war, 放入 tomcat 容器 webapps 根目錄下, 並啟動 tomcat.
然后修改客戶端的路由策略, 訪問鏈接 http://127.0.0.1:8888/cat/s/config?op=routerConfigUpdate
把下面的 xml 文件的 127.0.0.1 替換為你本機的實際的內網 IP,比如說 192.168.1.1, 然后重啟 tomcat .

<?xml version="1.0" encoding="utf-8"?>
<router-config backup-server="127.0.0.1" backup-server-port="2280">
   <default-server id="127.0.0.1" weight="1.0" port="2280" enable="true"/>
   <network-policy id="default" title="default" block="false" server-group="default_group">
   </network-policy>
   <server-group id="default_group" title="default-group">
      <group-server id="127.0.0.1"/>
   </server-group>
</router-config>

 

步驟 7: 更改服務端配置
訪問鏈接 http://127.0.0.1:8888/cat/s/config?op=serverConfigUpdate
說明:這個只需要更新一次,配置是保存在 mysql 的數據庫里面.
本機模式可直接復制以下內容,注意要修改 127.0.0.1 為實際的內網 IP,然后點擊提交. 本配置已經將本機服務器 tag 下的  job-machine 和 alarm-machine 都可以配置為 true, 以便於 debug, 然后重啟 tomcat. 需要說明的是 local mode, 是用於 cat 項目本身的開發,部署環境時置為false即可. 

<?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="127.0.0.1:8888"/>  <!-- 本機模式這個 IP 替換為 cat 拿到的內網 IP-->
      </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/user/cat" base-dir="logview"/>
        <hdfs id="dump" max-size="128M" server-uri="hdfs://10.1.77.86/user/cat" base-dir="dump"/>
        <hdfs id="remote" max-size="128M" server-uri="hdfs://10.1.77.86/user/cat" base-dir="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="127.0.0.1"> <!-- 本機模式這個 IP 替換為 cat 拿到的內網 IP,此 IP 是看 transaction 報表下 cat 的自己上報的 IP,用 127.0.0.1 是沒用的.  -->
      <properties>
         <property name="job-machine" value="true"/>
         <property name="alarm-machine" value="true"/>
         <property name="send-machine" value="true"/>
      </properties>
   </server>
</server-config>

 

驗證:
http://127.0.0.1:8888/cat/
3.0 版本默認密碼: admin/admin
2.0 版本密碼: catadmin/catadmin

 

======================
ClientConfig, RouterConfig 和 ServerConfig
======================
Cat有三個重要配置, 分別是: ClientConfig, RouterConfig 和 ServerConfig, 分別代表客戶端信息, 服務路由信息以及服務端配置信息.

ClientConfig 配置(即client.xml 配置文件):
每個客戶端對應一組對服務器以及一個domain信息, 客戶端默認從這組服務中的一個節點上拉取路由配置信息. 客戶端的查詢參數里帶有domain信息, 服務端的路由配置里如果有相應的domain則返回相應domain下的一組server信息, 如果沒有則返回default servers.
返回的路由信息包含一組日志服務節點以及采樣比例(sample), 日志服務節點包含權重, socket端口號以及id(ip). 采樣比例是指客戶端的cat日志多少次里抽樣發送1次, 例如0.2則代表記錄5次日志會忘服務端發送1次.

RouterConfig 配置(通過 url 配置):
客戶端拉取到router信息后, 和router的日志server列表中第一個可用server之間建立netty channel, 並啟動一個線程對channel進行維護. 對channel的維護主要包括:
1. 比較服務端路由信息和客戶端上次抓取的是否一致, 不一致則更新客戶端router信息, 並重新建立新channel.
2. 判斷當前channel狀態, 如果狀態不正常, 則從router的server列表里重新找出一個能用的server建立channel.
客戶端拉取不到router信息時, 默認使用客戶端下的server列表作為遠程日志服務器組.

ServerConfig 配置(通過 url 配置):
ServerConfig主要用於服務端節點的職能描述, 主要有以下幾類功能:
1. 定義服務節點職能, 可以運行哪類任務, 以及是否可以發送告警信息和是否是hdfs存儲節點.
2. 通過consoleConfig定義相應報表數據的獲取節點, 一般用於告警節點遠程拉取所有節點的報表數據進行篩選.
3. ConsumerConfig定義各種類型的事務時間閾值, 從名字可以看出來分別定義url, sql以及cache類型的事務時間的閾值, 超過這個時間會被認為是一個problem.


========================
參考:
========================

深入詳解美團點評CAT跨語言服務監控(一) CAT簡介與部署
https://blog.csdn.net/caohao0591/article/details/80693289


官方部署文檔
https://github.com/dianping/cat/blob/master/cat-doc/posts/ch4-server/README.md


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM