美团点评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格式存储,在运行时会被解析到具体实体类存储.我们选取 ...
随机推荐
- Pod控制器详解
Pod控制器详解 7.1 Pod控制器介绍 Pod是kubernetes的最小管理单元,在kubernetes中,按照pod的创建方式可以将其分为两类: 自主式pod:kubernetes直接创建出来 ...
- Day29 Linux相关命令的使用
今日内容 基本概念 安装 基本命令 在linux上安装软件 jdk mysql jdk Nginx的安装 一.概述 1.Unix linux基于Unix,Unix由贝尔实验室在1969年开发 一开始由 ...
- 【消息队列面试】6-10:Rebalance机制、副本同步机制、架构设计、zk的作用、kafka的高性能
六.简述kafka的Rebalance[偏向实战,有难度] 1.背景 kafka日志:在消息量大.高并发时,经常会出现rebalance中 rebalance会影响kafka性能,会阻塞partiti ...
- 【大数据面试】【框架】Linux命令、Shell工具、常见Shell脚本(群起脚本、数仓导入)
一.Linux 1.常用高级命令 ps -ef:查看进程详情,ps -ef|grep dae可以搜索指定进程,-e表示环境变量 ps -au:以用户为主的详细格式,显示进程平均占用资源,不包括cmd列 ...
- (java 实现开箱即用基于 redis 的分布式锁
项目简介 lock 为 java 设计的分布式锁,开箱即用,纵享丝滑. 开源地址:https://github.com/houbb/lock 目的 开箱即用,支持注解式和过程式调用 基于 redis ...
- elasticsearch倒排索引(全面了解)
SimpleAI推荐语: 前年转过这篇文章,最近在看检索相关论文,发现又有点忘记倒排索引(inverted index)的具体内容,遂翻出来再看看,不得不说,这个漫画画的太好了,娓娓道来,一看就懂,再 ...
- vue3项目,记录我是如何用1h实现产品预估1天工作量的界面需求
最近在编写前端界面,硬是一人一周时间加班加点写完了一个项目的前端界面(一级菜单有12个页面+一个控制台大屏,二三级界面有N个),之前预估前端界面的编写需要一个月,我是自己把自己卷死了(没有办法,项目经 ...
- 【机器学习】李宏毅——Unsupervised Learning
读这篇文章之间欢迎各位先阅读我之前写过的线性降维的文章.这篇文章应该也是属于Unsupervised Learning的内容的. Neighbor Embedding Manifold Learnin ...
- Spring IOC官方文档学习笔记(三)之依赖项
1.依赖注入 (1) 依赖注入(DI)的概念:某个bean的依赖项,由容器来负责注入维护,而非我们自己手动去维护,以此来达到bean之间解耦的目的,如下 //情况一:不使用依赖注入 public cl ...
- ssm——springMVC整理
目录 1.概念 1.1.什么是SpringMVC 1.2.B/S架构 1.3.MVC结构 1.4.Spring MVC常用名词 1.5.常用注解 1.6.rest和restfull 1.7.Reque ...