09.11、测试和验证
测试和验证
欢迎回到第 9 章的学习。在上一节,我们实现了完整的订单服务。现在我们要学习如何测试和验证可观察性功能。
本节将学习:本地测试、查看 Trace 数据、查看 Metrics 数据、以及验证 Logs 关联。
本地测试
本地测试的目的是什么? 验证应用是否正常工作,验证 OpenTelemetry 是否已初始化,验证请求是否被正确处理。
测试步骤有哪些呢?
第一步:启动应用。 使用
mvn spring-boot:run./gradlew bootRun第二步:检查日志。 查看应用日志,确认没有错误,确认 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"}第三步:查看 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_totalorder_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 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 关联 → 确认可观察性功能正常。
这就是测试和验证。通过测试和验证,我们确保可观察性功能正常工作。
在下一节,我们将学习生产环境配置。学习如何配置生产环境,优化性能和可靠性。