我想爲我的Spring啓動應用程序添加度量標準。度量將通過grafana顯示。普羅米修斯彈簧驅動器,自定義MetricWriter永遠不會被稱爲
我發現很好article集成彈簧執行器與普羅米修斯。
根據樣品,我要實現我的自定義MetricWriter
在普羅米修斯CollectorRegistry
更新相應Counter
或Gauge
它看起來像這樣:
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 custom
PrometheusMetricWriter`從未填充過我的度量標準。
那麼請告訴我,我該如何解決這個問題?