簡體   English   中英

千分尺在哪里存儲數據?

[英]Where does micrometer store data?

當我們在生產中使用千分尺和普羅米修斯時,我很懷疑,因為普羅米修斯從千分尺中提取數據,我們只是為普羅米修斯使用遠程數據存儲,但一些數據也由千分尺存儲。現在我的問題是我的服務器是否在生產中運行比千分尺存儲數據在運行時不斷增加還是在一段時間后自動刷新? 意味着千分尺如何在生產中存儲數據?

千分尺本身不會持久存儲數據。 所有數據都保存在 memory 中。 如果應用程序重新啟動,計數器從零開始。

時間線數據庫的任務是處理它。 例如,Prometheus 具有忽略這些重置的rate()increase()等函數。

無論您的應用程序使用哪種環境(無論是在本地、在開發、驗收或生產中, micrometer的行為方式相同:

  1. 收集和存儲內存中的指標
  2. 等待其他指標分析和可視化工具收集數據:
    • 在工具實現使用推送時發布 model
    • 使用拉 model 公開工具所需的端點,這是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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM