美团Cat监控集成Hystrix线程池链路分析

深入详解美团点评CAT跨语言服务监控(一) CAT简介与部署 下一篇: CAT跨语言服务链监控(二) CAT服务端初始化 前言: CAT是一个实时和接近全量的监控系统,它侧重于对Java应用的监控,除了与点评RPC组件融合的很好之外,他将会能与Spring、MyBatis、Dubbo 等框架以及Log4j 等结合,支持PHP、C++、Go等多语言应用,基本接入了美团点评上海侧所有核心应用。目前在中间件(MVC、RPC、数据库、缓存等)框架中得到... 阅读详情

目录

      一、背景

      二、集成Hystrix线程池

      三、福尔摩斯监控冲突

      四、透传Cat线程本地Context


一、背景

CAT(Central Application Tracking)是一个实时和接近全量的监控系统,它侧重于对Java应用的监控,在中间件(MVC、RPC、数据库、缓存等)框架中得到广泛应用,为业务线提供系统的性能指标、健康状况、监控告警等。

CAT整体主要分为三个模块:CAT-client、CAT-consumer、CAT-home。

  • Cat-client 提供给业务以及中间层埋点的底层SDK。

  • Cat-consumer 用于实时分析从客户端提供的数据。

  • Cat-home 作为用户给用户提供展示的控制端。

在实际开发和部署中,Cat-consumer和Cat-home是部署在一个JVM内部,每个CAT服务端都可以作为consumer也可以作为home,这样既能减少整个层级结构,也可以增加系统稳定性。

Cat除了全面、实时的监控,还有一个比较重要的功能就是能够提供一个类似全链路监控的功能(并非完全意义上的全链路监控),如下所示:

链路监控的重要性不言而喻,他可以帮助我们遇到问题时快速的定位问题,也能帮助我们找到系统的优化点。

在未集成Hystrix线程池的时候一切都是没有问题的,但是使用了Hystrix线程池之后, Cat的链路就断了。

只有一个最终调用的结果耗时,这绝对不是我们想要的。

所以基于这个起因,本文就来介绍Cat在集成Hystrix线程池实现链路监控上的一些的尝试。

二、集成Hystrix线程池

首先,我们从Hystrix上的一些扩展说起,因为,Hystrix集成Cat监控实现链路监控必然要涉及到从Hystrix上的扩展作为切入点进行实现我们自定义的业务逻辑。

而这里所说的Hystrix扩展其实就是Hystrix并发策略的扩展,如下我列出了一个扩展Hystrix并发策略的例子。

public class KapiHystrixConcurrencyStrategy extends HystrixConcurrencyStrategy {

    private HystrixConcurrencyStrategy delegate;

    public RequestAttributeHystrixConcurrencyStrategy() {
        try {
            this.delegate = HystrixPlugins.getInstance().getConcurrencyStrategy();
            if (this.delegate instanceof RequestAttributeHystrixConcurrencyStrategy) {
                return;
            }
            HystrixCommandExecutionHook commandExecutionHook = HystrixPlugins.getInstance().getCommandExecutionHook();
            HystrixEventNotifier eventNotifier = HystrixPlugins.getInstance().getEventNotifier();
            HystrixMetricsPublisher metricsPublisher = HystrixPlugins.getInstance().getMetricsPublisher();
            HystrixPropertiesStrategy propertiesStrategy = HystrixPlugins.getInstance().getPropertiesStrategy();
            this.logCurrentStateOfHystrixPlugins(eventNotifier, metricsPublisher, propertiesStrategy);
            HystrixPlugins.reset();
            //注册新的并发策略
            HystrixPlugins.getInstance().registerCommandExecutionHook(commandExecutionHook);
            HystrixPlugins.getInstance().registerEventNotifier(eventNotifier);
            HystrixPlugins.getInstance().registerMetricsPublisher(metricsPublisher);
            HystrixPlugins.getInstance().registerPropertiesStrategy(propertiesStrategy);
            HystrixPlugins.getInstance().registerConcurrencyStrategy(this);
        } catch (Exception e) {
            LoggerUtil.logger().error("构建hystrix并发策略异常:", e);
        }
    }

    private void logCurrentStateOfHystrixPlugins(HystrixEventNotifier eventNotifier, HystrixMetricsPublisher metricsPublisher, HystrixPropertiesStrategy propertiesStrategy) {
    }

    public ThreadPoolExecutor getThreadPool(HystrixThreadPoolKey threadPoolKey, HystrixProperty<Integer> corePoolSize, HystrixProperty<Integer> maximumPoolSize, HystrixProperty<Integer> keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue) {
        return this.delegate.getThreadPool(threadPoolKey, corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue);
    }

    public ThreadPoolExecutor getThreadPool(HystrixThreadPoolKey threadPoolKey, HystrixThreadPoolProperties threadPoolProperties) {
        return this.delegate.getThreadPool(threadPoolKey, threadPoolProperties);
    }

    public BlockingQueue<Runnable> getBlockingQueue(int maxQueueSize) {
        return this.delegate.getBlockingQueue(maxQueueSize);
    }

    public <T> HystrixRequestVariable<T> getRequestVariable(HystrixRequestVariableLifecycle<T> rv) {
        return this.delegate.getRequestVariable(rv);
    }

    public <T> WrappedCallable<T> wrapCallable(Callable<T> callable) {
       return this.delegate.wrapCallable(callable);
    }
}

在这个Hystrix扩展当中,我们通过重写抽象类HystrixConcurrencyStrategy一系列方法可以实现我们需要的逻辑功能,在这个方法当中,有一个方法wrapCallable(Callable<T> callable)正是对Hystrix线程池执行任务的时候线程的包装,这也正是我们透传线程上下文需要找到的切入点。

三、福尔摩斯监控冲突

为了验证我的这个猜想,我在接入的过长当中,首先在wrapCallable(Callable<T> callable)打了个断点,试图程序在运行期能够进入到我的断点,但是却发现,使用postman进行接口测试的时候,断点并没有执行到wrapCallable(Callable<T> callable)断点处,这令我非常不解,难道猜想是错的,

我并没有立刻对我的猜想产生怀疑,而是又做了如下猜想:

Hystrix线程池执行线程之所以没有走这个对线程进行包装的地方,难道是有其他实现也重写了这个方法进行覆盖掉了?

于是,我找到抽象类HystrixConcurrencyStrategy的wrapCallable(Callable<T> callable)处,查看该方法被哪些实现类实现了,果不其然,有一个实现类是我们引入的三方包福尔摩斯进行监控上报接口调用情况的类也重写了抽象类HystrixConcurrencyStrategy的wrapCallable(Callable<T> callable)方法。

此刻,我需要重新进行以下验证,是不是程序运行的时候真的执行到了这个三方包的实现类,当我重新在这个三方包实现类打断点时,确实是执行了这个wrapCallable(Callable<T> callable)方法,而这个实现类里面的HystrixConcurrencyStrategy delegate变量就是我自己的抽象类HystrixConcurrencyStrategy的实现类。也就是说在我的实现类之上进行了一次包装,把我的实现方法给覆盖掉了。

四、透传Cat线程本地Context

找到问题之后,我将两者进行了合并兼容。

到这里,我们只是找到了Cat集成Hystrix线程池实现链路的切入点,然后下面就需要分析查看线程上下文之间传什么?怎么进行传?

这点非常关键,也是实现链路监控的核心。

从我们项目的业务逻辑来看,从Controller进来的请求,调用下游接口我们统一使用的都是spring的resttemplate进行调用的,在使用resttemplate进行调用的时候,我们已经添加了Cat埋点监控,那么其实也就是需要搞清楚在使用resttemplate进行调用的时候他的线程上下文使用到的是什么东西保证进行的该请求的信息上报的。

于是,我看了resttemplate接入Cat埋点的地方。

public static <T> T newTransaction(Callable<T> function, String type, String name, Map<String, Object> data) throws Exception {
        Transaction transaction = Cat.newTransaction(type, name);
        if (data != null && !data.isEmpty()) {
            data.forEach(transaction::addData);
        }
        try {
            T result = function.call();
            transaction.setStatus(Message.SUCCESS);
            return result;
        } catch (Exception e) {
            Cat.logError(e);
            if (e.getMessage() != null) {
                Cat.logEvent(type + "_Error", name + e.getMessage());
            }
            transaction.setStatus(e);
            throw e;
        } finally {
            transaction.complete();
        }
    }

也就是上面Cat.newTransaction(type, name)之处。

继续看Cat.newTransaction(type, name)源码。

public static Transaction newTransaction(String type, String name) {
        if (isEnabled()) {
            try {
                return getProducer().newTransaction(type, name);
            } catch (Exception var3) {
                errorHandler(var3);
                return NullMessage.TRANSACTION;
            }
        } else {
            return NullMessage.TRANSACTION;
        }
    }
    
 public Transaction newTransaction(String type, String name) {
        if (!this.manager.hasContext()) {
            this.manager.setup();
        }

        DefaultTransaction transaction = new DefaultTransaction(type, name, this.manager);
        this.manager.start(transaction, false);
        return transaction;
  }

直到进入到DefaultMessageProducer的newTransaction(String type, String name)方法。

在这里可以看到,判断manager(DefaultMessageManager)的hasContext()这个方法是否为空,如果为空,就调用setup()方法。

进入hasContext()这个方法。

 private ThreadLocal<DefaultMessageManager.Context> context = new ThreadLocal();
 
 public boolean hasContext() {
        DefaultMessageManager.Context context = (DefaultMessageManager.Context)this.context.get();
        return context != null;
}

可以看到就是在DefaultMessageManager这个类中的ThreadLocal<DefaultMessageManager.Context> context中获取当前线程的私有线程副本变量。

我们回来再看setup()方法。

setup()方法的实现同样是在DefaultMessageManager这个类中。

public void setup() {
        DefaultMessageManager.Context ctx = new DefaultMessageManager.Context(this.domain, this.hostName, this.ip);
        double samplingRate = this.configService.getSamplingRate();
        if (samplingRate < 1.0D && this.hitSample(samplingRate)) {
            ctx.tree.setHitSample(true);
        }
        this.context.set(ctx);
    }

核心逻辑就是创建一个DefaultMessageManager.Context ctx ,然后调用context.set()方法,这个context.set()方法其实就是上面ThreadLocal的set()方法,进行线程绑定。

看到这里就明白了,原来是resttemplate进行调用的时候,在newTransaction(String type, String name)的时候,通过ThreadLocal获取当前线程绑定的对象Context,如果有的话, 才进行后续信息采集,如果没有就新创建一个Context了。

所以,我们在进行线程上下文传递的时候,需要传递的正是这个Context。

 然后我们再回到Hystrix扩展点,包装线程的地方,也就是在这里需要把这个Context从主线程传递到子线程中去。

传递的前提有两步:

①、我们获取到这个Context

②、我们通过一定的方法将Context设置到子线程的本地变量中

首先, 获取这个Context并不麻烦,DefaultMessageManager直接提供了getContext()方法,但是第二部分,进行设置到子线程的时候却发现了问题,在DefaultMessageManager这个类中,并没有提供setContext()方法,或者其他可以往线程本地变量赋值的api,而Context的传递还必须使用这个DefaultMessageManager类中的instance。不能使用其他的DefaultMessageManager实例或者ThreadLocal。

public class DefaultMessageManager implements MessageManager {
    ...... 
    private ThreadLocal<DefaultMessageManager.Context> context = new ThreadLocal();
    private static MessageManager INSTANCE = new DefaultMessageManager();
}

而且,我在DefaultMessageManager的接口处也发现了这么一句话。

/**
 * Message manager to help build CAT message.
 * <p>
 * <p>
 * Notes: This method is reserved for internal usage only. Application developer should never call this method directly.
 */
public interface MessageManager {

}

看这个注释,翻译成中文就是此方法仅供内部使用。应用程序开发人员不应该直接调用此方法。

这就emoji了,人家不建议外部使用,也就是说人家不让你扩展自己的业务逻辑。

但是,既然DefaultMessageManager实例是通过这个类中的全局static实例进行使用的,也就是说我们可以获取到这个实例,既然我们能获取到这个实例,那么我们就可以通过反射获取这个实例中的任何字段和方法。

有了这个思路,于是我企图通过反射获取DefaultMessageManager实例中的ThreadLocal,这样不就能给子线程赋值主线程的Context了吗。

于是,使用反射给子线程透传Context这段代码是这样的。

完了之后,进行测试,确实是可以实现的,子线程获取到了Context,从而整个链路就串起来了。

以上是个人的亲身经历及总结经验,个人之见,难免考虑不全,如果大家有更好的建议欢迎大家私信留言。

如果觉得对你有一点点帮助,希望能够动动小手,你的点赞是对我最大的鼓励支持。

更多分享请移步至个人公众号,谢谢支持😜😜......

公众号:wenyixicodedog  

cat搭建部署详细步骤(美团开源cat监控) cat简介: CAT是基于Java开发的实时分布式应用监控平台,主要体现在监控报表Transaction、event、problem、heartbeat等,cat系统定制的监控模型以及定制的实时分析报表也是cat系统核心优势。这里强调了CAT相比于其他系统的二开优势。 logview是cat原始的log采集方式,cat的logview使用的技术是threadlocal,将一个thread里面的打点聚合上报,有一点弱化版本的链路功能,但是cat并不是一个标准的全链路系统,全链路系统参考dapper的论文, 阅读详情

相关推荐

CAT实时应用监控平台链路监控简介与原理,搭建配置与使用,Spring和Nacos集成代码

CAT 是基于 Java 开发的实时应用监控平台,为美团点评提供了全面的实时监控告警服务。CAT 作为服务端项目基础组件,提供了 Java, C/C++, Node.js, Python, Go 等多语言客户端,已经在美团点评的基础架构中间件框架(MVC框架,RPC框架,数据库框架,缓存框架等,消息队列,配置系统等)深度集成,为美团点评各业务线提供系统丰富的性能指标、健康状况、实时告警等。

怀揣梦想,一颗执着于技术的心从未磨灭,内心住着一颗顽强的小强时刻提醒自己层层突破自我,同时也成就他人 2295

一、美团大众点评CAT监控系列文章---CAT简介以及和springboot的集成

springboot项目集成大众点评cat,这是一个系列的文章。

ratel的博客 1万+

ESXI添加硬盘时提示 无法创建 VMFS 数据存储 - 无法更改主机配置

ESXI添加硬盘时提示 无法创建 VMFS 数据存储 - 无法更改主机配置1.打开ESXI的SSH2.找到不能添加的硬盘路径3.用SSH操作 1.打开ESXI的SSH 2.找到不能添加的硬盘路径 我的是第一个,找到你要添加但是不能添加的那个硬盘,点进去。 完整的路劲为:1/2 比如我的: /vmfs/devices/disks/t10.ATA_____ST500LT0122D1DG142___________________________________S3PHRNHQ (比较长哈!) 3.用SSH

AI_DOG的博客 2万+

美团链路追踪cat集成遇到的坑

集成美团链路追踪cat遇到的一些问题汇总

h_and_g的博客 1192

SMPTE ST 2110 概论(三)

SMPTE ST 2110 概论(三)ST 2110-30:未压缩的PCM音频流ST 2110-31:非PCM音频传输ST 2110-40:辅助数据传输结语 ST 2110-30:未压缩的PCM音频流 鉴于音频系统是广播系统中最复杂,也是最重要的一套系统,我们先来回顾一下广电音频系统的历史。 最老式的音频都是基于模拟信号的,具有有限的动态范围,并且用连续的电压变化来描述音频。再后来就基于数字信号(...

Cidd0422的博客 1万+

SAP HR模块配置假期日历和缺勤类型

SAP的HR模块。业务顾问在实施时一般会配置未来10年的假期日历,到期后再进行配置。同时,增加请假类型(缺勤信息类型)。记录这一过程。

福来阁86号技师的妖孽日常 5523

美团cat服务日志监控系统搭建以及项目接入

一般我们系统的项目日志采用logback进系统的日志输出,通过在logback里面配置好相关的输出路径和日志等级进行日志的保存和分类,但是在维护的过程中,一但项目报错就需要我们登录都到虚拟机上面进入到日志的路径里面进行日志查看,非常的不方便(主要是比较繁琐)。通过配置cat系统,我们可以很方面的进行日志的查询,问题的定位以及设置告警,只需要登录url即可看到我们项目的所有运行情况,功能非常强大。

fanxuefeihong的博客 1855

LabVIEW面向对象编程:操作者框架入门实战

本文是LabVIEW面向对象编程中操作者框架的入门实战指南。针对传统“面条式代码”在复杂项目中的维护难题,文章通过创建操作者、定义消息与处理函数、在主VI中调用等步骤,详细演示了如何利用操作者框架构建模块化、易扩展的应用程序架构,有效管理并行任务。

f0g1h2的博客 589

美团cat监控在hystrix线程池模式解决多线程切换问题

解决方案 1> extrends HystrixConcurrencyStrategy 自定义Runable = com.alibaba.ttl.TtlRunnable.get(command) 2> 修改cat-client客户端源码,修改threadLocal变量为 com.alibaba.ttl.TransmittableThreadLocal 经过验证,此方式可行,多线程切换没有出现数据混乱问题 ...

ggjess的专栏 621

从零到一:手把手教你用DJI E-Port套件为M350 RTK开发第三方负载(PSDK V3实战)

本文详细介绍了如何使用DJI E-Port套件为M350 RTK开发第三方负载,涵盖硬件配置、开发环境搭建及实战应用。通过PSDK V3开发套件,开发者可以高效实现负载与无人机的通信,适用于电力巡检等工业场景,提升开发效率与系统稳定性。

weixin_26841743的博客 701

四款办公Agent实测对比:WorkBuddy、千问办公、库库AI、豆包工作怎么选

AI Agent是一种能感知环境、自主决策并执行动作的智能系统,其核心在于工具调用、状态管理与错误恢复构成的执行闭环。在办公场景中,任务边界清晰、容错率高、重复性强,使Agent成为最容易落地的方向。通过调用本地文件、脚本或办公套件,Agent能自动完成文件批量处理、文档摘要、会议纪要等重复劳动,显著提升工作效率。目前WorkBuddy、千问办公、库库AI、豆包工作等产品分别从本地操作、办公套件嵌入、知识处理、轻量助手等路线切入,用户可根据自身场景选择。

weixin_29052717的博客 519

美团CAT服务端搭建

1. 前言 简介: CAT 是基于 Java 开发的实时应用监控平台,为美团点评提供了全面的实时监控告警服务。 CAT 作为服务端项目基础组件,提供了 Java, C/C++, Node.js, Python, Go 等多语言客户端,已经在美团点评的基础架构中间件框架(MVC框架,RPC框架,数据库框架,缓存框架等,消息队列,配置系统等)深度集成,为美团点评各业务线提供系统丰富的性能...

留一手的博客 3169

【LAMMPS学习】五、LAMMPS命令(1) LAMMPS 输入脚本

本部分描述了 LAMMPS 输入脚本的格式以及其中的命令如何用于定义 LAMMPS 模拟。主要包括以下内容。

荷塘阅色 2644

探索Cat:美团点评开源的实时监控系统

Cat是美团点评内部广泛使用的分布式应用性能监控系统,现在也已经开源,让你可以轻松地为自己的应用添加强大的监控能力。如果你需要了解你的服务在生产环境中的运行状况、性能瓶颈,或者需要快速定位故障,那么Cat可能是你的理想选择。 ## 项目简介 是一款基于Java开发的服务端监控系统,它提供了丰富的监控数据,包括但不限于服务调用链路、健康检查、消息队列监控、数据库监控等。它的核心目标是帮助开发者

gitblog_00053的博客 971

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

美团监控系统mysql_美团开源监控Cat安装与使用

序——之前一直在美团内部使用cat,十分便捷,这次单位内部要使用,拿来研究一番。其实Cat在GitHub上的部署文档已经比较详细了服务端篇一、准备环境tomcatmysqljdk8美团cat源码包 cat源码二、开整步骤1: 服务器创建目录mkdir /datachmod -R 777 /data/mkdir -p /data/appdatas/cat/步骤2: 服务器创建文件cd /data/a...

weixin_33645583的博客 1134

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

来自美团生产环境的实战派:开源CAT监控,如何保障超大规模分布式系统可观测性?

CAT是美团开源的分布式实时监控系统,具有秒级处理能力、全量数据采集和多语言支持等核心特性。系统采用分层架构设计,包含客户端SDK、消息队列、分析器和存储模块,通过异步传输和内存聚合实现高吞吐处理。技术亮点包括客户端预计算、分层存储策略和统一消息协议,解决了传统监控系统延迟高、数据不完整等问题。CAT适用于大规模微服务监控场景,能显著降低故障恢复时间,预估可为中型企业带来年化百万级收益。项目采用Apache 2.0协议,GitHub星标超1.8万,社区活跃。

zgkd123456789的博客 1335

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

美团点评CAT系统

美团点评CAT系统

sunshine_YG的专栏 730

熬夜之作:一文带你了解Cat分布式监控

如果需要使用 Spring Data Redis 的话,直接集成 kitty-spring-cloud-starter-redis 就可以,kitty-spring-cloud-starter-redis 中对 Redis 的命令进行了埋点,可以在 Cat 上直观的查看对应的命令和消耗的时间。CAT 很大的优势是它是一个实时系统,CAT 大部分系统是分钟级统计,但是从数据生成到服务端处理结束是秒级别,秒级定义是 48 分钟 40 秒,基本上看到 48 分钟 38 秒数据,整体报表的统计粒度是分钟级;

程序员高级码农的博客 2586

保姆级cat系统搭建过程

试了其他的文档和官方文档,依然有些头晕,于是自己写了一篇文章,记录自己的搭建过程。这是一次失败的搭建,按照其他文档跟官网文档,并没有搭建起来一个可用的,这官网文档质量跟代码的优秀不匹配啊感觉(打死不承认技术菜)...

sunican的专栏 1788

Cat安装与使用(美团开源监控)

1、在GitHub的镜像网站下载源码 下载地址:https://hub.fastgit.org/dianping/cat 下载master分支版本代码 2、服务端安装 准备环境: tomcat mysql jdk11 美团cat源码包 使用maven构建安装包 使用命令行工具进入cat源码目录并执行以下命令: mvn install -Dmaven.test.skip=true [ERROR] Failed to execute goal on projec...

nikeylee的博客 7951

美团CAT服务端安装部署(单机版)

记录美团点评CAT监控平台单机版的编译、安装、部署,搭建平台为win7,其他平台也是相同的做法。

CrazyPig的技术博客 1万+

Catat-监控平台

1、什么是CAT CAT是一款由美团开源、用java开发的实时监控平台,提供比较全面的可视化页面,可以很直观的掌控当前系统的性能指标、健康状况、实时报告,同时客户端支持多种语言(Java C C++ Python Go等)。 2、能做什么? 2.1:快速定位异常,减少故障排除时间(以接口为单位进行监控),省去了提取、分析日志的工作。 2.2:各个服务运行情况、服务器使用情况集中管理,提升了分布式网状调用链路故障排除的效率。 ...

奔跑的蜗牛 898

CAT分布式监控系统(一):CAT功能介绍 CAT监控系统是什么、能做什么?

CAT分布式监控系统(一):CAT监控系统功能介绍 本文概要: 1、CAT监控系统是什么。 2、CAT监控系统能做什么,能监控些什么。 下面有些截图是CAT 2.0版本的,但和3.0版本没什么区别的。 一、简介 CAT(Central Application Tracki...

tjiyu的博客 4万+

三、美团大众点评CAT监控系列文章---Springboot集成CAT并实现邮件告警

三、美团大众点评CAT监控系列文章---Springboot集成CAT并实现邮件告警

ratel的博客 6047

CAT监控工具

Exception: 异常告警,cat大盘有飘红/飘黄,不关注可到cat中忽略指定异常。- BaselineAlert: 基线告警,URL,SQL等性能波动较大。- Transaction: Transacation告警,自定义告警。- Heartbeat: 心跳告警,gc频繁,线程block等。- Event: Event告警,自定义告警。

qq_35572013的博客 479
上一篇: Tomcat线程池监控及线程池原理分析
下一篇: nacos配置中心动态刷新原理分析【客户端】
wenyixicodedog
博客等级 码龄8年 87粉丝 116原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值