09.5、自动插桩 数据库查询追踪
自动插桩:数据库查询追踪
欢迎回到第 9 章的学习。在上一节,我们学习了 HTTP 请求追踪。现在我们要学习数据库查询追踪,这对于诊断性能问题非常重要。
本节将学习:Spring Data JPA 集成、SQL 查询追踪、以及数据库连接池监控。
Spring Data JPA 集成
Spring Data JPA 集成是什么? OpenTelemetry Spring Boot Starter 自动为 Spring Data JPA 和 JDBC 操作创建 Span,追踪数据库查询。
如何验证数据库查询追踪呢?
第一步:创建 Entity。 创建
Order.java第二步:创建 Repository。 创建
OrderRepository.java第三步:在 Controller 中调用 Repository。 在 Controller 中注入 Repository 并调用查询方法。
第四步:启动应用并执行查询。 启动应用,发送 HTTP 请求触发数据库查询。
第五步:查看 Trace。 在 Grafana Tempo 中查看自动生成的数据库查询 Span。
代码示例:
文件路径:
src/main/java/com/shoehub/orderservice/model/Order.javapackage com.shoehub.orderservice.model; import jakarta.persistence.*; import lombok.Data; @Entity @Table(name = "orders") @Data public class Order { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String userId; private String productId; private Integer quantity; private Double amount; private String status; }
文件路径:
src/main/java/com/shoehub/orderservice/repository/OrderRepository.javapackage com.shoehub.orderservice.repository; import com.shoehub.orderservice.model.Order; import org.springframework.data.jpa.repository.JpaRepository; import java.util.List; public interface OrderRepository extends JpaRepository<Order, Long> { List<Order> findByUserId(String userId); List<Order> findByStatus(String status); }
SQL 查询被自动追踪,无需额外配置。
SQL 查询追踪
SQL 查询追踪包含哪些属性呢?
SQL 查询属性:
- db.system: 数据库系统(mysql/postgresql)。
- db.name: 数据库名称。
- db.statement: SQL 语句。
- db.operation: SELECT/INSERT/UPDATE/DELETE。
- db.sql.table: 表名。
- db.user: 数据库用户。
- net.peer.name: 数据库主机。
- net.peer.port: 数据库端口。
这些属性由 OpenTelemetry 自动添加。
可以使用 TraceQL 查询:
{db.system="mysql"} && {db.operation="SELECT"}SQL 查询追踪对于性能分析非常重要。
数据库连接池监控
数据库连接池监控是什么? OpenTelemetry 自动收集连接池 Metrics,用于监控连接池状态。
连接池 Metrics 有哪些呢?
- jdbc_connections_active: 活跃连接数。
- jdbc_connections_idle: 空闲连接数。
- jdbc_connections_max: 最大连接数。
- jdbc_connections_waiting: 等待连接数。
- jdbc_connections_timeout: 连接超时次数。
这些 Metrics 由 OpenTelemetry 自动收集。
如何识别连接池问题呢? 连接池耗尽、连接等待时间过长、连接超时等。通过监控这些 Metrics,可以快速识别连接池问题。
本节小结
在本节中,我们学习了自动插桩:数据库查询追踪:
第一个是 Spring Data JPA 集成。 OpenTelemetry Spring Boot Starter 自动为 Spring Data JPA 和 JDBC 操作创建 Span。
第二个是 SQL 查询追踪。 SQL 查询属性(db.system、db.name、db.statement、db.operation 等)。
第三个是数据库连接池监控。 连接池 Metrics(jdbc_connections_active、jdbc_connections_idle 等)。
数据库查询追踪总结: 数据库查询追踪包括自动追踪(Spring Data JPA 自动创建 Span)、SQL 查询属性(自动添加数据库属性)、连接池监控(自动收集连接池 Metrics)。这些功能组合在一起,构成了完整的数据库查询追踪能力。
这就是自动插桩:数据库查询追踪。掌握这些功能,可以追踪和分析数据库查询。
在下一节,我们将学习自动插桩:消息队列追踪。学习 Kafka 和 RabbitMQ 集成。