09.11测试和验证

分类: 后端集成 Java Spring Boot OpenTelemetry

测试和验证

欢迎回到第 9 章的学习。在上一节,我们实现了完整的订单服务。现在我们要学习如何测试和验证可观察性功能。

本节将学习:本地测试、查看 Trace 数据、查看 Metrics 数据、以及验证 Logs 关联。

本地测试

本地测试的目的是什么? 验证应用是否正常工作,验证 OpenTelemetry 是否已初始化,验证请求是否被正确处理。

测试步骤有哪些呢?

第一步:启动应用。 使用

mvn spring-boot:run
./gradlew bootRun
启动应用,查看启动日志,确认 OpenTelemetry SDK 已初始化。

第二步:检查日志。 查看应用日志,确认没有错误,确认 OpenTelemetry 配置已加载。

第三步:发送测试请求。 使用 curl 或 Postman 发送 GET、POST、PUT 请求,验证响应状态码和数据格式。

第四步:验证功能。 创建订单、查询订单、更新订单状态,验证业务功能是否正常。

测试命令示例:

# Start the app(Maven)
mvn spring-boot:run

# Start the app(Gradle)
./gradlew bootRun

# Create an order
curl -X POST http://localhost:8080/api/orders \
  -H "Content-Type: application/json" \
  -d '{
    "userId": "user-123",
    "productId": "product-456",
    "quantity": 2,
    "amount": 199.99
  }'

# Order Enquiry
curl http://localhost:8080/api/orders/1

# Update order status
curl -X PUT "http://localhost:8080/api/orders/1/status?status=COMPLETED"

查看 Trace 数据

查看 Trace 数据的目的是什么? 验证 HTTP 请求、Service 业务逻辑、数据库查询是否都被正确追踪,验证 Span 结构是否正确,验证属性是否完整。

查看步骤有哪些呢?

第一步:打开 Grafana Explore。 访问 http://localhost:3000,进入 Explore 页面,选择 Tempo 数据源。

第二步:查询 Trace。 使用服务名称查询:

{service_name="order-service"}
,或者使用 Trace ID 查询。

第三步:查看 Span 树。 选择一个 Trace,查看完整的 Span 树结构,验证 HTTP Span、Service Span、数据库 Span 是否都存在。

第四步:查看 Span 详情。 点击每个 Span,查看详细信息,包括属性、事件、状态,验证信息是否完整。

TraceQL 查询示例:

# Search by service name
{service_name="order-service"}

# press Trace ID Queries (taken from logs))
{traceId="abc123def4567890"}

# Query error Trace
{service_name="order-service"} && {status="error"}

# Queries are slow Trace(It took more than 1 secs)
{service_name="order-service"} && {duration > 1s}

查看 Metrics 数据

查看 Metrics 数据的目的是什么? 验证业务指标是否被正确收集和导出,验证指标名称和标签是否正确,验证指标值是否准确。

查看步骤有哪些呢?

第一步:打开 Grafana Explore。 选择 Prometheus 数据源。

第二步:查询指标。 使用指标名称查询,比如

orders_created_total
(订单创建数量)、
order_amount_histogram
(订单金额分布)。

第三步:查看时间序列。 查看指标的时间序列数据,验证指标值是否正确,验证标签是否正确。

第四步:创建 Dashboard。 创建一个简单的 Dashboard,添加指标面板,可视化指标数据。

PromQL 查询示例:

# 查询订单创建总数
orders_created_total

# 查询订单金额直方图
order_amount_histogram_bucket

# 查询订单创建速率(每秒)
rate(orders_created_total[5m])

# 查询订单金额平均值
avg(order_amount_histogram)

# 查询订单创建数量(按用户分组)
sum(orders_created_total) by (user_id)

验证 Logs 关联

验证 Logs 关联的目的是什么? 验证日志是否包含 Trace ID,验证能否通过 Trace ID 关联查询日志和追踪数据,验证关联是否完整。

验证步骤有哪些呢?

第一步:查看应用日志。 在应用控制台日志中找到一条日志记录,提取 Trace ID。

第二步:在 Loki 中查询日志。 在 Grafana Explore 中选择 Loki 数据源,使用 Trace ID 查询:

{job="order-service"} |= "traceId"
,查看匹配的日志记录。

第三步:在 Tempo 中查询 Trace。 切换到 Tempo 数据源,使用 Trace ID 查询:

{traceId="abc123def456"}
,查看对应的 Trace 数据。

第四步:验证关联。 验证日志和追踪数据能够通过 Trace ID 关联,验证关联是否完整。

日志示例(包含 Trace ID):

2026-01-15 10:30:00.123 [http-nio-8080-exec-1] INFO  [traceId=abc123def4567890, spanId=def4567890abc123] c.s.o.s.OrderService - Creating order for user: user-123

LogQL 查询示例:

# 按 Trace ID 查询日志
{job="order-service"} |= "abc123def4567890"

# 按服务名称和 Trace ID 查询
{job="order-service"} |= "traceId=abc123def4567890"

# 查询错误日志(包含 Trace ID)
{job="order-service"} |= "ERROR" | json | traceId="abc123def4567890"

TraceQL 查询示例(使用 Trace ID):

# in Tempo used in Trace ID querying
{traceId="abc123def4567890"}

本节小结

在本节中,我们学习了测试和验证:

第一个是本地测试。 启动应用,发送测试请求,验证应用功能。

第二个是查看 Trace 数据。 在 Grafana Tempo 中查看 Trace,验证 HTTP、Service、数据库追踪是否正确。

第三个是查看 Metrics 数据。 在 Grafana Prometheus 中查看 Metrics,验证业务指标是否正确。

第四个是验证 Logs 关联。 在 Grafana Loki 中查询日志,验证 Trace ID 关联是否正确。

测试和验证流程: 本地测试 → 查看 Trace → 查看 Metrics → 验证 Logs 关联 → 确认可观察性功能正常。

这就是测试和验证。通过测试和验证,我们确保可观察性功能正常工作。

在下一节,我们将学习生产环境配置。学习如何配置生产环境,优化性能和可靠性。