技术栈.分布式监控CAT

Cat是什么?

一种实时、全量性的开源监控系统,主要是监控JAVA后端(开源地址:http://github.com/dianping/cat

Cat监控的东西?

代码执行次数;
代码执行耗时(极强!一个URL深入到DB的全过程);
业务指标(诸如支付率、转化率、订单数);
定时上报JVM、GC

Cat的特性有哪些?

a.全量
有足够的能力,记下以往每天的数据(异步地压缩前一天的监测数值,保存到HDFS)。
b.实时
遇到埋点,客户端在MQ通道里发送代码监测情况,服务端异步读取消息队列,分析并保存为当前小时报表(用的正是实时计算!)
c.高可靠
追求高可靠不简单哪,Cat为了尽可能存活得久,站得稳,使用了异步序列化、异步传输(自定义序列化协议,放弃通用序列化协议,不仅如此,还使用Netty的NIO来保证通信)
d.高扩展
消息异步发送到消息队列,历史报表异步发送到HDFS,各个步骤均可以分布式部署,近乎横向地增加机器,扩展性能极强哦~
由于很多步骤都异步化,所以对系统的实时性处理要求不高,就算是实时分析当前小时的报表时遇到瓶颈,Cat也可以多开几个线程,并发消费消息,并进行相应的增量计算。
e.搞吞吐
每天Cat处理的数据高达100T,要将这么多数据都存下来,真不容易!

Cat的消息存储

每个消息的ID都是定制的,格式都是『应用名称-机器IP-时间除以小时得到的整点数-索引INDEX』,存储结构如下图:

根据特定机器,并根据索引index去找到48bits的索引,根据索引找到压缩数据,解压,据偏移地址拿到64K的消息。