- Приложение Spring Boot на основе версии 3.1.3
- Добавлена зависимость Spring-boot-starter-actuator
- Добавлена пользовательская метрика MyHealthMetricsExportConfiguration согласно документации (показано ниже)
В разделе /actuator/metrics я вижу метрику здоровья. - Я загрузил последнюю версию Java-агента для отелей с github.
Я добавил конфигурацию в intellij «vm options»:
-Dotel.metrics.exporter=otlp
- Я запустил сборщик отелей с приемником, установленным на otlp
Я не знаю, как заставить агента отеля «видеть» и экспортировать показатели Spring, такие как f.e. «MyHealthMetricsExportConfiguration». В этом блоге это должно быть так просто:
// Unregister the OpenTelemetryMeterRegistry from Metrics.globalRegistry and make it available
// as a Spring bean instead.
@Bean
@ConditionalOnClass(name = "io.opentelemetry.javaagent.OpenTelemetryAgent")
public MeterRegistry otelRegistry() {
Optional otelRegistry = Metrics.globalRegistry.getRegistries().stream()
.filter(r -> r.getClass().getName().contains("OpenTelemetryMeterRegistry"))
.findAny();
otelRegistry.ifPresent(Metrics.globalRegistry::remove);
return otelRegistry.orElse(null);
}
Но у меня это не работает. Прежде всего, во время создания bean-компонента Metrics.globalRegistry.getRegistries() пуст. Во-вторых, в сборщике отелей нет показателей здоровья. Что я могу сделать, чтобы этот агент отправлял мою специальную метрику сборщику?
@Configuration(proxyBeanMethods = false)
public class MyHealthMetricsExportConfiguration {
public MyHealthMetricsExportConfiguration(MeterRegistry registry, HealthEndpoint healthEndpoint) {
// This example presumes common tags (such as the app) are applied elsewhere
Gauge.builder("health", healthEndpoint, this::getStatusCode).strongReference(true).register(registry);
}
private int getStatusCode(HealthEndpoint health) {
Status status = health.health().getStatus();
if (Status.UP.equals(status)) {
return 3;
}
if (Status.OUT_OF_SERVICE.equals(status)) {
return 2;
}
if (Status.DOWN.equals(status)) {
return 1;
}
return 0;
}
}
Подробнее здесь: https://stackoverflow.com/questions/784 ... micrometer