这篇文章我们继续来分享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=ecommerce
、environment=production
和team=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四大指标的精髓,赶紧去给你的系统加上监控吧!记住,好的监控不是事后补救,而是未雨绸缪。 🌈