最近,我们将一个tomcat/spring 应用程序转换为spring boot。除了新的遗物外,一切都很好。有没有一种方法可以让我轻松地使用 spring boot 项目配置新的遗物。我不想硬编码新遗物代理 jar 路径的位置,然后使用该路径运行 spring boot 项目。
edit:Spring boot 项目与 maven 一起
您可以包含 NewRelic Maven 依赖项并使用
maven-dependency-plugin
解压到您的 target/classes
目录中,这允许 Maven 将其包含到最终的 Jar 文件中。然后你必须将Premain-Class
属性添加到清单文件中,你可以使用你的应用程序jar作为-javaagent
源。您可以在我的博文上找到详细信息
分步说明
-javaagent 选项需要在 -jar 之前,以便代理可以启动
我遇到了同样的问题,这就是我想出来的。我为我的应用程序实现了第二种方式。 有 3 种方法可以将 New Relic 与 Spring Boot 应用程序集成-
java -javagent:<path to your new relic jar>\newrelic.jar -jar <path to your application jar>\<you rapplication jar name>.jar
使用 New Relic 的 Micrometer Dependency 是首选方法。
<dependency>
<groupId>com.newrelic.telemetry</groupId>
<artifactId>micrometer-registry-new-relic</artifactId>
<version>0.7.0</version>
</dependency>
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;
}
}
这是我原来的问题的链接。
我可以将多个 java 应用程序添加到新的 relic 以使用 java 代理进行日志记录吗?