PrometheusMeterRegistry застрял при вызове функции очистки - PullRequest
0 голосов
/ 24 октября 2019

У меня проблема с настройкой 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(), он застрял.

Есть какие-либо подсказки о том, в чем может быть проблема? Спасибо.

1 Ответ

0 голосов
/ 29 октября 2019

Проблема решена. Не уверен в причине, но после упаковки зависимостей моего кода в один и тот же файл (вместо добавления всех файлов в путь к классам) я наконец получил ответ от конечной точки.

...