【问题标题】:Micrometer Integration with DynaTrace千分尺与 DynaTrace 的集成
【发布时间】:2019-12-05 16:34:48
【问题描述】:

我有一个需要将指标导出到 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);
}

【问题讨论】:

  • 能否分享异常的完整堆栈跟踪?
  • 发表评论太长了,但堆栈跟踪结束如下:嵌套异常是io.micrometer.core.instrument.config.MissingRequired ConfigurationException: apiToken must be set to report Dynatrace 的指标 看来我将我的令牌设置错了。我有 DynaTrace 指定的“授权:Api-Token 令牌”格式,但我似乎无法让应用程序接受它。

标签: java spring-boot dynatrace spring-micrometer


【解决方案1】:

我也刚刚尝试设置 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 和令牌(但是,使用 app属性)。

【讨论】:

  • 我已经添加了,但没有运气。自从我发布这个问题以来,经过一些工作/调查后,我认为我的 api 令牌无法正常工作。我认为我没有在 yaml 或我的环境变量中正确设置它。我们的标准是将环境变量注入到 yaml 中,所以不能真正偏离这一点,关于可能如何设置令牌的任何想法?我正在使用 DynaTrace 指定的格式,但嵌套异常是 io.micrometer.core.instrument.config.MissingRequiredC onfigurationException: apiToken must be set to report metrics to Dynatrace
  • 所以我解决了 apiToken 问题(我认为),您的建议让我收到错误“java.time.format.DateTimeParseException:文本无法解析为持续时间”。我把它拿出来,仍然收到错误。在您的团队解决此问题时,您是否遇到过此错误?
  • 是的,我们在尝试使用无法解析的持续时间字符串或尝试使用整数(静态 Duration.of() 方法)时也遇到此错误。您是否使用上一个示例中的确切持续时间值?您能否检查您使用的持续时间字符串是否与此处显示的模式之一匹配:logicbig.com/how-to/code-snippets/…
  • 是的,我正在使用您提供的示例 (PT10S)。它与您发布的链接匹配
  • 您也可以选择默认步骤(即 1 分钟)而不覆盖 step() 方法(因为它是可选的)。这也适用于我们的案例。
猜你喜欢
  • 1970-01-01
  • 2022-11-10
  • 1970-01-01
  • 1970-01-01
  • 2019-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-28
相关资源
最近更新 更多