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. Pod控制器详解

    Pod控制器详解 7.1 Pod控制器介绍 Pod是kubernetes的最小管理单元,在kubernetes中,按照pod的创建方式可以将其分为两类: 自主式pod:kubernetes直接创建出来 ...

  2. Day29 Linux相关命令的使用

    今日内容 基本概念 安装 基本命令 在linux上安装软件 jdk mysql jdk Nginx的安装 一.概述 1.Unix linux基于Unix,Unix由贝尔实验室在1969年开发 一开始由 ...

  3. 【消息队列面试】6-10:Rebalance机制、副本同步机制、架构设计、zk的作用、kafka的高性能

    六.简述kafka的Rebalance[偏向实战,有难度] 1.背景 kafka日志:在消息量大.高并发时,经常会出现rebalance中 rebalance会影响kafka性能,会阻塞partiti ...

  4. 【大数据面试】【框架】Linux命令、Shell工具、常见Shell脚本(群起脚本、数仓导入)

    一.Linux 1.常用高级命令 ps -ef:查看进程详情,ps -ef|grep dae可以搜索指定进程,-e表示环境变量 ps -au:以用户为主的详细格式,显示进程平均占用资源,不包括cmd列 ...

  5. (java 实现开箱即用基于 redis 的分布式锁

    项目简介 lock 为 java 设计的分布式锁,开箱即用,纵享丝滑. 开源地址:https://github.com/houbb/lock 目的 开箱即用,支持注解式和过程式调用 基于 redis ...

  6. elasticsearch倒排索引(全面了解)

    SimpleAI推荐语: 前年转过这篇文章,最近在看检索相关论文,发现又有点忘记倒排索引(inverted index)的具体内容,遂翻出来再看看,不得不说,这个漫画画的太好了,娓娓道来,一看就懂,再 ...

  7. vue3项目,记录我是如何用1h实现产品预估1天工作量的界面需求

    最近在编写前端界面,硬是一人一周时间加班加点写完了一个项目的前端界面(一级菜单有12个页面+一个控制台大屏,二三级界面有N个),之前预估前端界面的编写需要一个月,我是自己把自己卷死了(没有办法,项目经 ...

  8. 【机器学习】李宏毅——Unsupervised Learning

    读这篇文章之间欢迎各位先阅读我之前写过的线性降维的文章.这篇文章应该也是属于Unsupervised Learning的内容的. Neighbor Embedding Manifold Learnin ...

  9. Spring IOC官方文档学习笔记(三)之依赖项

    1.依赖注入 (1) 依赖注入(DI)的概念:某个bean的依赖项,由容器来负责注入维护,而非我们自己手动去维护,以此来达到bean之间解耦的目的,如下 //情况一:不使用依赖注入 public cl ...

  10. 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 ...