本文概要:
1、CAT监控系统是什么。
2、CAT监控系统能做什么,能监控些什么。
下面有些截图是CAT 2.0版本的,但和3.0版本没什么区别的。
一、 简介

CAT(Central Application Tracking)是美团开源的基于Java开发的实时分布式应用监控平台,提供了全面的监控服务和业务决策支持。
本文概要:
1、CAT监控系统是什么。
2、CAT监控系统能做什么,能监控些什么。
下面有些截图是CAT 2.0版本的,但和3.0版本没什么区别的。
CAT(Central Application Tracking)是美团开源的基于Java开发的实时分布式应用监控平台,提供了全面的监控服务和业务决策支持。
在理解什么是埋点之前,首先需要了解一些基础知识:(以下摘自:http://www.chinawebanalytics.cn/auto-event-tracking-good-bad-ugly/)
我们能够监测网站上用户的行为,或者app上用户的行为,都需要在网站的每一页或者app中加上一些程序代码(基础代码)。
CAT(Central Application Tracking)是一个实时和接近全量的监控系统,它侧重于对Java应用的监控,基本接入了美团上海侧所有核心应用。
目前在中间件(MVC、RPC、数据库、缓存等)框架中得到广泛应用,为美团各业务线提供系统的性能指标、健康状况、监控告警等。
自2014年开源以来,Github 收获 7700+ Star,2800+ Forks,被 100+ 公司企业使用,其中不乏携程、陆金所、猎聘网、平安等业内知 名公司。
在每年全球 QCon 大会、全球架构与运维技术峰会等都有持续的技术输出,受到行业内认可,越来越多的企业伙伴加入了 CAT 的开 源建设工作,为 CAT 的成⻓贡献了巨大的力量。
https://github.com/dianping/cat/wiki/readme_server 官方文档中很详细,我们实际操作一下。
为了简单,这里采用 docker 部署的方式。
然后你需要在你的项目中创建 src/main/resources/META-INF/app.properties 文件, 并添加如下内容:
app.name={appkey}
CAT(Central Application Tracking),是基于 Java 开发的分布式实时监控系统。
CAT 目前在美团点评的产品定位是应用层的统一监控组件,在中间件(RPC、数据库、缓存、MQ 等)框架中得到广泛应用,为各业务线提供系统的性能指标、健康状况、实时告警等。
CAT 目前在美团点评已经基本覆盖全部业务线,每天处理的消息总量 3200 亿+,存储消息量近 400TB,在通信、计算、存储方面都遇到了很大的挑战。
感兴趣的朋友欢迎 Star 开源项目 https://github.com/dianping/cat。
spring 的功能非常强大,如何通过 spring 扫描指定包呢?
比如我们想获取指定包下的所有枚举。
package com.github.houbb.spring.tool.utils;
import com.github.houbb.heaven.util.lang.StringUtil;
import com.github.houbb.spring.tool.exception.SpringToolException;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.core.type.classreading.CachingMetadataReaderFactory;
import org.springframework.core.type.classreading.MetadataReader;
import org.springframework.core.type.classreading.MetadataReaderFactory;
import org.springframework.util.ClassUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* spring 包工具类
*
* @since 1.0.0
*/
public class SpringPackageUtil {
/**
* 扫描
* @param basePackages 基础包信息
* @param resourcePattern 资源正则
*/
public static List scanClassName(String basePackages, String resourcePattern) {
try {
List classNameList = new ArrayList<>();
if(StringUtil.isEmpty(basePackages)
|| StringUtil.isEmpty(resourcePattern)) {
return classNameList;
}
final ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();
// 根据classname生成class对应的资源路径,需要扫描的包路径
//ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX +
String pattern = ClassUtils.convertClassNameToResourcePath(basePackages) + resourcePattern;
// 获取classname的IO流资源
Resource[] resources = resourcePatternResolver.getResources(pattern);
// MetadataReaderFactory接口 ,MetadataReader的工厂接口。允许缓存每个MetadataReader的元数据集
MetadataReaderFactory readerFactory = new CachingMetadataReaderFactory(resourcePatternResolver);
for (Resource resource : resources) {
if (resource.isReadable()) {
// 通过class资源(resource)生成MetadataReader
MetadataReader metadataReader = readerFactory.getMetadataReader(resource);
// 获取class名
String className = metadataReader.getClassMetadata().getClassName();
classNameList.add(className);
}
}
return classNameList;
} catch (Exception e) {
throw new SpringToolException(e);
}
}
/**
* 扫描
* @param basePackages 基础包信息
* @param resourcePattern 资源正则
*/
public static List scanClass(String basePackages, String resourcePattern) {
List nameList = scanClassName(basePackages, resourcePattern);
return nameList.stream().map((Function) s -> {
try {
return Class.forName(s);
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
}).collect(Collectors.toList());
}
}
FrontJS 提供准确、实时、完整的程序错误、资源加载、网络请求信息及网站性能监测报告,帮助开发者快速追踪网站故障,及时修复问题,维护网站质量,指导改善用户体验。
如果只是简单使用这个工具,实际上个人的技术收获是比较少的。
从侧面可以看出,监控是可以做到这么简单的。
前端的监控也是非常强的一种需求,值得我们学习这种模式。
随着业务越来越复杂,企业应用也进入了分布式服务化的阶段,传统的日志监控等方式无法很好达到跟踪调用,排查问题等需求。
在谷歌论文《Dapper,大规模分布式系统的跟踪系统》的指导下,许多优秀的APM应运而生。
分布式追踪系统发展很快,种类繁多,给我们带来很大的方便。
但在数据采集过程中,有时需要侵入用户代码,并且不同系统的 API 并不兼容,这就导致了如果您希望切换追踪系统,往往会带来较大改动。
OpenTracing 为了解决不同的分布式追踪系统 API 不兼容的问题,诞生了 OpenTracing 规范。
SkyWalking是一个开源的分布式系统性能监控和诊断解决方案,旨在帮助用户监控和优化分布式应用程序的性能。
它可以追踪分布式系统中的各个组件和服务,提供全面的性能指标、调用链追踪和故障排查功能。
主要特性和组件:
高度可扩展:SkyWalking的架构设计允许水平扩展,可以处理大规模的分布式系统。它支持多种存储后端,如Elasticsearch、MySQL、TiDB等,以满足不同规模和需求的应用。
跨语言支持:SkyWalking提供对多种编程语言的支持,包括Java、.NET、Node.js、Python、Go、PHP等,这使得它适用于多语言的分布式应用程序。
分布式追踪:SkyWalking通过跟踪请求在不同组件之间的传递,形成完整的调用链,从而可以查看请求在分布式系统中的执行路径,帮助发现性能瓶颈和故障原因。
实时监控和报警:SkyWalking提供实时的性能指标监控,包括请求处理时间、错误率、吞吐量等。用户可以设置报警规则,及时发现和处理异常情况。
可视化界面:SkyWalking提供直观的Web界面,用于展示监控数据、调用链追踪和性能指标图表,帮助用户更好地理解和优化应用程序性能。
插件生态系统:SkyWalking提供了丰富的插件,可以扩展其功能,比如支持不同的存储后端、支持特定的中间件、集成告警系统等。