一个案例带你搞懂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=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四大指标的精髓,赶紧去给你的系统加上监控吧!记住,好的监控不是事后补救,而是未雨绸缪。 🌈

相关推荐
做萤石二次开发的哈哈3 天前
视频解码器怎么对接?解码上墙、电视墙开窗与场景切换的ISAPI接入实战
人工智能·物联网·监控·视频编解码·大屏端·萤石开放平台·蓝海aiot一站式工作台
lisanmengmeng3 天前
nagios 图形化监控部署
监控·nagios
鸿观工坊3 天前
第5篇 Nginx 监控:流量、连接与性能指标
监控
鸿观工坊4 天前
第4篇 Spring Boot 应用监控:Micrometer 与 JVM 指标
监控
鸿观工坊4 天前
第1篇 Prometheus 监控体系全景与基础环境搭建
监控
苏渡苇11 天前
Spring Insight 里如何把 Span 画成瀑布时间线
后端·spring·spring cloud·springboot·监控·apm
行百里er11 天前
轻量级 Spring 监测工具——Spring Insight 发布了
spring boot·后端·监控
宋均浩12 天前
告警规则 243 砍到 27:Prometheus 降噪实战,日均打扰 47 次 → 3 次
云原生·监控·devops
小小ken13 天前
水星摄像头(MIPC552W)双摄版和乔安摄像头(JA-A12,JA-w1)接入easynvr具体步骤
监控·摄像头·nvr·easynvr·水星·乔安
行百里er13 天前
Spring Insight 里如何把 Span 画成瀑布时间线
spring boot·后端·监控