Spring Boot 的新遗物

问题描述 投票:0回答:4

最近,我们将一个tomcat/spring 应用程序转换为spring boot。除了新的遗物外,一切都很好。有没有一种方法可以让我轻松地使用 spring boot 项目配置新的遗物。我不想硬编码新遗物代理 jar 路径的位置,然后使用该路径运行 spring boot 项目。

edit:Spring boot 项目与 maven 一起

spring spring-boot newrelic
4个回答
11
投票

您可以包含 NewRelic Maven 依赖项并使用

maven-dependency-plugin
解压到您的
target/classes
目录中,这允许 Maven 将其包含到最终的 Jar 文件中。然后你必须将
Premain-Class
属性添加到清单文件中,你可以使用你的应用程序jar作为
-javaagent
源。您可以在我的博文

上找到详细信息

8
投票

分步说明

  • 从 newrelic java 代理存档中提取文件。
  • 在应用程序的根目录中创建一个名为 newrelic 的目录。
  • 将存档中的 newrelic.jar 放在上面创建的 newrelic 文件夹中
  • newrelic.yml YAML 配置文件放在上面创建的 newrelic 文件夹中。
  • 更新 newrelic.yml 中的值如下。
    • license_key: '你的许可证密钥'
    • app_name:‘你的应用程序名称’
  • 使用选项 javaagent 运行你的应用程序
    • java-javaagent:newrelic ewrelic.jar -jar yourapplication.jar

-javaagent 选项需要在 -jar 之前,以便代理可以启动


1
投票

我遇到了同样的问题,这就是我想出来的。我为我的应用程序实现了第二种方式。 有 3 种方法可以将 New Relic 与 Spring Boot 应用程序集成-

  1. 使用 New Relic 提供的 Java Agent
  2. 使用 New Relic 的 Micrometer 依赖项
  3. Micrometer 的新 Relic Dependency

1。使用 New Relic 提供的 Java Agent 进行配置

  1. 从此 URL 下载 Java 代理 - https://docs.newrelic.com/docs/release-notes/agent-release-notes/java-release-notes/
  2. 提取它。
  3. 修改提取文件夹中的 newrelic.yml 文件以包含您的 注册码: 应用名称:
  4. 使用一些 REST 端点创建一个 SpringBoot 应用程序。
  5. 构建应用程序。
  6. 导航到您提取 newrelic java 代理的根路径。
  7. 输入此命令
    java -javagent:<path to your new relic jar>\newrelic.jar -jar <path to your application jar>\<you rapplication jar name>.jar

查看应用指标-

  1. 登录到您的 New Relic 帐户。
  2. 转到资源管理器选项卡。
  3. 点击服务-APM
  4. 您可以看到您的应用程序名称(您在 newrelic.yml 文件中提到的)列在那里。
  5. 单击应用程序名称。
  6. 仪表板应该看起来像这样。

image

使用 New Relic 的 Micrometer Dependency 是首选方法。

2。使用 New Relic 的 Micrometer Dependency 进行配置

  1. 添加这个依赖
<dependency>
        <groupId>com.newrelic.telemetry</groupId>
        <artifactId>micrometer-registry-new-relic</artifactId>
        <version>0.7.0</version>
    </dependency>
  1. 修改
    MicrometerConfig.java
    类以添加您的 API 密钥和应用程序名称。
import java.net.InetAddress;
import java.net.UnknownHostException;

import org.springframework.boot.actuate.autoconfigure.metrics.CompositeMeterRegistryAutoConfiguration;
import org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration;
import org.springframework.boot.actuate.autoconfigure.metrics.export.simple.SimpleMetricsExportAutoConfiguration;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.newrelic.telemetry.Attributes;
import com.newrelic.telemetry.micrometer.NewRelicRegistry;
import com.newrelic.telemetry.micrometer.NewRelicRegistryConfig;

import java.time.Duration;
import io.micrometer.core.instrument.config.MeterFilter;
import io.micrometer.core.instrument.util.NamedThreadFactory;

@Configuration
@AutoConfigureBefore({ CompositeMeterRegistryAutoConfiguration.class, SimpleMetricsExportAutoConfiguration.class })
@AutoConfigureAfter(MetricsAutoConfiguration.class)
@ConditionalOnClass(NewRelicRegistry.class)
public class MicrometerConfig {

    @Bean
    public NewRelicRegistryConfig newRelicConfig() {
        return new NewRelicRegistryConfig() {
            @Override
            public String get(String key) {
                return null;
            }

            @Override
            public String apiKey() {
                return "your_api_key"; // for production purposes take it from config file
            }

            @Override
            public Duration step() {
                return Duration.ofSeconds(5);
            }

            @Override
            public String serviceName() {
                return "your_service_name"; // take it from config file
            }

        };
    }

    @Bean
    public NewRelicRegistry newRelicMeterRegistry(NewRelicRegistryConfig config) throws UnknownHostException {
        NewRelicRegistry newRelicRegistry = NewRelicRegistry.builder(config)
                .commonAttributes(new Attributes().put("host", InetAddress.getLocalHost().getHostName())).build();
        newRelicRegistry.config().meterFilter(MeterFilter.ignoreTags("plz_ignore_me"));
        newRelicRegistry.config().meterFilter(MeterFilter.denyNameStartsWith("jvm.threads"));
        newRelicRegistry.start(new NamedThreadFactory("newrelic.micrometer.registry"));
        return newRelicRegistry;
    }
}
  1. 运行应用程序。

查看应用程序指标-

  1. 登录到您的 New Relic 帐户。
  2. 转到资源管理器选项卡。
  3. 点击服务-OpenTelemetry
  4. 您可以在此处看到您的应用程序名称(您在 MicrometerConfig 文件中提到过)。
  5. 单击应用程序名称。
  6. 仪表板应该看起来像这样。

image

这是我原来的问题的链接。


-2
投票

我可以将多个 java 应用程序添加到新的 relic 以使用 java 代理进行日志记录吗?

© www.soinside.com 2019 - 2024. All rights reserved.