我们有一个使用HikariCP的自定义网络应用程序帽子.该应用程序被编译为jar,然后在docker容器中启动.根据环境,当我们启动webapp.jar时,我们会通过-javaagent标志加载newrelic-agent.jar.

我们的HikariCP设置如下:

  private DataSource createDataSource() {

    final HikariConfig config = new HikariConfig();

    config.setJdbcUrl(...);
    config.setUsername(...);
    config.setPassword(...);
    config.setSchema(...);

    config.setConnectionTimeout(...);
    config.setMinimumIdle(...);
    config.setMaximumPoolSize(...);
    config.setIdleTimeout(...);

    config.setLeakDetectionThreshold(...);
    config.setMaxLifetime(...);

    config.addDataSourceProperty("cachePrepStmts", "true");
    config.addDataSourceProperty("prepStmtCacheSize", "250");
    config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");

    config.setMetricRegistry(metricsRegistry.getRegistry());

    return new HikariDataSource(config);
  }

我们创建了一个服务,该服务在应用程序启动时根据NewRelic类是否存在启动报告器.由于我们正在加载java agent,它也为我们提供了解析后的newrelic.yaml配置,我们将在下面重新使用该配置:


public class NewRelicMetricsService {

    private static final Logger logger = LoggerFactory.getLogger(NewRelicMetricsService.class);

    private final NewRelicReporter reporter;

    @Inject
    public NewRelicMetricsService(ApplicationMetricsRegistry metricRegistry) {
        NewRelicReporter tmpReporter = null;
        // Check if the NewRelic java agent has been loaded.
        try {
            Class.forName("com.newrelic.api.agent.NewRelic");
            Config config = NewRelic.getAgent().getConfig();

            SenderConfiguration sender = MetricBatchSender.configurationBuilder()
                    .apiKey(config.getValue("license_key"))
                    .useLicenseKey(true)
                    .httpPoster(new OkHttpPoster(Duration.ofSeconds(2)))
                    .build();

            MetricBatchSender metricBatchSender = MetricBatchSender.create(sender);

            // Use this to define custom attributes visible in the APM & Service.
            Attributes commonAttributes = new Attributes();

            tmpReporter = NewRelicReporter.build(metricRegistry.getRegistry(), metricBatchSender)
                                          .commonAttributes(commonAttributes)
                                          .build();

        } catch (ClassNotFoundException e) {
            logger.info("New Relic java agent has not been loaded. Metrics will not be showing in New Relic.");
        }

        this.reporter = tmpReporter;

        // Start reporting.
        start();
    }

    public void start() {
        if (reporter == null) {
            return;
        }
        reporter.start(1, TimeUnit.SECONDS);
    }

    public void stop() {
        if (reporter == null) {
            return;
        }
        reporter.stop();
    }

}

上面的代码运行良好,指标开始出现在NewRelic中低于Metrics.

hikaricp metrics in newrelic

然而,一旦您try 通过entity过滤指标--这些指标就无处可见.就好像指标的范围是在您看到"所有指标"的"根"实体中.

enter image description here

不完全确定这里出了什么问题.有人有什么 idea 吗? 也许我们需要添加特定/额外的attributes个?

推荐答案

问题是Telemapons SDK不知道您正在检测的应用程序(实体).

如果您在Telemix SDK配置中将公共属性设置为entity.guid,则它会将指标链接到应用程序.

String entityGuid = NewRelic.getAgent().getLinkingMetadata().get("entity.guid");
Attributes commonAttributes = new Attributes()
    .put("entity.guid", entityGuid);

或者,您可以使用代理API(请参阅"创建和积累自定义指标").

Java相关问答推荐

Informix PrepareStatement引发错误-将LIMIT Clause添加到查询时,字符到数字的转换过程失败

长音符

JPackaged应用程序启动MSI调试,然后启动System. exit()

Javascript在边界中心调整ImageView大小

我找不到&Quot;配置&的位置

调用引发泛型异常的泛型方法时出现编译错误

在AVL树的Remove方法中使用NoSuchElementException时遇到问题

更新GWT 2.5.1到2.11.0和sencha GXT 3.1.1到4.1时出现错误

如何在antlr4中跳过所有反斜杠-换行符而保留换行符?

继续收到错误SQLJDBC EXCEPTION执行";org.springframework.dao.InvalidDataAccessResourceUsageException:&

如何在 spring 数据的MongoDB派生查询方法中使用$EXISTS

如何在我的世界中为互动增加冷却时间?

允许同时执行两个方法,但不能同时执行这两个方法

Spring Framework6.1中引入的新RestClient是否有适合于测试的变体,就像RestTemplate和TestRestTemplate一样?

STREAMS减少部分结果的问题

在使用具有不同成本的谓词调用allMatch之前对Java流进行排序会带来什么好处吗?

如何在ImageIO或十二只猴子中旋转TIFF CMYK图像?

Java HashMap保留所有时间复杂性

保持标题窗格的箭头可见,即使设置为不可折叠

Eureka客户端无法使用用户/通行证注册到Eureka服务器