1 回答

TA貢獻(xiàn)1779條經(jīng)驗(yàn) 獲得超6個(gè)贊
你可以嘗試做這樣的事情:
1 - 創(chuàng)建一個(gè)類來存儲(chǔ)您的結(jié)果并將數(shù)據(jù)轉(zhuǎn)換為 MultiGauge.Row
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class UserData {
private String gender;
private Long counter;
public MultiGauge.Row<UserData> toRow() {
return MultiGauge.Row.of(Tags.of("gender", gender), this, c -> this.counter);
}
}
2 - 創(chuàng)建自定義查詢以對(duì)結(jié)果進(jìn)行分組
@Query(value = "select new multigauge.multigauge.UserData(usr.gender, count(usr.id)) " +
"from users usr " +
"group by usr.gender")
List<UserData> retrieveUsersGroupedByGender();
3 - 使用 toRow 方法轉(zhuǎn)換列表并注冊(cè)您的 MultiGauge
@Scheduled(fixedDelay = 1000)
public void updateGauges() {
multiGauge.register(userRepository.retrieveUsersGroupedByGender()
.stream()
.map(UserData::toRow)
.collect(toList()), true);
}
4 - 初始化您的 MultiGauge
@PostConstruct
public void init() {
multiGauge = MultiGauge.builder("users_grouped_by_gender_metric").register(prometheusMeterRegistry);
}
我建議查看官方 GitHub 存儲(chǔ)庫中的單元測(cè)試:
https://github.com/micrometer-metrics/micrometer/blob/master/micrometer-core/src/test/java/io/micrometer/core/instrument/MultiGaugeTest.java
添加回答
舉報(bào)