【发布时间】:2016-11-29 12:41:03
【问题描述】:
我想为我的 Spring Boot 应用添加度量标准。指标将通过 grafana 显示。
我找到了很好的 article 用于将弹簧执行器与 prometheus 集成。
根据示例,我应该实现我的自定义 MetricWriter 以更新 Prometheus 中对应的 Counter 或 Gauge CollectorRegistry
它看起来像这样:
class PrometheusMetricWriter implements MetricWriter {
CollectorRegistry registry
private final ConcurrentMap<String, Gauge> counters = new ConcurrentHashMap<>()
private final ConcurrentHashMap<String, Gauge> gauges = new ConcurrentHashMap<>()
@Autowired
PrometheusMetricWriter(CollectorRegistry registry) {
this.registry = registry
}
@Override
void increment(Delta<?> delta) {
counter(delta.name).inc(delta.value.doubleValue())
}
@Override
void reset(String metricName) {
counter(metricName).clear()
}
@Override
void set(Metric<?> value) {
println "inside metric writer"
gauge(value.name).set(value.value.doubleValue())
}
private Counter counter(String name) {
def key = sanitizeName(name)
counters.computeIfAbsent key, { k ->
Counter.build().name(k).help(k).register(registry)
}
}
private Gauge gauge(String name) {
def key = sanitizeName(name)
gauges.computeIfAbsent key, { k ->
Gauge.build().name(k).help(k).register(registry)
}
}
private String sanitizeName(String name) {
return name.replaceAll("[^a-zA-Z0-9_]", "_")
}
}
其他 3 个必需元素是:PrometheusEndpoint、PrometheusMvcEndpoint、PrometheusEndpointContextConfiguration。
毕竟,可以通过调用“http://localhost:8080/prometheus”网址来查看收集到的指标。
结果应该是这样的:
# HELP gauge_com_egalacoral_spark_stage_vto gauge_com_egalacoral_spark_stage_vto
# TYPE gauge_com_egalacoral_spark_stage_vto gauge
gauge_com_egalacoral_spark_stage_vto 4.0
# HELP gauge_com_egalacoral_spark_test_vfl gauge_com_egalacoral_spark_test_vfl
# TYPE gauge_com_egalacoral_spark_test_vfl gauge
gauge_com_egalacoral_spark_test_vfl 16.0
但是,我收到一个空白页面。 这是用于收集一些指标的测试类。
class Runner {
@Autowired
GaugeService gaugeService
private static final Logger logger = LoggerFactory.getLogger(Runner.class)
private ZoneId zoneId = ZoneId.of('Europe/London')
private Integer delay = 10
@Scheduled(fixedDelay = 10000L)
void runOnTest() throws Exception {
def now = ZonedDateTime.now(zoneId)
println "collect metrics"
gaugeService.submit("test", 2.0)
}
}
P.S:我注意到GaugeService 有几个实现,在我的应用程序中这是DropwizardMetricServices。这个实现已经包含它自己的指标注册表,它收集我的指标。
因此,当我调用“/prometheus”端点时,我得到一个空页面,因为CollectorRegistry' in my customPrometheusMetricWriter` 从来没有填充我的指标。
那么请告诉我如何解决这个问题?
【问题讨论】:
标签: spring-boot-actuator prometheus