我有一个Spring Boot应用程序,要求将指标导出到DynaTrace。我从Micrometer网站上找到了一个不错的库(io.micrometer:micrometer-registry-dynatrace:latest.release),其中包含建立该库并开始使用的说明。在遵循他们的指示之后,我注意到Tomcat无法启动,并且不确定为什么。在我的build.gradle文件中,导入“ io.micrometer:micrometer-registry-dynatrace:latest.release”。我已通过每个步骤尝试解决此问题,尽管它主要是想让我提供DynaTrace配置项,但到这一点为止,Tomcat无法启动。添加了所有内容后,这就是我从堆栈跟踪中获得的结果:org.springframework.boot.web.server.WebServerException:无法启动嵌入式Tomcat。关于为什么会这样的任何想法?

management:
  endpoint:
    metrics:
      enabled: true
    prometheus:
      enabled: true
  endpoints:
    web:
      exposure:
        include: "info, health, metrics, prometheus, dynatrace"
  metrics:
    tags:
      application: ${spring.application.name}
      instance: ${HOSTNAME:defaultInstance}
    export:
      prometheus:
        enabled: true
      dynatrace:
        api-token: ${DYNATRACE_TOKEN:token}
        uri: ${DYNATRACE_URL:url} # using dev environment for now
        device-id: ${DYNATRACE_DEVICEID:device}
        enabled: true
        step: 5s


package package.name;

import io.micrometer.core.instrument.Clock;
import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.core.lang.Nullable;
import io.micrometer.dynatrace.DynatraceConfig;
import io.micrometer.dynatrace.DynatraceMeterRegistry;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;

@Configuration
@Data
public class DynaTrace {
  @Value("${management.metrics.export.dynatrace.api-token}")
  String MY_TOKEN;

  @Value("${management.metrics.export.dynatrace.uri}")
  String MY_DYNATRACE_URI;

  @Value("${management.metrics.export.dynatrace.device-id}")
  String MY_DEVICE_ID;

  DynatraceConfig dynatraceConfig = new DynatraceConfig() {
    @Override
    public String apiToken() {
      return MY_TOKEN;
    }

    @Override
    public String uri() {
      return MY_DYNATRACE_URI;
    }

    @Override
    public String deviceId() {
      return MY_DEVICE_ID;
    }

    @Override
    @Nullable
    public String get(String k) {
      return null;
    }
  };
  MeterRegistry registry = new DynatraceMeterRegistry(dynatraceConfig, Clock.SYSTEM);
}

最佳答案

我还尝试过设置Spring Dynatrace千分尺,并遇到了一些例外,直到配置了正确的持续时间。从您共享的示例代码中,我注意到该方法丢失了。

 @Configuration
public class DynatraceMicrometerConfig implements DynatraceConfig {

  private final DevopsProdTenant devopsTenant = new DevopsProdTenant();

  private static final String METRIC_CUSTOM_ID = "CUSTOM_EXTENSION_DEVICE";

  @Override public String get(String key) {
    return null;
  }

  @Override public String apiToken() {
    return devopsTenant.getDecryptedApiToken();
  }

  @Override public String uri() {
    return devopsTenant.getUrl();
  }

  @Override public String deviceId() {
    return METRIC_CUSTOM_ID;
  }

//  @Override public Duration step() {
//    return Duration.parse("PT10S");
//  }
}


我们使用的gradle文件包含与您正在使用的gradle文件相同的导入,但是我们不依赖于应用程序属性,因为我们需要从外部库中导入uri和令牌(但是,通过使用应用程序属性也可以工作)。

09-12 12:59