一个案例带你搞懂Prometheus指标类型(下)

这篇文章我们继续来分享Prometheus的四大指标类型,经过了上一篇文章的讲解,我们已经搭建好了项目,现在就开始配置Prometheus,让它能够从我们的项目运行过程中拉取监控数据。

⚙️ 配置示例

Prometheus配置 (prometheus.yml)

prometheus.yml是Prometheus的默认配置文件,如果想使用其他配置文件启动,则需要在启动命令中指定--config.file=xxx

yaml 复制代码
global:
  scrape_interval: 15s     # 全局抓取间隔
  evaluation_interval: 15s # 规则评估间隔

scrape_configs:
  # 电商订单系统监控
  - job_name: 'ecommerce-order-system'
    static_configs:
      - targets: ['localhost:8080']
        labels:
          service: 'ecommerce'
          environment: 'production'
          team: 'backend'
    scrape_interval: 10s  # 业务系统需要更频繁的监控
    metrics_path: /metrics
    scrape_timeout: 5s
    metric_relabel_configs:
      - source_labels: [__name__]
        regex: 'ecommerce_.*'
        target_label: 'business'
        replacement: 'ecommerce'
      - source_labels: [status_code]
        target_label: 'http_status'

该配置定义了Prometheus对电商订单系统(localhost:8080/metrics)的高频监控任务(每10秒抓取一次)。所有指标自动添加service=ecommerceenvironment=productionteam=backend标签,并通过动态重标记实现关键增强:

1.为ecommerce_开头的指标添加business=ecommerce业务标签

2.将原始status_code标签重命名为更直观的http_status标签

便于后续按业务维度和HTTP状态进行精细化监控分析。

🚀 项目运行与测试

bash 复制代码
# 1. 启动电商订单系统
go run main.go

# 2. 启动Prometheus(需要先安装)
prometheus --config.file=prometheus.yml

# 3. 访问监控端点
curl http://localhost:8080/metrics

🔍 PromQL查询示例

我们在修改完配置文件后启动Prometheus,端口号默认为9090,打开后会是这个样子:

查询的话就直接在输入框输入相关的promQL进行查询。

1)Counter指标查询
promql 复制代码
# 📈 订单总量趋势
ecommerce_orders_total

# 📊 订单成功率
rate(ecommerce_orders_total{status="success"}[5m]) / rate(ecommerce_orders_total[5m]) * 100

# 🚀 每秒订单创建速率
rate(ecommerce_orders_total[1m])

# 💳 不同支付方式的订单分布
sum by (payment_method) (ecommerce_orders_total)

在Prometheus中查询:

切换成图表视图:

业务意义

  • 监控业务增长趋势
  • 计算转化率和成功率
  • 实时监控业务流量
2)Gauge指标查询
promql 复制代码
# 📦 当前库存状态
ecommerce_inventory_stock

# ⚠️ 库存不足的商品
ecommerce_inventory_stock < 20

# 📊 库存总价值(假设单价100元)
sum(ecommerce_inventory_stock) * 100

# 🔄 库存变化趋势
delta(ecommerce_inventory_stock[1h])

业务意义

  • 实时库存监控
  • 补货预警
  • 资产价值评估
3)Histogram指标查询
promql 复制代码
# ⏱️ API响应时间分位数
histogram_quantile(0.95, rate(ecommerce_api_duration_seconds_bucket[5m]))
histogram_quantile(0.99, rate(ecommerce_api_duration_seconds_bucket[5m]))

# 📊 不同接口的性能对比
histogram_quantile(0.95, rate(ecommerce_api_duration_seconds_bucket[5m])) by (endpoint)

# 🚨 慢请求比例(>1秒)
sum(rate(ecommerce_api_duration_seconds_bucket{le="1"}[5m])) / sum(rate(ecommerce_api_duration_seconds_count[5m])) * 100

# 📈 平均响应时间
rate(ecommerce_api_duration_seconds_sum[5m]) / rate(ecommerce_api_duration_seconds_count[5m])

业务意义

  • SLA监控(99%请求<1秒)
  • 性能优化指导
  • 用户体验评估
4)Summary指标查询
promql 复制代码
# 💰 订单金额分位数
ecommerce_order_amount_yuan{quantile="0.5"}   # 中位数
ecommerce_order_amount_yuan{quantile="0.9"}   # 90分位数
ecommerce_order_amount_yuan{quantile="0.99"}  # 99分位数

# 👑 VIP用户vs普通用户订单金额对比
ecommerce_order_amount_yuan{quantile="0.9"} by (user_type)

# 📊 平均订单金额
rate(ecommerce_order_amount_yuan_sum[5m]) / rate(ecommerce_order_amount_yuan_count[5m])

# 🎯 大额订单监控(>5000元)
ecommerce_order_amount_yuan{quantile="0.95"} > 5000

业务意义

  • 用户价值分析
  • 定价策略优化
  • 风险控制

🎯 最佳实践

指标命名规范

go 复制代码
// ✅ 好的命名
ecommerce_orders_total          // 业务前缀 + 指标名 + 单位
ecommerce_inventory_stock       // 清晰的业务含义
ecommerce_api_duration_seconds  // 包含单位信息

// ❌ 不好的命名
orders                          // 太简单
total_orders_created_today      // 太具体
api_time                        // 缺少单位

标签使用技巧

go 复制代码
// ✅ 合理的标签基数
orderTotal.WithLabelValues("success", "alipay")  // 状态 × 支付方式 = 6种组合

// ❌ 高基数标签(会导致内存爆炸)
orderTotal.WithLabelValues(userID, orderID)     // 用户ID × 订单ID = 无限组合

指标选择指南

场景 推荐指标 原因
计数类(订单、错误) Counter 累计值,支持rate()计算
状态类(库存、连接数) Gauge 瞬时值,可增可减
性能类(延迟、大小) Histogram 可聚合,支持分位数
业务类(金额、评分) Summary 精确分位数

性能优化

go 复制代码
// ✅ 预先创建指标实例
var orderSuccessCounter = orderTotal.WithLabelValues("success", "alipay")

func processOrder() {
    // 直接使用,避免重复WithLabelValues调用
    orderSuccessCounter.Inc()
}

// ✅ 使用合理的Histogram桶
prometheus.HistogramOpts{
    Buckets: []float64{0.01, 0.05, 0.1, 0.5, 1, 2, 5}, // 根据业务调整
}

🎉 总结

通过这个电商订单系统案例,我们深入了解了Prometheus四大指标的特性和应用场景:

Counter,像里程表,记录累计值 🚗

Gauge - 像温度计,反映当前状态 🌡️

Histogram - 像成绩分布图,分析性能 📊

Summary - 像排行榜,精确分位数 🏆

记住这个口诀:Counter计数累加不回头,Gauge状态上下都自由。Histogram分桶看分布,Summary分位更精准。

选择指标的决策树:

css 复制代码
需要监控什么?
├── 计数类(订单、请求、错误)→ Counter
├── 状态类(库存、内存、连接)→ Gauge
├── 性能类(延迟、大小、时长)
│   ├── 需要聚合多实例?→ Histogram
│   └── 需要精确分位数?→ Summary
└── 业务类(金额、评分、满意度)→ Summary

现在你已经掌握了Prometheus四大指标的精髓,赶紧去给你的系统加上监控吧!记住,好的监控不是事后补救,而是未雨绸缪。 🌈

相关推荐
云游7 小时前
大模型性能指标的监控系统(prometheus3.5.0)和可视化工具(grafana12.1.0)基础篇
grafana·prometheus·可视化·监控
可观测性用观测云2 天前
OpenTelemetry WebSocket 监控终极方案:打通最后一公里
监控
可观测性用观测云4 天前
观测云接收 OpenTelemetry Collector 数据最佳实践
监控
SRETALK5 天前
夜莺开源监控,模板函数一览
运维·监控·自动化运维
可观测性用观测云9 天前
使用观测云打造企业级监控告警中心
监控
可观测性用观测云11 天前
DataKit 采集器敏感信息加密最佳实践
监控
可观测性用观测云23 天前
Undertow 可观测性最佳实践
监控