# cat
**Repository Path**: shiyindaxiaojie/cat
## Basic Information
- **Project Name**: cat
- **Description**: 美团点评实时应用监控平台,基于 3.1.0 版本改造,新增链路跟踪,支持 HTTP、RPC、SQL、Redis、Log4j2 埋点。
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 2
- **Forks**: 2
- **Created**: 2022-09-25
- **Last Updated**: 2024-12-03
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
[license-apache2.0]:https://www.apache.org/licenses/LICENSE-2.0.html
[github-action]:https://github.com/shiyindaxiaojie/Sentinel/actions
[sonarcloud-dashboard]:https://sonarcloud.io/dashboard?id=shiyindaxiaojie_Sentinel
# CAT 实时监控平台
 [][license-apache2.0] [][github-action] [][sonarcloud-dashboard]
CAT 是美团点评开源的实时应用监控平台,提供了 `Tracsaction`、`Event`、`Problem`、`Business` 等丰富的指标项。在实际的生产需求中,笔者进行了部分扩展:
1. 链路跟踪:通过 `TraceId` 搜索消息树,定位问题更高效。
2. 告警优化:支持邮件、钉钉、企业微信、飞书机器人推送,无需部署额外资源。
3. 组件扩展:新增应用大盘、数据库大盘、缓存大盘、服务大盘告警。
## 演示图例
### 改造前

### 改造后
#### Dashboard


#### Tracing
可以通过 TraceId 查找整个链路的 HTTP 请求耗时、RPC 调用情况、Log4j2 业务日志、SQL 和缓存执行耗时。

#### Alert


#### Transaction

#### Event

#### Business
相对于 Transaction 和 Event 更宏观的指标,需要业务自己埋点。

推荐使用 [`eden-cat-spring-boot-starter`](https://github.com/shiyindaxiaojie/eden-architect/tree/main/eden-components/eden-spring-integration/src/main/java/org/ylzl/eden/spring/integration/cat) 提供的 `@CatMetric` 注解实现埋点,支持 SpEL 表达式,代码示例如下:
```java
@CatMetric(name = "'客户[' + #cust.custId + ']资产查询调用次数'", count = 1)
public Response listAsset(Cust cust) {
//
}
```
#### Matrix
统计所有接口的性能情况

#### Cross
可以搜索某个 RPC 接口被调用的情况

#### Heart Beat

#### Dependency
相对 Zipkin 较为简陋,后续有空可以优化下

#### State
查看当前 CAT 和应用节点的状态

## 如何构建
本项目默认使用 Maven 来构建,最快的使用方式是 `git clone` 到本地。在项目的根目录执行 `mvn install -T 4C` 完成本项目的构建。
## 如何启动
### IDEA 启动
1. 在用户目录创建文件夹 `~/.cat/appdatas/cat`,拷贝本项目的 `docs/config` 到该目录下
2. 修改 `docs/config/datasources.xml` 的数据库连接信息
3. 在上述目标数据源执行 `scripts/cat-init-3.3.0.sql` 初始化
4. 检查 `cat-home` 模块已正确设置了 Facet

5. 使用 IDEA 配置 Tomcat 服务器,请注意,多网卡情况下可能会出现 `CAT服务端异常:[127.0.0.1]`,请设置 JVM 启动参数 `host.ip` 指定 IP。

6. 指定访问入口 Context 为 `/cat`

7. 运行 Tomcat 服务器,启动成功后,自动打开 `http://localhost:8080/cat`
### Docker 启动
本项目已发布到 [Docker Hub](https://hub.docker.com/repository/docker/shiyindaxiaojie/cat-home),请参考以下命令运行。
```bash
docker run -e JAVA_OPTS="-Xmx2g -Xms2g -Xmn1g" -e MYSQL_URL="127.0.0.1" -e MYSQL_PORT="3306" -e MYSQL_SCHEMA="cat" -e MYSQL_USERNAME="" -e MYSQL_PASSWD="" -e SERVER_URL="127.0.0.1" -p 8090:8090 --name=cat-home -d shiyindaxiaojie/cat-home
```
## 如何部署
### Tomcat 部署
拷贝本项目的 `docs/config` 到用户目录 `~/.cat/appdatas/cat` 中,按需调整数据库配置。执行 `mvn clean package` 打包成一个 cat-home.war,部署在目标 Tomcat 的 `webapps` 目录下,启动 Tomcat 即可。
### Docker 部署
在项目根目录执行 `docker build -f docker/Dockerfile cat:{tag} .` 打包为镜像。
### Helm 部署
进入 `helm` 目录,执行 `helm install -n cat cat .` 安装,在 K8s 环境将自动创建 CAT 所需的资源文件。
## 如何接入
为了减少客户端集成的工作,您可以使用 [eden-architect](https://github.com/shiyindaxiaojie/eden-architect) 框架,只需要两步就可以完成 CAT 的集成。
1. 引入 CAT 依赖
````xml
io.github.shiyindaxiaojie
eden-cat-spring-boot-starter
````
2. 开启 CAT 配置
````yaml
cat:
enabled: false # 默认关闭,请按需开启
trace-mode: true # 开启访问观测
support-out-trace-id: false # 允许异构子系统间透传链路ID
home: /tmp
servers: localhost # CAT 地址
tcp-port: 2280
http-port: 8080
# 如果您使用 Dubbo 组件,请增加对应的过滤器,确保 CAT 埋点正常工作
dubbo:
provider:
filter: cat-tracing
consumer:
filter: cat-tracing,cat-consumer
````
另外,笔者提供了两种不同应用架构的示例,里面有集成 CAT 的示例。
* 面向领域模型的 **COLA 架构**,代码实例可以查看 [eden-demo-cola](https://github.com/shiyindaxiaojie/eden-demo-cola)
* 面向数据模型的 **分层架构**,代码实例请查看 [eden-demo-layer](https://github.com/shiyindaxiaojie/eden-demo-layer)
## 版本规范
项目的版本号格式为 `x.y.z` 的形式,其中 x 的数值类型为数字,从 0 开始取值,且不限于 0~9 这个范围。项目处于孵化器阶段时,第一位版本号固定使用 0,即版本号为 `0.x.x` 的格式。
* 孵化版本:0.0.1-SNAPSHOT
* 开发版本:1.0.0-SNAPSHOT
* 发布版本:1.0.0
版本迭代规则:
* 1.0.0 <> 1.0.1:兼容
* 1.0.0 <> 1.1.0:基本兼容
* 1.0.0 <> 2.0.0:不兼容
## 变更日志
请查阅 [CHANGELOG.md](https://github.com/shiyindaxiaojie/cat/blob/3.4.x/CHANGELOG.md)