当前位置: 首页 > 知识库问答 >
问题:

使用千分尺将新遗迹与Spring Boot集成

上官霄
2023-03-14

我试图用千分尺集成一个简单的Spring Boot应用程序与新的遗迹。

以下是配置详细信息:-

application.properties

management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always

management.metrics.export.newrelic.enabled=true
management.metrics.export.newrelic.api-key:MY_API_KEY // Have added the API key here
management.metrics.export.newrelic.account-id: MY_ACCOUNT_ID // Have added the account id here
logging.level.io.micrometer.newrelic=TRACE

砰.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.5</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>
    <groupId>springboot.micrometer.demo</groupId>
    <artifactId>micrometer-new-relic</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>micrometer-new-relic</name>
    <description>Demo project for actuator integration with new relic using micrometer</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>io.micrometer</groupId>
            <artifactId>micrometer-registry-new-relic</artifactId>
        </dependency>
        <dependency>
            <groupId>io.micrometer</groupId>
            <artifactId>micrometer-registry-prometheus</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

我能够使用< code > micrometer-registry-Prometheus 依赖关系将Prometheus与此应用程序集成。我在本地系统中设置了Prometheus在Docker容器中运行。我使用了下面的一组命令-

docker pull prom/prometheus
docker run -p 9090:9090 -v D:/Workspaces/STS/server_sent_events_blog/micrometer-new-relic/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus

prometheus.yml

global:
  scrape_interval: 4s
  evaluation_interval: 4s

scrape_configs:
  - job_name: 'spring_micrometer'
    metrics_path: '/actuator/prometheus'
    scrape_interval: 5s
    static_configs:
      - targets: ['my_ip_address:8080']

当我导航到localhost:9090/targets时,我可以看到Prometheus仪表板显示了我的应用程序详细信息,它可以从中获取数据。在仪表板中,我可以看到我的自定义指标以及其他指标。

所以我的问题是,我想用新的遗物达到同样的效果。我已经添加了< code > micrometer-registry-new-relic POM依赖项。我还共享了< code > application . properties 文件。我可以在我的控制台上看到日志说它正在向新遗迹发送数据-

2021-10-24 12:42:04.889 DEBUG 2672 --- [trics-publisher] i.m.n.NewRelicInsightsApiClientProvider : 已成功向新Relic发送了58个指标。

问题:

    < li >下一步是什么? < li >我是否需要像为Prometheus那样在本地运行新遗迹服务器? < li >在哪里可以看到这些数据?我在新遗迹有一个帐户,我在那里看不到任何内容

https://discuse . new relic . com/t/integrate-Spring-boot-actuator-with-new-relic/126732按照上面的链接,Spring Bootctuator推送metric作为事件类型“SpringBootSample”。使用NRQL查询,我们可以确认这一点-

从Spring靴采样选择最大(值) 时间序列 1 分钟,其中指标名称 = 'jvm内存已提交'

这是我在这里分享的演示的GitHub链接。我没有找到任何明确的说明,有一些例子,但使用了Java代理。

任何形式的帮助都将不胜感激。

共有2个答案

乐正浩宕
2023-03-14

>

  • 接下来的步骤是什么?
    您似乎已完成并已成功将指标传送到 NewRelic。

    我需要像普罗米修斯那样在本地运行New Relic服务器吗?
    不,NewRelic是SaaS产品。

    我在哪里可以可视化这些数据?我在New Relic有一个帐户,我在那里什么也没看到
    看来你已经找到了(截图)。

    这个查询的结果说明了什么?它是与我的应用相关的指标吗?< br >从截图来看,我无法判断这是否是您的应用程序,但这似乎是Spring Boot应用程序推送的< code > JVM . memory . committed 指标(很有可能)。

    为了查看这是否是你的应用程序,你可以添加一些普通的标签,这些标签可以告诉你应用程序的名称和某种实例ID(或者主机名?)如果同一个应用程序有多个实例,请参阅:

    • Spring靴文档(我会这样做)
    • 千分尺文档(如果您不使用Spring靴或想做一些棘手的事情,请执行此操作)
    • 实际示例

  • 柴良哲
    2023-03-14

    据我目前所知。有3种方法可以将New Relic与Spring Boot Application集成-

    1. 使用新遗物提供的 Java 代理
    2. 使用新遗物的千分尺依赖性
    3. 米科米特的新遗物依赖性
    1. 从以下URL下载Java代理-https://docs.newrelic.com/docs/release-notes/agent-release-notes/java-release-notes/
    2. 提取它
    3. 修改新遗迹。提取文件夹中的yml文件,以包含您的license_key:app_name:
    4. 创建一个带有一些RESTendpoint的SpringBoot应用程序
    5. 构建应用程序
    6. 导航到提取newrelic java代理的根路径
    7. 输入以下命令<code>java-javagent:
      < li >登录您的New Relic帐户。 < li >转到浏览器标签。 < li >单击服务-APM < li >您可以看到应用程序的名称(您在newrelic.yml文件中提到过)列在那里。 < li >单击应用程序名称。 < li >仪表板看起来应该像这样。

    使用新遗物的千分尺依赖是做到这一点的首选方法。

    1. 添加此依赖项
    <dependency>
            <groupId>com.newrelic.telemetry</groupId>
            <artifactId>micrometer-registry-new-relic</artifactId>
            <version>0.7.0</version>
        </dependency>
    
    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. 登录到您的新遗物帐户。
    2. 转到“资源管理器”选项卡。
    3. 点击服务-开放遥测
    4. 您可以看到列出的应用程序的名称(您在千分尺Config文件中提到的名称)。
    5. 单击应用程序名称。
    6. 仪表板应如下所示。
     类似资料:
    • 我想使用New Relic,使用Spring启动执行器的千分尺支持。我没有使用代理。我有如下配置。我可以在数据资源管理器(事件或度量等)中看到数据。但是,我在资源管理器页面的APM部分看不到任何东西。 这是由于配置的根本原因,也许是我错过了什么? 我想我不用用代理,因为我用的是千分尺,对吗? 我在资源管理器页面的APM部分看不到任何东西,这真的是一个问题吗?它会在适当的集成中自动出现吗? 谢谢。

    • 我正在将Spring Cloud Stream应用程序迁移到功能方法。到目前为止,我使用了提供Spring集成的千分尺指标。请参见Spring集成-千分尺集成。 自迁移以来,使用StreamBridge生成的消息不再生成度量。这似乎是因为Spring集成在将通道定义为bean时创建了它的度量,而StreamBridge则动态创建通道。 话虽如此,我的问题是: SCS是否提供任何其他类型的度量? 如

    • 我甚至不使用新的遗迹,我得到了他们的错误。事情就这么突然发生了。 我使用的是最新的Android Studio构建(0.61)。就连我的主分支也有同样的错误。我的机器上有其他项目使用新的遗迹,但不是这个。这个项目没有使用新的遗迹在任何方式,与其说是一个任性的梯度依赖。 项目的build.gradle: 编辑 该项目现在在建筑中导入新的遗迹。根据用户的建议。这解决了这个问题,但我仍在探索为什么,因为

    • 我甚至不使用新的遗物,我得到错误的他们。只是突然发生了。 我使用的是最新的Android Studio版本(0.61)。甚至我的主分支也有同样的错误。在我的机器上有其他的项目使用新的遗迹,但没有这一个。这个项目不使用新的遗迹在任何方式,更多的是一个任性的梯度依赖。 我试着清理我的gradle缓存,重新下载所有的第三方库,没有工作。 编辑 该项目现在根据用户建议在Build.Gradle中导入新的遗

    • 我对Spring很陌生,正在尝试将我的应用程序连接到麋鹿。该应用程序运行的是Spring boot 1.5.5,因此我使用的是微米遗产。我的pom看起来像这样: 每当我尝试启动我的应用程序时,我都会收到以下错误: 根本原因似乎是类io.micrometer.core.instrument.config.validate.Validated它似乎没有像它应该的那样出现在包中。对此有什么想法吗?

    • 最近,我们将tomcat/Spring应用程序转换为Spring boot。除了新遗迹之外,一切都很好。有没有一种方法可以让我很容易地使用Spring Boot项目配置新遗迹。我不想硬编码新遗迹代理jar路径的位置,然后使用该路径运行Spring Boot项目。 编辑:Spring boot项目使用maven