prometheus 监控 springboot 2.X 应用

前言

使io.prometheus.simpleclient系列0.9.0包完成对java应用的监控,但由于该版本simpleclient_spring_boot使用的spring-boot1.5.4,并引用了其中的org.springframework.boot.actuate.endpoint包,该包在2.X版本中被大改,所以在springboot2.X应用中不适用。

prometheus下载安装

https://prometheus.io/docs/prometheus/latest/getting_started/ 官方文档

https://www.cnblogs.com/chenqionghe/p/10494868.html  翻译后的入门博客

https://github.com/prometheus/client_java    simpleclient github地址

引入

        
        
        
            io.prometheus
            simpleclient_hotspot
            0.9.0
        
        
        
            io.prometheus
            simpleclient_servlet
            0.9.0
        

代码示例

启动该client中包含默认的jvm监控,并注册Servlet即可成功接入,“/metrics”是默认路由,可改为其他并在promecheus.yml中添加相应配置即可。

@Configuration
public class MonitoringConfig {
    /**
     * 注册新的servlet
     *
     * @return servletBean
     */
    @Bean
    ServletRegistrationBean servletRegistrationBean() {
        //打开prometheus JVM所有监控参数
        DefaultExports.initialize();
        //自定义的export
        new UserExports().register(CollectorRegistry.defaultRegistry);
        MetricsServlet metricsServlet = new MetricsServlet();
        return new ServletRegistrationBean<>(metricsServlet, "/metrics");
    }
}

initialize()方法源码,即在一个final的对象内添加exports,这样即可让MetricsServlet读取。

/**
   * Register the default Hotspot collectors with the default
   * registry. It is safe to call this method multiple times, as
   * this will only register the collectors once.
   */
  public static synchronized void initialize() {
    if (!initialized) {
      register(CollectorRegistry.defaultRegistry);
      initialized = true;
    }
  }

  /**
   * Register the default Hotspot collectors with the given registry.
   */
  public static void register(CollectorRegistry registry) {
    new StandardExports().register(registry);
    new MemoryPoolsExports().register(registry);
    new MemoryAllocationExports().register(registry);
    new BufferPoolsExports().register(registry);
    new GarbageCollectorExports().register(registry);
    new ThreadExports().register(registry);
    new ClassLoadingExports().register(registry);
    new VersionInfoExports().register(registry);
  }

由此可以写自定义的exports,并注册即可添加自定义监控指标

public class UserExports extends Collector {

    private void addUserMetrics(List sampleFamilies) {
        sampleFamilies.add(new CounterMetricFamily(
                "user_register_count",
                "The count of user that are register",
                UserMonitor.registerNum()));
    }

    @Override
    public List collect() {
        List mfs = new ArrayList<>();
        addUserMetrics(mfs);
        return mfs;
    }
}

 

你可能感兴趣的:(java)