У меня проблема с настройкой PrometheusMeterRegistry для получения метрик из кластера Geode. После настройки конечной точки, если я запускаю команду curl, чтобы проверить, доступны ли метрики в настроенной конечной точке, обработчик http-запросов застревает в функции scrape:
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();
}
Как видите, этот код в основномтак же, как пример настройки реестра Prometheus в https://micrometer.io/docs/registry/prometheus
Но если я выполню curl http://localhost:9000/metrics/
, я не получу ответа. Я проверил, что проблема связана с вызовом registry.scrape()
, он застрял.
Есть какие-либо подсказки о том, в чем может быть проблема? Спасибо.