3

当我们在生产中使用千分尺和普罗米修斯时,我很怀疑,因为普罗米修斯从千分尺中提取数据,我们只是为普罗米修斯使用远程数据存储,但一些数据也由千分尺存储。现在我的问题是我的服务器是否在生产中运行比千分尺存储数据在运行时不断增加还是在一段时间后自动刷新?意味着千分尺如何在生产中存储数据?

4

2 回答 2

3

千分尺本身不会持久存储数据。所有数据都保存在内存中。如果应用程序重新启动,计数器从零开始。

时间线数据库的任务是处理它。例如,Prometheus 具有rate()忽略increase()这些重置的功能。

于 2021-05-12T09:05:48.883 回答
1

无论您的应用程序使用哪种环境(无论是在本地、在开发、验收或生产中,micrometer的行为方式相同:

  1. 收集和存储内存中的指标
  2. 等待其他指标分析和可视化工具收集数据:
    • 在工具实现使用推送模型时发布
    • 使用拉模型公开工具所需的端点,这是Prometheus案例

顺便说一下, micrometers和任何其他度量收集库都无法假设何时应该刷新或清除收集的数据,因为它无法做出假设,甚至无法提前知道哪些工具将收集哪些数据以及何时收集。

同时,如果您已经全面了解您的应用程序架构并且您知道您将只使用Prometheus来收集指标,您可以将您的端点配置为clear成功MeterRegistry抓取后(基于官方文档示例,因为您没有提供任何代码片段关于实施):

PrometheusMeterRegistry prometheusRegistry = new PrometheusMeterRegistry(PrometheusConfig.DEFAULT);
try {
    HttpServer server = HttpServer.create(new InetSocketAddress(8080), 0);
    server.createContext("/prometheus", httpExchange -> {
        String response = prometheusRegistry.scrape(); (1)
        httpExchange.sendResponseHeaders(200, response.getBytes().length);
        try (OutputStream os = httpExchange.getResponseBody()) {
            os.write(response.getBytes());
            prometheusRegistry.clear(); // clear the registry upon successful response write
        }
    });
    new Thread(server::start).start();
} catch (IOException e) {
    throw new RuntimeException(e);
}
于 2021-05-12T09:33:58.470 回答