Skip to content
forked from dianping/cat

美团点评实时应用监控平台,基于 3.1.0 版本改造,新增链路跟踪,集成 HTTP、RPC、SQL、Redis、Log4j2、MQ 埋点,支持配置钉钉告警。

License

Notifications You must be signed in to change notification settings

shiyindaxiaojie/cat

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CAT 实时监控平台

CAT 是美团点评开源的实时应用监控平台,提供了 TracsactionEventProblemBusiness 等丰富的指标项。在实际的生产需求中,笔者进行了部分扩展:

  1. 链路跟踪:通过日志的链路ID 搜索消息树,定位问题更高效。
  2. 告警优化:支持邮件、钉钉、微信、飞书机器人推送,无需部署额外资源。
  3. 组件扩展:新增应用大盘、数据库大盘、缓存大盘、服务大盘告警。
  4. 工单集成:支持告警自动录入 Jira Software,提高问题处理效率。

本项目已投入生产使用,如果您有使用上的问题,欢迎查阅我的笔记

演示图例

风格美化

改造前:

改造后:

链路跟踪(New)

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

告警监控(New)

支持邮件、钉钉、微信、飞书机器人推送,无需部署额外资源。

大盘优化(New)

其他优化

Transaction

Event

Business

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

推荐使用 eden-cat-spring-boot-starter 提供的 @CatMetric 注解实现埋点,支持 SpEL 表达式,代码示例如下:

@CatMetric(name = "'客户[' + #cust.custId + ']资产查询调用次数'", count = 1)
public Response listAsset(Cust cust) {
    //
}

Matrix

统计所有接口的性能情况

Cross

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

Heart Beat

Dependency

Browser

Mobile

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,请参考以下命令运行。

```bash
docker run -e MYSQL_URL="127.0.0.1" -e MYSQL_PORT="3306" -e MYSQL_SCHEMA="cat" -e MYSQL_USERNAME="" -e MYSQL_PASSWD="" -p 8080:8080 --name=cat-home -d shiyindaxiaojie/cat-home
```

如何部署

注意:除了 Helm 部署,在停止 CAT 进程之前最好调用 curl http://localhost:8080/cat/r/home?op=checkpoint ,将内存数据持久化磁盘,避免重启后丢失。

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 框架,只需要两步就可以完成 CAT 的集成。

  1. 引入 CAT 依赖
<dependency>
    <groupId>io.github.shiyindaxiaojie</groupId>
    <artifactId>eden-cat-spring-boot-starter</artifactId>
</dependency>
  1. 开启 CAT 配置
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
  • 面向数据模型的 分层架构,代码实例请查看 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

About

美团点评实时应用监控平台,基于 3.1.0 版本改造,新增链路跟踪,集成 HTTP、RPC、SQL、Redis、Log4j2、MQ 埋点,支持配置钉钉告警。

Topics

Resources

License

Security policy

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Java 92.4%
  • C 3.5%
  • Less 2.3%
  • C# 1.0%
  • FreeMarker 0.3%
  • Python 0.2%
  • Other 0.3%