如何跟踪在我的 Spring Boot 应用程序上完成的 100% 请求?

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

我有一个想要监控的 Spring Boot 3 应用程序。我想将其跟踪发布到 OpenTelemetry 收集器,以便稍后可以在 Grafana 实例上存储和显示它们。

由于此应用程序目前正在测试中,因此要求之一是将 100% 的跟踪发布到收集器,以收集尽可能多的有关其处理的请求的信息。

我从头开始创建了一个全新的 Spring Boot 项目,该项目依赖于

spring-boot-starter-web
opentelemetry-spring-boot-starter

<?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>3.4.1</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>io.github.tiagoanleite</groupId>
    <artifactId>spring-boot-opentelemetry</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>spring-boot-opentelemetry</name>
    <description>Demo project for Spring Boot + OpenTelemetry</description>

    <properties>
        <java.version>17</java.version>
    </properties>
    
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>io.opentelemetry.instrumentation</groupId>
                <artifactId>opentelemetry-instrumentation-bom</artifactId>
                <version>2.11.0</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>


    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- tag::actuator[] -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!-- end::actuator[] -->
        
        <!-- tag::persistence[] -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
        </dependency>
        <!-- end::persistence[] -->

        
        <!-- tag::opentelemetry[] -->
        <dependency>
            <groupId>io.opentelemetry.instrumentation</groupId>
            <artifactId>opentelemetry-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>io.opentelemetry.contrib</groupId>
            <artifactId>opentelemetry-samplers</artifactId>
            <version>1.42.0-alpha</version>
        </dependency>
        <!-- end::opentelemetry[] -->

        <!-- tag::tests[] -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- end::tests[] -->
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

基于 Spring 的跟踪文档,我还通过将

management.tracing.sampling.probability
属性添加到我的 application.yml 中,将跟踪概率更改为 100%:

spring:
  datasource:
    url: "jdbc:h2:mem:db"
management:
  endpoints:
    web:
      exposure:
        include: "*"
  tracing:
    sampling:
      probability: 1.0

为了检查应用程序是否正在发布请求跟踪,我创建了一个简单的 REST 控制器,它公开了

/hello
端点:

package io.github.tiagoanleite;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @GetMapping("/hello")
    public String index() {
        return "Greetings from Spring Boot!";
    }

}

但是,并非我对应用程序执行的所有请求都会产生跟踪。根据我的经验,每 10 个

GET /hello
请求,我都会发布 3 或 4 个跟踪,而不是我预期的 10 个。

我错过了什么?这是我第一次使用 OpenTelemetry,我不确定这是否是预期的行为,或者是否需要添加任何其他配置来实现我的目标。

PS:如果有帮助,我已经在我的 GitHub 个人资料上发布了这个问题中提到的项目。

java spring-boot open-telemetry micrometer-tracing observability
1个回答
0
投票

您的 Spring Boot 可观察性支持配置是正确的,但您的应用程序未使用它。您的应用程序正在使用

opentelemetry-spring-boot-starter
,它不是由 Spring 团队维护的。这意味着不能保证与可观察性相关的 Spring Boot 文档适用于您的案例,您应该参考此入门文档

我相信你可以使用这个资源属性来配置它

请注意,Spring Boot 文档中指出了这种行为差异。如果您打算使用 Spring Boot 支持,则可以删除

io.opentelemetry
依赖项,使用执行器启动器并参考 Spring Boot 文档。

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