美团点评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/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们是远远比不了的。
美团点评CAT部署了各种环境不下10次,遇到的坑整理的更多相关文章
- 点评cat系列-服务器开发环境部署
我们有三种部署方式:1. docker 部署2. 采用官方的 war 包部署. 3. 源码部署 很显然 docker 部署是最简单的, 我尝试了多次, 都在 cat docker 容器镜像的编译过程失 ...
- 美团点评CAT监控平台研究
1. 美团点评CAT监控平台研究 1.1. 前言 此文根据我对官方文档阅读并记录整理所得,中间可能会穿插一些自己的思考和遇坑 1.2. 简介 CAT 是基于 Java 开发的实时应用监控平台,为美团点 ...
- 深入详解美团点评CAT跨语言服务监控(一) CAT简介与部署
前言: CAT是一个实时和接近全量的监控系统,它侧重于对Java应用的监控,除了与点评RPC组件融合的很好之外,他将会能与Spring.MyBatis.Dubbo 等框架以及Log4j 等结合,支持P ...
- 深入详解美团点评CAT跨语言服务监控(七)消息分析器与报表(二)
CrossAnalyzer-调用链分析 在分布式环境中,应用是运行在独立的进程中的,有可能是不同的机器,或者不同的服务器进程.那么他们如果想要彼此联系在一起,形成一个调用链,在Cat中,CrossAn ...
- 深入详解美团点评CAT跨语言服务监控(二) CAT服务端初始化
Cat模块 Cat-client : cat客户端,编译后生成 cat-client-2.0.0.jar ,用户可以通过它来向cat-home上报统一格式的日志信息,可以集成到 mybatis.spr ...
- 饿了么监控系统 EMonitor 与美团点评 CAT 的对比
背景介绍 饿了么监控系统EMonitor:是一款服务于饿了么所有技术部门的一站式监控系统,覆盖了系统监控.容器监控.网络监控.中间件监控.业务监控.接入层监控以及前端监控的数据存储与查询.每日处理总数 ...
- 深入详解美团点评CAT跨语言服务监控(三)CAT客户端原理
cat客户端部分核心类 message目录下面有消息相关的部分接口 internal目录包含主要的CAT客户端内部实现类: io目录包含建立服务端连接.重连.消息队列监听.上报等io实现类: spi目 ...
- 深入详解美团点评CAT跨语言服务监控(六)消息分析器与报表(一)
大众点评CAT微服务监控架构对于消息的具体处理,是由消息分析器完成的,消息分析器会轮训读取PeriodTask中队列的消息来处理,一共有12类消息分析器,处理后的结果就是生成各类报表. 消息分析器的构 ...
- 深入详解美团点评CAT跨语言服务监控(四)服务端消息分发
这边首先介绍下大众点评CAT消息分发大概的架构如下: 图4 消息分发架构图 分析管理器的初始化 我们在第一章讲到服务器将接收到的消息交给解码器(MessageDecoder)去做解码最后交给具体的消费 ...
- 深入详解美团点评CAT跨语言服务监控(五)配置与数据库操作
CAT配置 在CAT中,有非常多的配置去指导监控的行为,每个配置都有相应的配置管理类来管理,都有一个配置名, 配置在数据库或者配置文件中都是以xml格式存储,在运行时会被解析到具体实体类存储.我们选取 ...
随机推荐
- 修改Listen 1源码的一点心得
注:本文只作为技术交流 首先感谢听1的作者写出这么强大的音乐播放器!! 软件首页地址:点击打开链接 软件的github上上上地址:点击打开链接 软件唯一让我美中不足的就是不能下载,这可能是作者考虑到了 ...
- 关于python3调用matplotlib中文乱码问题
问题描述 我用来绘制柱形图,横坐标上面的数据, 但是网上大部分说的都是更改横纵坐标标签的乱码问题,而不是横坐标数据乱码问题 解决办法 更改横纵坐标上标签的中文不乱码 import matplotlib ...
- ThinkPHP6.0在phpstorm添加查询构造器和模型的代码提示
ThinkPHP6.0升级后 使用查询构造器和模型都没有了提示 原因是tp6源码中没有添加注释 找到Model.php * @method Query where(mixed $field, stri ...
- 【微服务架构设计实施】第一部分:架构篇-1:微服务架构与Spring Cloud介绍
〇.概述 一.微服务架构与Spring Cloud (一)概念 不同说法:细粒度的.清凉组件化的小型SOA(面向服务架构) 统一说法:小型应用程序(服务组件),使用轻量级设计方法和HTTP协议通信 理 ...
- PW4052 是一颗适用于单节锂电池的、具有恒压/恒流充电模式的充电管理 IC
PW4052 是一颗适用于单节锂电池的.具有恒压/恒流充电模式的充电管理 IC.该芯片采用开关型的工作模式, 能够为单节锂电池提供快速. 高效且简单的充电管理解决方案.PW4052 采用三段式充电管理 ...
- 深度学习GPU加速配置方法
深度学习GPU加速配置方法 一.英伟达官方驱动及工具安装 首先检查自己的电脑驱动版本,未更新至最新建议先将驱动更新至最新,然后点击Nvidia控制面板 2.在如下界面中点击系统信息,点击显示可以看见当 ...
- ORM数据增删改查 django请求生命周期 django路由层 反向解析
目录 可视化界面之数据增删改查 补充 1.建表 2.数据展示功能 3.数据添加功能 4.数据编辑功能 5.数据删除功能 django请求生命周期流程图 crsf wsgirel 与 uwsgi ngi ...
- ES6 中 Promise对象使用学习
转载请注明出处: Promise 对象是 JavaScript 的异步操作解决方案,为异步操作提供统一接口.它起到代理作用(proxy),充当异步操作与回调函数之间的中介,使得异步操作具备同步操作的接 ...
- [Unity]限制两个物体之间的距离
//限制两个物体之间的距离 if (Vector3.Distance(B.position, A.position) > maxDistance) { //获得两个物体之间的单位向量 Vecto ...
- [LeetCode]819. 最常见的单词
题目 给定一个段落 (paragraph) 和一个禁用单词列表 (banned).返回出现次数最多,同时不在禁用列表中的单词.题目保证至少有一个词不在禁用列表中,而且答案唯一. 禁用列表中的单词用小写 ...