【问题标题】:PrometheusMeterRegistry stuck at scrape function callPrometheusMeterRegistry 卡在抓取函数调用中
【发布时间】: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


【解决方案1】:

问题已解决。不确定原因,但是在将我的代码的依赖项打包在同一个 jar 中(而不是将所有 jar 都添加到类路径中)之后,我终于从端点得到了答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-06
    • 2016-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-23
    • 1970-01-01
    相关资源
    最近更新 更多