【发布时间】:2019-10-24 10:29:36
【问题描述】:
我在配置 PrometheusMeterRegistry 以从 Geode 集群获取指标时遇到问题。 配置完端点后,如果我运行 curl 命令检查配置的端点上的指标是否可用,http 请求处理程序会卡在抓取功能:
public void start(MetricsSession session) {
this.session = session;
registry = new PrometheusMeterRegistry(PrometheusConfig.DEFAULT);
this.session.addSubregistry(registry);
InetSocketAddress address = new InetSocketAddress(9000);
httpServer = null;
try {
httpServer = HttpServer.create(address, 0);
} catch (IOException e) {
e.printStackTrace();
}
HttpContext context = httpServer.createContext("/metrics");
context.setHandler(this::requestHandler);
httpServer.start();
}
private void requestHandler(HttpExchange httpExchange) throws IOException {
final byte[] scrapeBytes = registry.scrape().getBytes();
httpExchange.sendResponseHeaders(200, scrapeBytes.length);
final OutputStream responseBody = httpExchange.getResponseBody();
responseBody.write(scrapeBytes);
responseBody.close();
}
如您所见,这段代码与https://micrometer.io/docs/registry/prometheus中如何配置Prometheus注册中心的示例大体相同
但是如果我执行curl http://localhost:9000/metrics/ 我没有得到任何答复。我检查了问题来自registry.scrape() 调用,它被卡住了。
关于可能是什么问题的任何线索?谢谢。
【问题讨论】:
-
一个更新:我尝试评论将 PrometheusMeterRegistry 添加到 MetricsSession 的行,并创建了一个计数器。结果是一样的。我认为这放弃了涉及 Geode 代码,因为在这种情况下,注册表没有从 Geode 接收指标。
-
新更新:我使用 PrometheusMeterRegistry 实现了一个简单的程序,并且 curl 命令可以正常工作。所以也许问题在于 Geode 与 Micrometer 的集成。
标签: micrometer