Как соединить OpenTelemetry (opentelemetry-java-instrumentation) и MicrometerJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как соединить OpenTelemetry (opentelemetry-java-instrumentation) и Micrometer

Сообщение Anonymous »

Моя настройка:
  • Приложение Spring Boot на основе версии 3.1.3
  • Добавлена ​​зависимость Spring-boot-starter-actuator
  • Добавлена ​​пользовательская метрика MyHealthMetricsExportConfiguration согласно документации (показано ниже)
    В разделе /actuator/metrics я вижу метрику здоровья.
  • Я загрузил последнюю версию Java-агента для отелей с github.
    Я добавил конфигурацию в intellij «vm options»:
-javaagent :./opentelemetry-javaagent.jar

-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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Opentelemetry.instrumentation.instrumentor — DependencyConflict: запрошено: «psycopg2 >= 2.7.3.1», но найдено: «Нет»
    Anonymous » » в форуме Python
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Java-агент выдает UnsupportedClassVersionError при вызове Instrumentation#retransformClasses
    Anonymous » » в форуме JAVA
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Java-агент выдает UnsupportedClassVersionError при вызове Instrumentation#retransformClasses
    Anonymous » » в форуме JAVA
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Почему активность не запускается в тесте Android Instrumentation (тест активности) с эспрессо?
    Anonymous » » в форуме Android
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Получив ключ Applications Insight Instrumentation, получите имя службы в Azure.
    Anonymous » » в форуме C#
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»