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/dev80.hadoop@testserver.com"/>
<property name="dfs.cat.kerberos.principal" value="cat@testserver.com"/>
<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们是远远比不了的。

最新文章

  1. Something Strange (to be completed)
  2. js修改不了input的值
  3. link和@import的区别、及各自的应用
  4. Node连接MySQL
  5. cocos2d-lua 3.5 ios搭建步骤
  6. sqlserver 行转列、列转行[转]
  7. Python调用C模块以及性能分析
  8. JAXB - Unmarshalling
  9. java与.net比较学习系列开发环境和常用调试技巧常用操作快捷键
  10. Preferred Java way to ping a HTTP Url for availability
  11. ZOJ 刷题记录 (。・ω・)ノ゙(Progress:31/50)
  12. Hadoop学习历程(四、运行一个真正的MapReduce程序)
  13. css案例学习之table tr th td ul li实现日历
  14. 进程间通信机制IPC
  15. Php函数完整参考手册
  16. Centos/Rhel7部署Zabbix监控(部署篇之服务器篇)
  17. 关于 &quot;java中常量定义在interface中好还是定义在class中好&quot; 的一些思考
  18. Http Hijacker
  19. ZOJ 2480 - Simplest Task in Windows
  20. Screen Space Depth Varying Glow based on Heat Diffusion

热门文章

  1. ubuntu 下安装串口终端
  2. Java对象拷贝原理剖析及最佳实践
  3. VR技术名词解释
  4. Day29 Linux相关命令的使用
  5. VMware ESXi 8.0 SLIC &amp; Unlocker 集成网卡驱动和 NVMe 驱动 (集成驱动版)
  6. 微服务项目Git仓库自动化脚本
  7. 基于K-means聚类算法进行客户人群分析
  8. .NET周报【12月第3期 2022-12-23】
  9. 巧用视觉障眼法,还原 3D 文字特效
  10. [数据结构]Dijkstra算法求单源最短路径