通过HttpServer向Prometheus暴露端点

2021-03-01 23:27

阅读:567

标签:ddr   请求   抓取   src   数据   实现   tor   hang   runtime   

因为Prometheus是通过http接口的形式来采集数据的,所以需要向Prometheus server暴露端点。spring boot2.x版本在Actuator中集成了Prometheus,此外也可以手动向其暴露端点。接下来就说第二种。

@Spi
public interface MeterRegistryFactory {
    public MeterRegistry createMeterRegistry();
}

通过spi方式定义接口,方便使用其他时序数据库扩展。通过扩展点来加载Prometheus的实现:

                                                   技术图片

@SpiMeta(name = "promMeterRegistryFactory")
public class PrometheusMeterRegistryFactory implements MeterRegistryFactory {
    private static final PrometheusMeterRegistry prometheusRegistry = new PrometheusMeterRegistry(PrometheusConfig.DEFAULT);

    static {
        try {
            final int port = NumberUtils.toInt(System.getProperty("pepper.port"), 9146);
            //创建一个Http服务
            HttpServer server = HttpServer.create(new InetSocketAddress(port), 0);
            //服务设置一个针对/metrics路径请求的监听,并设置处理器HttpHandler
            server.createContext("/metrics", httpExchange -> {
                //由PrometheusMeterRegistry抓取数据,它会将抓取的数据按Prometheus所需要的格式处理好
                String response = prometheusRegistry.scrape();
                //接下来有httpExchange将数据返回给Prometheus服务器
                httpExchange.sendResponseHeaders(200, response.getBytes().length);
                try (OutputStream os = httpExchange.getResponseBody()) {
                    os.write(response.getBytes());
                }
            });
            //开启一个线程来处理Prometheus服务器抓取数据的请求
            new Thread(server::start).start();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    @Override
    public MeterRegistry createMeterRegistry() {
        return prometheusRegistry;
    }
}

 micrometer官网:https://micrometer.io/docs/registry/prometheus

此外,再次安利一下同事开源的轻量级metrics收集框架:https://github.com/zrbcool/pepper-metrics

通过HttpServer向Prometheus暴露端点

标签:ddr   请求   抓取   src   数据   实现   tor   hang   runtime   

原文地址:https://www.cnblogs.com/jing-yi/p/14382302.html


评论


亲,登录后才可以留言!