别再只盯着CPU和内存了:用Prometheus + Grafana把业务真正跑起来的样子画出来

简介: 别再只盯着CPU和内存了:用Prometheus + Grafana把业务真正跑起来的样子画出来

别再只盯着CPU和内存了:用Prometheus + Grafana把业务真正跑起来的样子画出来

大家好,我是Echo_Wish。

干运维这些年,我见过太多团队把监控做成了“机器体检报告”。CPU红了就报警,内存高了就扩容,磁盘满了就清理。看起来很专业,结果业务出问题的时候,大家还是一脸懵:用户到底卡在哪一步?支付成功率掉了多少?哪个接口把整个链路拖死了?

监控如果只盯着基础设施,那就永远是“事后诸葛亮”。真正有用的,是把业务链路端到端地可视化出来——从用户点开页面,到接口调用,再到数据库、缓存、消息队列,最后到业务结果,整条链路清清楚楚。

今天我就用Prometheus + Grafana,带你把这套东西真正落地。不是讲概念,是直接给你能跑的示例。

先想清楚:你到底要监控什么?

很多人一上来就装Exporter、写查询,结果仪表盘越堆越乱。我的建议是反过来:先问自己三个问题。

  1. 用户最关心的业务结果是什么?(下单成功、支付完成、内容加载)
  2. 这个结果依赖哪几条关键路径?
  3. 哪几个数字掉了,会立刻影响收入或体验?

把这三个问题答清楚,你要采集的指标自然就出来了。不要一开始就追求“全量”,先把核心业务链路画清楚。

我个人的习惯是:先画一张业务流程图,再在图上标出需要打点的地方。这样Prometheus里的指标才有意义,Grafana的面板也不会变成数字堆砌。

架构很简单,关键在“业务指标”

技术栈就三样:

  • 业务服务自己暴露 /metrics(用Prometheus client库)
  • Prometheus负责拉取和存储
  • Grafana做查询和可视化

重点不是装多少Exporter,而是业务代码里主动上报有意义的指标。

下面用一个简化的电商下单接口举例。假设用Go写(其他语言差不多,思路一样)。

package main

import (
    "net/http"
    "time"

    "github.com/prometheus/client_golang/prometheus"
    "github.com/prometheus/client_golang/prometheus/promhttp"
)

var (
    orderTotal = prometheus.NewCounterVec(
        prometheus.CounterOpts{
   
            Name: "business_order_total",
            Help: "下单请求总数",
        },
        []string{
   "status", "channel"},
    )

    orderDuration = prometheus.NewHistogramVec(
        prometheus.HistogramOpts{
   
            Name:    "business_order_duration_seconds",
            Help:    "下单接口耗时",
            Buckets: []float64{
   0.05, 0.1, 0.2, 0.5, 1, 2, 5},
        },
        []string{
   "status"},
    )

    paymentSuccess = prometheus.NewCounter(
        prometheus.CounterOpts{
   
            Name: "business_payment_success_total",
            Help: "支付成功次数",
        },
    )
)

func init() {
   
    prometheus.MustRegister(orderTotal, orderDuration, paymentSuccess)
}

func createOrderHandler(w http.ResponseWriter, r *http.Request) {
   
    start := time.Now()
    status := "success"
    channel := r.URL.Query().Get("channel")
    if channel == "" {
   
        channel = "app"
    }

    // 模拟业务逻辑
    // ... 校验库存、创建订单、调用支付 ...

    // 假设支付成功
    paymentSuccess.Inc()

    orderTotal.WithLabelValues(status, channel).Inc()
    orderDuration.WithLabelValues(status).Observe(time.Since(start).Seconds())

    w.Write([]byte(`{"code":0,"msg":"ok"}`))
}

func main() {
   
    http.Handle("/metrics", promhttp.Handler())
    http.HandleFunc("/order/create", createOrderHandler)
    http.ListenAndServe(":8080", nil)
}

这段代码做了三件事:

  • 记录下单总量(带状态和渠道)
  • 记录耗时分布
  • 单独记支付成功数

有了这些,你就可以算成功率、P99耗时、不同渠道的转化差异。这比单纯看CPU有用多了。

Prometheus这边怎么配

配置很常规,但有个细节我强烈建议做好:按业务而不是按机器分组。

global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'business-order'
    static_configs:
      - targets: ['order-service-1:8080', 'order-service-2:8080']
    metrics_path: /metrics
    relabel_configs:
      - source_labels: [__address__]
        target_label: instance

如果你用K8s,建议直接用ServiceMonitor或者Pod注解,让Prometheus自动发现。手动写targets很快就会崩溃。

另外,别把所有指标都默认拉15秒一次。高频业务可以更密一点,低频的可以拉长。资源是有成本的,尤其是Histogram。

Grafana仪表盘怎么设计才不瞎

很多人的Grafana面板是“指标堆砌”,看起来很满,实际看不出问题。我推荐按业务视角分层:

第一层:业务结果总览

  • 今日下单量
  • 支付成功率
  • 核心接口P99
  • 错误率

用大数字(Stat)+ 趋势线(Time series)就够了。

成功率可以这样算:

sum(rate(business_payment_success_total[5m])) 
/ 
sum(rate(business_order_total{status="success"}[5m]))

第二层:链路拆解

把下单链路拆成几个阶段:创建订单 → 库存校验 → 支付 → 通知。每个阶段单独看耗时和失败率。这样出问题的时候,一眼就能定位是哪个环节慢了。

第三层:渠道和版本对比

不同渠道(App、小程序、H5)、不同版本的成功率、耗时差异。很多“突然变慢”其实是某个渠道或某个灰度版本出了问题。

我个人有个小习惯:每个重要面板都加一个“业务影响说明”。比如成功率掉到99%以下时,旁边直接写“预计影响订单量约X单/小时”。这样值班的人看到数字,马上知道严重程度,而不是还要再算一遍。

几个容易踩的坑

  1. 指标命名太随意
    后来你会发现查都查不出来。建议统一前缀,比如 business_ 开头,标签尽量少而准。

  2. Cardinality爆炸
    别把用户ID、订单号这类高基数东西塞进标签。Prometheus会直接被打爆。高基数用日志或者专门的链路追踪系统。

  3. 只看平均值
    平均值会骗人。一定要看分位数(P95、P99),再配合成功率。

  4. 仪表盘没有“故事线”
    好的仪表盘是有阅读顺序的:先看结果,再看链路,最后看细节。不要一上来就甩几十个图。

写在最后

Prometheus + Grafana本身不难,难的是你有没有真正站在业务的角度去想“用户到底卡在哪”。

很多团队监控做得很全,业务一出问题还是靠“感觉”和“猜”。根子在于监控对象错了。机器指标是基础,但真正能让你晚上睡得着的,是那些直接反映业务健康的数字。

我自己现在做新系统,第一件事不是先装Node Exporter,而是先跟产品、开发一起把核心业务指标定义清楚。这个习惯帮我省了无数次半夜被叫醒后的无效排查。

监控不是装一堆工具,而是把“业务正在发生什么”这件事,用数字和图表讲清楚。

你最近有在做业务监控相关的改造吗?或者手头有哪个指标怎么也算不准的,欢迎直接丢出来聊聊。

目录
相关文章
|
5天前
|
JavaScript API iOS开发
DeepSeek Harness下载、安装、配置一篇搞定(2026整理,送常用插件)
DeepSeek Harness(DSH)是DeepSeek于2026年开源的MIT协议AI Agent框架,支持插件化组装模型、工具、沙箱与UI,兼容主流大模型。本文提供免Node.js的桌面端安装包(Win/macOS),含详细图文教程及热门插件推荐。
2524 21
|
6天前
|
iOS开发 Docker MacOS
【2026实测】Docker Desktop下载、安装、汉化、配置教程(附官网安装包)
Docker Desktop 是 Docker 官方推出的桌面容器管理工具,集成引擎、CLI、图形界面与 Kubernetes,支持 Win/macOS/Linux。2026 最新版 4.88.1 强化 ARM 原生运行、镜像加速及资源可视化,附中文汉化与国内镜像配置指南。
1100 3
|
云安全 安全 网络安全
|
5天前
|
Linux 开发工具 iOS开发
Codex保姆级教程(下载+安装+登录+使用,含所有版本,2026最新)
Codex是OpenAI推出的开源AI编程智能体,本地运行,可理解整个代码库,支持自然语言指令改代码、执行命令、跑测试、修Bug,兼容Win/macOS/Linux。(239字)
|
6天前
|
安全 算法 定位技术
《高性价比人生指南》完整原版:普通人用最少的资源,过好这一生的底层逻辑~How To Live Better
📖《高性价比人生指南》是一份基于实证、拒绝焦虑的生存手册,倡导以“人生时薪”为视角,重新计算时间、金钱与精力的成本与收益。它不承诺逆袭,只教人算清账:省下的钱若耗掉时间便亏;买体验比买物品更值;睡眠是最高杠杆的健康投资;关系贵在情绪价值而非表面热络;学习重在改变行为而非自我安慰。核心理念:用低成本、高回报的微小行动,换取长期的选择权——不是成为谁,而是掌控自己人生的主动权。
|
19天前
|
人工智能 API 开发工具
DeepSeek Harness 神插件:白嫖 13 家大厂模型
`dsh-our-free-model` 是 DeepSeek Harness 神级插件:零配置、零API Key、零账号,聚合13家大厂免费模型(含DeepSeek V4.1 Flash、Kimi K3等),支持本地网关、用量看板与自动降级,真正实现“白嫖即用”。
3256 51
|
12天前
|
JavaScript 安全 前端开发
Nodejs Brotli decoder 代码执行漏洞 (CVE-2026-111497)10629
Node.js发布安全更新修复Brotli解码器高危RCE漏洞(CVE-2026-111497),建议受影响版本用户立即升级。
2122 2
|
11天前
|
人工智能 JSON Linux
【保姆级】ComfyUI部署教程(下载+安装+配置+工作流,2026最新)
ComfyUI 是一款开源节点式AI生成工具,支持图像、视频、音频及3D内容创作。通过拖拽连线组合模型加载、提示词、采样等节点,构建可复用、易修改的工作流,兼容SD1.5、SDXL、Flux、Qwen Image等主流模型。

热门文章

最新文章