文章目录
- @[toc]
- 背景介绍
-
- CAT简介
-
- 技术架构
- CAT架构
- CAT架构-总体架构
- CAT架构-客户端架构
- CAT简介-客户端架构-领域模型
- CAT架构-客户端架构-类关系图
- CAT架构-服务端架构
- CAT架构-消息ID设计
- CAT架构-数据存储设计
- CAT架构-数据存储设计
- CAT架构-消息结构
- CAT架构- CAT消息树生成过程
- CAT架构- CAT消息树生成过程
- CAT架构-消息树编码
- CAT架构-快速理解CAT-Transaction报表
- CAT架构-快速理解CAT-Event报表
- CAT架构-快速理解CAT-Logview
- CAT架构-生成HTTP调用分布式消息树
- CAT架构-分布式消息树- CatRestInterceptor
- CAT架构-分布式消息树-CatFilter
- CAT架构-生成HTTP调用分布式消息树
文章目录
- @[toc]
- 背景介绍
- CAT简介
- 技术架构
- CAT架构
- CAT架构-总体架构
- CAT架构-客户端架构
- CAT简介-客户端架构-领域模型
- CAT架构-客户端架构-类关系图
- CAT架构-服务端架构
- CAT架构-消息ID设计
- CAT架构-数据存储设计
- CAT架构-数据存储设计
- CAT架构-消息结构
- CAT架构- CAT消息树生成过程
- CAT架构- CAT消息树生成过程
- CAT架构-消息树编码
- CAT架构-快速理解CAT-Transaction报表
- CAT架构-快速理解CAT-Event报表
- CAT架构-快速理解CAT-Logview
- CAT架构-生成HTTP调用分布式消息树
- CAT架构-分布式消息树- CatRestInterceptor
- CAT架构-分布式消息树-CatFilter
- CAT架构-生成HTTP调用分布式消息树
背景介绍
背景-无工具帮助时对系统认知
- 什么样?
- 在干什么?
- 干的怎么样?
- 如何干得更好?
- 生病了如何发现?
背景-面临的问题
- 快速发现和定位问题
- 系统频繁FullGC导致系统超时
- 系统存在内存泄露
- 系统异常5分钟后收到报警邮件
- 上线后快速浏览下系统状况
CAT简介
CAT简介-链路追踪框架对比
CAT简介
CAT(Central Application Tracking)
• 基于纯Java开发的分布式实时监控系统
• 分布式
• 实时 (毫秒)
• 近全量
• 高可用
CAT简介-快速发现
- 系统大盘
- 业务大盘
- 报错大盘
CAT简介-快速发现-系统大盘
CAT简介-快速发现-业务大盘
CAT简介-快速发现-报错大盘
CAT简介-快速发现-报警
- 业务报警
- 性能报警
- 应用报警
- 心跳报警
CAT简介-快速发现-实时报警
CAT简介-如何实现?
- 应用级监控
- 系统级监控
- 实时告警
CAT简介-Business报表
- 统计
- 多维度业务指标
- 支持维度
- 项目、指标名称、自定义tag
- 数据来源
- 来自API打点:
- Cat.logMetricForCount 记录一个业务指标,主要衡量单位时间内的次数总和
- Cat.logMetricForDuration 记录一个timer类的业务指标,主要衡量单位时间内平均值
CAT简介-Business报表
CAT简介-Transaction报表
- 统计
- 访问量、响应时间
- 支持维度
- 项目、IP、type、Name
- 数据来源
- API打点:Cat.newTransaction
- 框架打点:MVC、RPC、SQL、Cache、MQ …
CAT简介-Transaction报表
CAT简介-可视化Logview
CAT简介-Event报表
- 统计
- 出现次数
- 支持维度
- 项目、IP、type、Name
- 数据来源
- API打点: Cat.newEvent
- 框架打点:MVC、RPC、SQL、Cache、MQ …
CAT简介-Event报表
CAT简介-Problem报表
- 统计
- Exception、Failed Transaction、Long Http/Service/sql call
- 支持维度
- 项目、IP、异常分类、异常名
- 数据来源
- Transaction、event打点
- API打点: Cat.logError
- 框架打点:MVC、RPC、SQL、Cache、MQ …
CAT简介-Problem报表
CAT简介-心跳报表
CAT简介-报警
技术架构
CAT架构
- 客户端
- cat-client 提供给业务以及中间层埋点的底层SDK
- 服务端
- cat-consumer 用于实时分析从客户端的提供的数据
- 控制端
- cat-home 作为用户提供给用户的展示的控制端
CAT架构-总体架构
CAT架构-客户端架构
CAT简介-客户端架构-领域模型
CAT架构-客户端架构-类关系图
CAT架构-服务端架构
CAT架构-消息ID设计
- CAT每个消息都有一个唯一的ID,这个ID在客户端生成,用于在分布式系统间进行串联和Logview生成。
- CAT消息的MessageId格式ShopWeb-0a010680-375030-2,{domain}-{ip}-{timestamp}-{自增index},CAT消息一共分为四段:
第一段是应用名shop-web
第二段是当前这台机器的IP的16进制格式,0a010680表示10.1.6.108
第三段的375030,是系统当前时间除以小时得到的整点数
第四段的2,是表示当前这个客户端在当前小时的顺序递增号
CAT架构-数据存储设计
CAT读取消息的时候,首先根据Message-ID的前面三段确定唯一的索引文件,在根据Message-ID第四段确定此Message-ID索引位置,根据索引文件的48bits读取数据文件的内容,然后将数据文件进行GZIP解压,在根据块内偏移地址读取出真正的消息内容。
CAT架构-数据存储设计
CAT架构-消息结构
CAT架构- CAT消息树生成过程
CAT架构- CAT消息树生成过程
-
步骤1
-
步骤2
-
步骤3
-
步骤4
-
步骤5
- 步骤6
- 步骤7
- 步骤8
- 步骤9
- 步骤10
- 步骤11
CAT架构-消息树编码
- 前4个字节包含整组字节串的长度,首先通过buf.writeInt(0)占位,编码完通过buf.setInt(index, count)将字节码长度写入buf头4个字节。
- 编码消息树的头部,依次将tree的version, domain, hostName, ipAdress, treadGroupName, treadId, threadName, MessageId, parentMessageId, rootMessageId, sessionToken写入头部,字段之间以"\t"分隔,并以"\n"结尾。空用null表示。
- 编码消息体,每个消息都是以一个表示消息类型的字符开头。
a.“A"表示没有嵌套其他类型消息的事务,
b.有嵌套其他消息的事务,以一个 “t” 开头,然后递归去遍历并编码子消息, 最后以一个"T"结束,
c.“E”/“L”/“M”/“H"分别表示Event/Trace/Metric/Heartbeat类型消息;
然后依次记录时间、type、name
然后根据条件依次写入status、duration+us、data
字段之间依然以”\t"分割,以”\n"结尾,空用null表示
CAT架构-快速理解CAT-Transaction报表
CAT架构-快速理解CAT-Event报表
CAT架构-快速理解CAT-Logview
CAT架构-生成HTTP调用分布式消息树
CAT架构-分布式消息树- CatRestInterceptor
CAT架构-分布式消息树-CatFilter