本文介紹了在Spring Boot 2中為測微器定制Cloudwatch MeterRegistry的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我們希望向Cloudwatch發送致動器指標。使用提供的微米CloudWatch MeterRegistry解決方案對我們的項目如何設置做出了許多假設,例如,您需要依賴云AWS,而云AWS又做出了更多的假設。我們想要編寫一個更輕量級的實現,只需要注入一個CloudWatchAsyncClient,并且不會對我們的項目做任何其他假設。
然而,我不確定是如何做到的。有沒有關于如何使自定義實現成為必須依賴于可用的指標注冊表的示例?
到目前為止,我已經做了一些實驗:
public interface CloudWatchConfig extends StepRegistryConfig {
int MAX_BATCH_SIZE = 20;
@Override
default String prefix() {
return "cloudwatch";
}
default String namespace() {
String v = get(prefix() + ".namespace");
if (v == null)
throw new MissingRequiredConfigurationException("namespace must be set to report metrics to CloudWatch");
return v;
}
@Override
default int batchSize() {
String v = get(prefix() + ".batchSize");
if (v == null) {
return MAX_BATCH_SIZE;
}
int vInt = Integer.parseInt(v);
if (vInt > MAX_BATCH_SIZE)
throw new InvalidConfigurationException("batchSize must be <= " + MAX_BATCH_SIZE);
return vInt;
}
}
@Service
@Log
public class CloudWatchMeterRegistry extends StepMeterRegistry {
public CloudWatchMeterRegistry(CloudWatchConfig config, Clock clock) {
super(config, clock);
}
@Override
protected void publish() {
getMeters().stream().forEach(a -> {
log.warning(a.getId().toString());
});
}
@Override
protected TimeUnit getBaseTimeUnit() {
return TimeUnit.MILLISECONDS;
}
}
@Configuration
public class MetricsPublisherConfig {
@Bean
public CloudWatchConfig cloudWatchConfig() {
return new CloudWatchConfig() {
@Override
public String get(String key) {
switch (key) {
case "cloudwatch.step":
return props.getStep();
default:
return "testtest";
}
}
};
}
}
但是,當我運行時,不會調用publish
方法,也不會記錄任何指標。我錯過了什么才能使其正常工作?
推薦答案
以下是一個示例項目。我自己沒有使用CloudWatch,所以沒有機會測試它與AWS的集成。如果有任何問題,請留言,我們可以嘗試解決它們
https://github.com/michaelmcfadyen/spring-boot-cloudwatch
這篇關于在Spring Boot 2中為測微器定制Cloudwatch MeterRegistry的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,