09.4自动插桩 HTTP请求追踪

分类: 后端集成 Java Spring Boot OpenTelemetry

自动插桩:HTTP 请求追踪

欢迎回到第 9 章的学习。在上一节,我们学习了 OpenTelemetry 配置。现在我们要学习自动插桩:HTTP 请求追踪。

本节将学习:Spring MVC 自动追踪、请求和响应信息、以及 Span 属性。

Spring MVC 自动追踪

Spring MVC 自动追踪是什么? OpenTelemetry Spring Boot Starter 自动为 Spring MVC 控制器方法创建 Span,无需手动代码,零侵入。

如何验证自动追踪呢?

第一步:创建 Controller。 创建

OrderController.java
文件,添加
@RestController
@RequestMapping
注解。

第二步:创建 REST 端点。 创建简单的 REST 端点(GET、POST)。

第三步:启动应用。 运行应用,使用 curl 或 Postman 发送 HTTP 请求。

第四步:查看 Trace。 在 Grafana Tempo 中查看自动生成的 Trace。

代码示例:

文件路径:

src/main/java/com/shoehub/orderservice/controller/OrderController.java

package com.shoehub.orderservice.controller;

import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api/orders")
public class OrderController {
    
    @GetMapping("/{id}")
    public String getOrder(@PathVariable Long id) {
        return "Order: " + id;
    }
    
    @PostMapping
    public String createOrder(@RequestBody String orderData) {
        return "Order created";
    }
}

自动追踪已经生效,无需任何代码修改。

请求和响应信息

请求和响应信息包含哪些属性呢?

请求属性:

  • http.method: HTTP 方法(GET/POST/PUT/DELETE)。
  • http.url: 完整的请求 URL。
  • http.route: 路由路径(如 /api/orders/{id})。
  • http.target: 目标路径。
  • http.scheme: http/https。
  • http.host: 主机名。
  • http.user_agent: 用户代理。

响应属性:

  • http.status_code: 200/404/500。
  • http.status_text: OK/Not Found/Internal Server Error。
  • net.peer.name: 对端主机名。
  • net.peer.port: 对端端口。

这些属性由 OpenTelemetry 自动添加。

可以使用 TraceQL 查询:

{http.method="GET"} && {http.status_code="200"}

Span 属性

Span 属性是什么? Span 属性用于添加自定义信息,丰富追踪数据。

如何添加自定义属性呢?

第一步:获取当前 Span。 使用

Span.current()
获取当前 Span。

第二步:添加自定义属性。 使用

span.setAttribute()
添加自定义属性。

第三步:验证属性。 在 Grafana 中验证属性是否被记录。

代码示例:

@GetMapping("/{id}")
public String getOrder(@PathVariable Long id) {
    // Get the current Span
    Span span = Span.current();
    
    // Adding custom attributes
    span.setAttribute("order.id", id);
    span.setAttribute("user.id", "user-123");
    span.setAttribute("business.type", "order-query");
    
    return "Order: " + id;
}

自定义属性示例: order.id、user.id、business.type、order.amount、order.items。

可以使用 TraceQL 查询自定义属性。

本节小结

在本节中,我们学习了自动插桩:HTTP 请求追踪:

第一个是 Spring MVC 自动追踪。 OpenTelemetry Spring Boot Starter 自动为 Spring MVC 控制器方法创建 Span,无需手动代码。

第二个是请求和响应信息。 请求属性(http.method、http.url、http.route 等)、响应属性(http.status_code、http.status_text 等)。

第三个是 Span 属性。 使用

Span.current()
获取当前 Span,使用
span.setAttribute()
添加自定义属性。

HTTP 请求追踪总结: HTTP 请求追踪包括自动追踪(Spring MVC 自动创建 Span)、请求响应信息(自动添加 HTTP 属性)、自定义属性(手动添加业务属性)。这些功能组合在一起,构成了完整的 HTTP 请求追踪能力。

这就是自动插桩:HTTP 请求追踪。掌握这些功能,可以追踪和分析 HTTP 请求。

在下一节,我们将学习自动插桩:数据库查询追踪。学习 Spring Data JPA 自动追踪和 SQL 查询属性。