springboot 2.X内置Prometheus支持

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

引入

        <!-- prometheus -->
        <!-- Hotspot JVM metrics-->
        <dependency>
            <groupId>io.prometheus</groupId>
            <artifactId>simpleclient_hotspot</artifactId>
            <version>0.9.0</version>
        </dependency>
        <!-- Exposition servlet -->
        <dependency>
            <groupId>io.prometheus</groupId>
            <artifactId>simpleclient_servlet</artifactId>
            <version>0.9.0</version>
        </dependency>

代码示例

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

@Configuration
public class MonitoringConfig {
    /**
     * 注册新的servlet
     *
     * @return servletBean
     */
    @Bean
    ServletRegistrationBean<MetricsServlet> 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<MetricFamilySamples> sampleFamilies) {
        sampleFamilies.add(new CounterMetricFamily(
                "user_register_count",
                "The count of user that are register",
                UserMonitor.registerNum()));
    }
 
    @Override
    public List<MetricFamilySamples> collect() {
        List<MetricFamilySamples> mfs = new ArrayList<>();
        addUserMetrics(mfs);
        return mfs;
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值