09.8、Metrics收集 自定义业务指标
Metrics 收集:自定义业务指标
欢迎回到第 9 章的学习。在上一节,我们学习了手动插桩。现在我们要学习 Metrics 收集:自定义业务指标。
本节将学习:Meter API 使用、Counter、Gauge、Histogram、业务指标设计、以及指标导出。
Meter API 使用
Meter API 是什么? Meter API 用于创建和记录 Metrics,提供业务指标收集能力。
如何使用 Meter API 呢?
第一步:注入 Meter。 在 Service 类中注入 Meter。
第二步:创建 Metrics。 使用 meter.counterBuilder() 创建 Counter,使用 meter.gaugeBuilder() 创建 Gauge,使用 meter.histogramBuilder() 创建 Histogram。
第三步:记录指标值。 在业务方法中记录指标值。
第四步:查看 Metrics。 在 Grafana 中查看 Metrics 数据。
代码示例:
package com.shoehub.orderservice.service; import io.opentelemetry.api.metrics.Meter; import io.opentelemetry.api.metrics.Counter; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class OrderService { @Autowired private Meter meter; private final Counter orderCreatedCounter; public OrderService(Meter meter) { this.meter = meter; this.orderCreatedCounter = meter.counterBuilder("orders.created.total") .setDescription("Total number of orders created") .build(); } public Order createOrder(OrderRequest request) { // Business logic orderCreatedCounter.add(1); return order; } }
Counter、Gauge、Histogram
Counter 是什么? Counter 用于记录累计值,只能增加,不能减少。
使用场景: 订单创建数量、请求总数、错误总数。
Gauge 是什么? Gauge 用于记录当前值,可以增加或减少。
使用场景: 当前订单总数、当前活跃用户数、当前内存使用量。
Histogram 是什么? Histogram 用于记录分布值,统计数据分布。
使用场景: 订单金额分布、请求延迟分布、响应大小分布。
代码示例:
@Service public class OrderService { @Autowired private Meter meter; private final Counter orderCreatedCounter; private final Gauge orderTotalGauge; private final Histogram orderAmountHistogram; public OrderService(Meter meter) { this.meter = meter; this.orderCreatedCounter = meter.counterBuilder("orders.created.total") .setDescription("Total number of orders created") .build(); this.orderTotalGauge = meter.gaugeBuilder("orders.total") .setDescription("Current total number of orders") .buildWithCallback(measurement -> { measurement.record(orderRepository.count()); }); this.orderAmountHistogram = meter.histogramBuilder("orders.amount") .setDescription("Order amount distribution") .build(); } public Order createOrder(OrderRequest request) { Order order = // Create an order orderCreatedCounter.add(1); orderAmountHistogram.record(request.getAmount()); return order; } }
不同类型 Metrics 的适用场景:Counter(累计值)、Gauge(当前值)、Histogram(分布值)。
业务指标设计
业务指标设计是什么? 业务指标设计用于设计有意义的业务指标,遵循指标命名规范。
指标命名规范是什么?
- 点号分隔: 使用点号分隔单词。
- 小写字母: 使用小写字母。
- 描述性名称: 名称应该清楚描述指标的含义。
业务指标示例:
- 订单相关指标: orders.created.total、orders.completed.total、orders.cancelled.total。
- 用户相关指标: users.active、users.registered.total、users.online。
标签(Labels)是什么? 标签用于对指标进行分类,添加维度信息。
指标导出
指标导出是什么? 指标导出用于将 Metrics 发送到 Prometheus,通过 OpenTelemetry Collector 导出。
导出流程: 应用 → OpenTelemetry SDK → OTLP Exporter → Alloy → Prometheus。
本节小结
在本节中,我们学习了 Metrics 收集:自定义业务指标:
第一个是 Meter API。 用于创建和记录 Metrics,提供业务指标收集能力。
第二个是 Counter、Gauge、Histogram。 不同类型的 Metrics,适用于不同场景。
第三个是业务指标设计。 设计有意义的业务指标,遵循指标命名规范。
第四个是指标导出。 将 Metrics 发送到 Prometheus,通过 OpenTelemetry Collector 导出。
Metrics 收集总结: Metrics 收集包括 Meter API(创建 Metrics)、Counter/Gauge/Histogram(不同类型)、业务指标设计(命名规范)、指标导出(Prometheus)。这些功能组合在一起,构成了完整的业务指标收集能力。
这就是 Metrics 收集:自定义业务指标。掌握这些功能,可以收集和分析业务指标。
在下一节,我们将学习 Logs 关联:Trace ID 注入。学习如何将 Trace ID 注入到日志中。