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次,遇到的坑整理的更多相关文章

  1. 点评cat系列-服务器开发环境部署

    我们有三种部署方式:1. docker 部署2. 采用官方的 war 包部署. 3. 源码部署 很显然 docker 部署是最简单的, 我尝试了多次, 都在 cat docker 容器镜像的编译过程失 ...

  2. 美团点评CAT监控平台研究

    1. 美团点评CAT监控平台研究 1.1. 前言 此文根据我对官方文档阅读并记录整理所得,中间可能会穿插一些自己的思考和遇坑 1.2. 简介 CAT 是基于 Java 开发的实时应用监控平台,为美团点 ...

  3. 深入详解美团点评CAT跨语言服务监控(一) CAT简介与部署

    前言: CAT是一个实时和接近全量的监控系统,它侧重于对Java应用的监控,除了与点评RPC组件融合的很好之外,他将会能与Spring.MyBatis.Dubbo 等框架以及Log4j 等结合,支持P ...

  4. 深入详解美团点评CAT跨语言服务监控(七)消息分析器与报表(二)

    CrossAnalyzer-调用链分析 在分布式环境中,应用是运行在独立的进程中的,有可能是不同的机器,或者不同的服务器进程.那么他们如果想要彼此联系在一起,形成一个调用链,在Cat中,CrossAn ...

  5. 深入详解美团点评CAT跨语言服务监控(二) CAT服务端初始化

    Cat模块 Cat-client : cat客户端,编译后生成 cat-client-2.0.0.jar ,用户可以通过它来向cat-home上报统一格式的日志信息,可以集成到 mybatis.spr ...

  6. 饿了么监控系统 EMonitor 与美团点评 CAT 的对比

    背景介绍 饿了么监控系统EMonitor:是一款服务于饿了么所有技术部门的一站式监控系统,覆盖了系统监控.容器监控.网络监控.中间件监控.业务监控.接入层监控以及前端监控的数据存储与查询.每日处理总数 ...

  7. 深入详解美团点评CAT跨语言服务监控(三)CAT客户端原理

    cat客户端部分核心类 message目录下面有消息相关的部分接口 internal目录包含主要的CAT客户端内部实现类: io目录包含建立服务端连接.重连.消息队列监听.上报等io实现类: spi目 ...

  8. 深入详解美团点评CAT跨语言服务监控(六)消息分析器与报表(一)

    大众点评CAT微服务监控架构对于消息的具体处理,是由消息分析器完成的,消息分析器会轮训读取PeriodTask中队列的消息来处理,一共有12类消息分析器,处理后的结果就是生成各类报表. 消息分析器的构 ...

  9. 深入详解美团点评CAT跨语言服务监控(四)服务端消息分发

    这边首先介绍下大众点评CAT消息分发大概的架构如下: 图4 消息分发架构图 分析管理器的初始化 我们在第一章讲到服务器将接收到的消息交给解码器(MessageDecoder)去做解码最后交给具体的消费 ...

  10. 深入详解美团点评CAT跨语言服务监控(五)配置与数据库操作

    CAT配置 在CAT中,有非常多的配置去指导监控的行为,每个配置都有相应的配置管理类来管理,都有一个配置名, 配置在数据库或者配置文件中都是以xml格式存储,在运行时会被解析到具体实体类存储.我们选取 ...

随机推荐

  1. 数电第二周总结_by_yc

    数电第二周总结_CC 重点: 模块实例化.仿真测试.数值表示.参数.表达式. 模块实例化端口连接方法: A.顺序端口连接:需严格按照模块定义时的顺序 B.明明端口连接:对端口信号顺序不做要求 Ex-1 ...

  2. js day04 实参与形参个数不一致

    // function fn(x, y) {         //     // x = 1         //     // y = undefined         //     // 1 + ...

  3. Spring Boot+Mybatis:实现数据库登录注册与两种properties配置参数读取

    〇.参考资料 1.hutool介绍 https://blog.csdn.net/abst122/article/details/124091375 2.Spring Boot+Mybatis实现登录注 ...

  4. ATM购物车项目 三层架构

    目录 项目开发流程 项目需求 三层架构 (重点) 实际案例 展示层 核心逻辑层 数据处理层 ATM项目 项目开发流程 # 1.项目需求分析 产品经理(客户) 架构师 开发经理 1.架构师 开发经理提前 ...

  5. Django连接数据库(mysql)与Django ORM实操(增删改查) 前端页面

    目录 一:pycharm链接数据库(MySQL) 1.pycharm右侧Database工具栏 2.下载对应的驱动,填写MySQL数据库信息连接(当前为客户端) 3.pycharm连接MySQL数据库 ...

  6. MySQL单表查询(分组-筛选-过滤-去重-排序-分页-判断-正则)

    目录 一:单表查询 1.单表查询(前期准备) 2.插入记录(写入数据) 3.查询关键字 二:查询关键字之where 1.查询id大于等于3小于等于6的数据 2.查询薪资是20000或者18000或者1 ...

  7. 三步快速搭建Typora图床(SM.MS+PicGo)

    三步快速搭建Typora图床(基于SM.MS+PicGo) 前言 在有些同学使用Typora的过程中,会发现Typora不像Word一样,在文档脱离本机后依然正常显示图片,自己的tyopora文件在发 ...

  8. 一次TiDB GC阻塞引发的性能问题分析

    背景 前不久从项目一线同学得到某集群的告警信息,某个时间段 TiDB duration 突然异常升高,持续时间6小时左右,需要定位到具体原因. 分析过程 第一招,初步判断 由于项目条件苛刻,历经苦难才 ...

  9. JavaScript:操作符:算术运算符(加减乘除模幂)及其隐式转换数据类型

    加法+ 减法- 乘法* 除法/ 模运算% 幂运算**,即a ** b求的是a的b次方 执行上述运算时,当两个操作数有非数字时,JS会隐式转换为数字,再进行运算: 一些特殊的非数字,会进行如下转换: t ...

  10. 洛谷P2196例题分析

    [NOIP1996 提高组] 挖地雷(原题) 题目描述 在一个地图上有\(N\)个地窖\((N \le 20)\),每个地窖中埋有一定数量的地雷.同时,给出地窖之间的连接路径.当地窖及其连接的数据给出 ...