分布式监控平台CAT原理

背景介绍

背景-无工具帮助时对系统认知

  • 什么样?
  • 在干什么?
  • 干的怎么样?
  • 如何干得更好?
  • 生病了如何发现?

背景-面临的问题

  • 快速发现和定位问题
  • 系统频繁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

在这里插入图片描述
在这里插入图片描述

CAT架构-生成HTTP调用分布式消息树

在这里插入图片描述

相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页