背景
什么是监控?就是异常了,然后报警。以前的话,早期,可能是捕获异常,然后发邮件,这个也是实时报警。监控的本质,就是为了报警。
当然,刚才说的,发邮件,这个是最早期的,比较原始的,功能比较单一,现在的监控功能比较多,除了异常告警,还有其他功能,比如告警的数量,我不是每次都告警,而是达到一定的阈值才告警。
如果是邮件,就没有办法统计报错次数了。因为每次捕获异常,都直接就发邮件了。
所以,在以前的邮件报警功能基础之上,又加了统计和阈值的功能,这就成了后来的cat。
cat的本质也是,捕获异常,然后写数据到cat服务器。发邮件也是,捕获异常,然后写数据到邮箱。
区别就是,以前是写数据到邮箱,现在是写数据到cat服务器,所以你要自己搭建cat服务器,然后客户端写数据到cat服务器,即你的应用程序里要引入cat客户端.jar。
粒度和技术选型
cat是进程级别的监控,即dubbo调用、执行sql,为什么是进程级别的?因为cat需要埋点,所谓埋点,就是需要入侵业务代码,如果到处都是埋点,业务代码就没法看了。
所以,不是cat不可以方法级别监控,cat也可以方法级别埋点监控,但是如果太多,代码就没办法看了,cat也可以方法级别监控,但是也只是在个别情况下,比如你预计有的地方可能耗时比较久,也可以埋个点。
有的开源中间件是方法级别,比如推特、韩国、国内,方法级别的一般是基于字节码去实现监控功能,无代码入侵。
而且人家界面可视化做的非常好。
这是cat的两大缺点。
即
1.不是真正意义的全链路追踪,因为只是进程级别,而不到方法级别
2.界面也没有那么好看
这两点都非常重要,到方法级别,才可以排查问题,就是哪个方法有问题,耗时久,进程级别,就没有办法排查了,因为中间链路太长了。
还有界面,像这种排查问题的时候,如果用眼睛看,或者纯文字,就是如果不是很显眼的一眼就标出来问题在哪里,是很费劲的。可视化很重要。
组成
查询界面,就是关于各种异常和监控和统计的界面。
管理界面,配置阈值,比如异常次数超过n才报警。配置报警数据写到哪里去,cat客户端会写数据到cat服务器,但是cat服务器会写数据到企业微信。
服务器,cat客户端会写数据到cat服务器。
客户端,应用程序会引入cat客户端.jar。
存储,大数据hadoop,因为监控功能是海量数据,所以必须要使用大数据,当然也可以不用,而只是写在磁盘,如果是特别小的公司。