1 回答
TA贡献1779条经验 获得超6个赞
你可以尝试做这样的事情:
1 - 创建一个类来存储您的结果并将数据转换为 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 - 创建自定义查询以对结果进行分组
@Query(value = "select new multigauge.multigauge.UserData(usr.gender, count(usr.id)) " +
"from users usr " +
"group by usr.gender")
List<UserData> retrieveUsersGroupedByGender();
3 - 使用 toRow 方法转换列表并注册您的 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 存储库中的单元测试:
https://github.com/micrometer-metrics/micrometer/blob/master/micrometer-core/src/test/java/io/micrometer/core/instrument/MultiGaugeTest.java
添加回答
举报