Gateway服务监控信息不展示问题分析

概述

排查并解决Gateway服务的内存、cpu、线程、GC等指标不展示问题

现象

gateway突然内存不展示

1747712066941.png

排查与解决

最开始由于不展示jvm内存最开始写了一段手动注册监控信息的代码,发现仅仅注册了内存信息,所有跟踪JvmGcMetrics 一路翻代码找到了相关处理类。

package com.xxx.tech.gateway.config;

import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.core.instrument.binder.jvm.JvmMemoryMetrics;
import org.springframework.context.annotation.Configuration;

import javax.annotation.PostConstruct;


/**
 *  如果自动配置未生效,可以手动注册 JVM 指标
 *  (由于自动注册失效)
 * @author marker
 */
@Configuration
public class JvmMetricsConfig {


    private final MeterRegistry meterRegistry;
    public JvmMetricsConfig(MeterRegistry meterRegistry) {
        this.meterRegistry = meterRegistry;
    }


    @PostConstruct
    public void bindJvmMetrics() {
        new JvmMemoryMetrics().bindTo(meterRegistry);
    }
}

代码配置后内存展示,但是没有线程、cpu等指标展示。于是debug跟踪bindTo方法在一个正常服务中的调用情况,最终发现了MeterRegistryPostProcessor。

后续继续排查发现这段代码阻断了BeanPostProcessor 处理器的链路,导致后续的MeterRegistryPostProcessor 无法正常处理bean对象,引发了该问题。

1747711801086.png

SimpleMeterRegistry类会在SimpleMetricsExportAutoConfiguration 自动装配Bean,装配后会进入到MeterRegistryPostProcessor Bean处理器中进行加工处理。

1747711820915.png

bean的处理底层就是将jvm的内存、cpu、线程等指标信息注册到actuator监控

1747711841588.png

当注释@Configuration 后,重启,内存信息重新展示。

 1747711906629.png







来源: 雨林博客(www.yl-blog.com)