首页 > 解决方案 > 如何通过默认端点 /metrics 覆盖 prometheus

问题描述

我正在尝试使用 prometheus httpserver (io.prometheus.client.exporter.HTTPServer) 公开指标,我在给定的依赖项下使用它。

 <dependency>
  <groupId>io.prometheus</groupId>
  <artifactId>simpleclient_httpserver</artifactId>
  <version>0.2.0</version>
</dependency>

Prometheus httpserver 默认公开“/metrics”端点中的所有指标,我想覆盖它并限制它仅公开任何特定端点的指标(如“/prometheusMetrics”)。使用下面的代码,我运行 prometheus httpserver 并公开指标。

@ServiceBean(singleton = true)
public class PrometheusCustomHTTPServer {

private static Logger s_logger = LoggerFactory.getLogger(PrometheusCustomHTTPServer.class);

private HTTPServer httpServer;
 private static CollectorRegistry registry = CollectorRegistry.defaultRegistry;
 private static boolean initailized = false;


@PostConstruct
public void start() {
    if(httpServer == null) {
        String hostAddress;
        try {
            int port = 9090;
            httpServer = new HTTPServer(port,true); 
            s_logger.error("started prometheus at http://"+port);
        } catch (IOException e) {
            System.out.println("Exception occured while starting of prometheus server" + e);
        }
        initialize(registry);
    }
}

private static  synchronized void initialize(CollectorRegistry registryToUse) {
    if(!initailized) {
         new StandardExports().register(registry);
         new MemoryPoolsExports().register(registry); 
          new GarbageCollectorExports().register(registry);
          new ThreadExports().register(registry);
          new ClassLoadingExports().register(registry); 
         System.out.println("StandardExports initialized");
         initailized = true;
    }
}

}

标签: javaservletsprometheushttpserver

解决方案


您正在更改客户端配置,但这还不够。您还应该更新 Prometheus“服务器端”配置的抓取端点。

看看Prometheus 配置

默认情况下分配给已抓取指标的作业名称。工作名称:<工作名称>

# 从这项工作中抓取目标的频率。[scrape_interval:| 默认 = <global_config.scrape_interval> ]

抓取此作业时的每次抓取超时。[刮超时:| 默认 = <global_config.scrape_timeout> ]

# 从目标获取指标的 HTTP 资源路径。 [指标路径:| 默认 = /指标]


推荐阅读