【问题标题】:New Relic for Spring BootSpring Boot 的新遗物
【发布时间】:2014-11-13 05:30:42
【问题描述】:

最近,我们将一个 tomcat/spring 应用程序转换为 spring boot。除了新的遗物外,一切都很好。有没有办法可以很容易地用 spring boot 项目配置新的 relic。我不想硬编码新的relic agent jar路径的位置,然后用路径运行spring boot项目。

编辑:Spring Boot 项目使用 maven

【问题讨论】:

  • 你可能会发现这个链接很有用:jdpgrailsdev.github.io/blog/2014/04/08/… 这个人使用的是 Gradle 而不是 Maven,但他似乎解决了一个类似的问题,即如何将新的 relic 代理 jar 路径传递给 spring无需硬编码即可启动。
  • 感谢 Toby_New_Relic。之前看过这个帖子,但是还是不知道怎么用maven配置

标签: spring spring-boot newrelic


【解决方案1】:

您可以包含 NewRelic Maven 依赖项并使用 maven-dependency-plugin 解压缩到您的 target/classes 目录中,这允许 Maven 将其包含到最终 Jar 文件中。然后您必须将Premain-Class 属性添加到清单文件中,您可以将您的应用程序jar 用作-javaagent 源。您可以在my blog post找到详细信息

【讨论】:

  • 我按照说明进行操作,效果很好。谢谢!
  • @Jakub Kubrybski,您的博文已过时。 Spring boot现在将类文件打包在BOOT-INF/classes中,PreMain-Class ClassLoader无法加载。
【解决方案2】:

分步说明

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

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

【讨论】:

    【解决方案3】:

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

    1. 使用 New Relic 提供的 Java 代理
    2. 使用 New Relic 的千分尺依赖性
    3. Micrometer 的新 Relic 依赖项

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

    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. 仪表板应如下所示。

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

    2。使用 New Relic 的千分尺依赖配置

    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. 仪表板应如下所示。

    这是我原来的question的链接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-03
      • 2014-08-05
      • 2011-01-08
      • 2016-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-06
      相关资源
      最近更新 更多