0

我有一个需要将指标导出到 DynaTrace 的 Spring Boot 应用程序。我从 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);
}
4

1 回答 1

0

我也刚刚尝试设置 Spring Dynatrace Micrometer 并遇到了一些异常,直到配置正确的持续时间。从您共享的示例代码中,我注意到缺少此方法。

 @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 文件包含与您正在使用的相同的导入,但我们不依赖应用程序属性,因为我们需要从外部库导入 uri 和令牌(但是,使用应用程序属性应该可以工作)。

于 2019-12-09T07:45:27.310 回答