Мы хотели бы отправить метрики привода в Cloudwatch.Использование предоставленных микрометровых облачных решений MeterRegistry позволяет сделать множество предположений о том, как настроен наш проект, например, вам необходимо зависеть от облачного 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
никогда не вызывается, и метрики никогда не регистрируются,Чего мне не хватает, чтобы заставить это работать?