簡體   English   中英

千分尺指標和 Application Insights java 代理 - 指標會累積,盡管它們不應該(或者我錯過了什么)

[英]Micrometer metrics & Application Insights java agent - Metrics accumulate although they shouldn't (or am I missing something)

我們有一個 Java EE JAX-RS 應用程序(Java EE 8 托管在 WildFly 20 上),其中我們將 Micrometer (v1.6.4) 配置為度量框架。 我們正在嘗試將其與 Azure Application Insights 連接,以便相關 Application Insights 資源可以使用指標(然后添加警報等)。

為此,我們附加了無代碼 Application Insights 代理 (v3.0.2),該代理無需任何代碼更改即可自動發布 Micrometer 指標。 最重要的是,我們在 globalRegistry 中添加了一個 PrometheusMeterRegistry,僅用於調試目的(我們不使用 Prometheus)。

Metrics.globalRegistry.add(new PrometheusMeterRegistry(PrometheusConfig.DEFAULT));

最重要的是,我們配置了一個端點,它使用以下代碼片段返回 Prometheus 數據:

PrometheusMeterRegistry promRegistry = (PrometheusMeterRegistry) registry;
result = promRegistry.scrape();

代理附加了一個配置文件,其中僅設置了應用程序的連接字符串和角色名稱。

代理正確啟動,並且數據在 Application Insights 資源中發布。 自定義指標可在資源的 Monitoring -> Metrics 區域中選擇。

我們面臨的問題是指標數據會隨着時間的推移而累積,盡管它們不應該如此。 並舉個例子:

  • 我們有一個定時器設置來測量我們應用程序中特定操作的時間。 Timer 由@Interceptor 使用@AroundInvoke 方法觸發,並記錄實際操作完成所需的時間。 我們使用這個代碼片段來記錄時間
...
Builder timerBuilder = Timer.builder(timerName);
Timer timer = timerBuilder.register(metricsProducer.getMetricsRegistry());

return timer.record(() -> {
    try {
        return ctx.proceed();
    } catch (Exception e) {
        throw new RuntimeException(e.getMessage());
    }
});
  • 我們還有一個 Counter 設置,用於測量調用特定操作的次數(我知道可以通過 Timer 實現相同的操作,但它僅用於測試目的)

假設我們只調用一次綁定到 Counter 的操作。 我們期望 Counter 值為 1,這是我們通過日志記錄確認的。 還假設我們只調用一次綁定到 Timer 的操作。 我們期望只有這種觸發被測量和記錄。

在 Application Insights 資源中,我們看到每次代理發布信息時都會更新指標信息,並在后端沒有任何觸發器的情況下修改值。 特別是,這兩個指標都會增加 Count 聚合值,但由於 Timer 的持續時間不會改變,因此平均值會下降(表明通過持續時間 0 的指標值)。

另一方面,當調用 Prometheus 抓取端點時,數據被正確返回,即兩個指標的 Count 都保持為 1,並且數據是預期的。

我已經嘗試過使用 SpringBoot 作為底層框架,再次獲得相同的結果。

有什么想法嗎? 我錯過了什么嗎?

謝謝

萬吉利斯

這是千分尺庫中的一個問題,並且已經創建了一個相關的PR

千分尺中的這個問題是否可能與我在這里描述的有關?

暫無
暫無

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

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