Go mod 好菜系列 - 0x0F prometheus/client_golang 这口指标菜该怎么摆上桌

详细聊 Go 项目里的 Prometheus 指标:Counter/Gauge/Histogram 分别适合什么,以及为什么监控不只是“把接口次数打一打”。

当项目开始上线、有人开始盯服务状态时,你会发现光有日志是不够的。日志适合查具体问题,但它不擅长回答“整体现在怎么样”。这时候监控指标就来了,而在 Go 生态里,prometheus/client_golang 是非常常见的一口菜。

它解决的不是日志问题,而是观测问题

比如这些问题,日志不太好直接回答:

  • 接口每分钟多少请求
  • 错误率是不是在升高
  • 耗时分布是否变差
  • 队列堆积是不是越来越多

这些更适合交给指标系统,而不是靠人翻日志拼图。

最常见的三类指标先分清

  • Counter:只增不减,适合总次数
  • Gauge:可升可降,适合当前值
  • Histogram:适合延迟、大小这类分布统计

这三类一旦分不清,后面你写指标时就很容易“虽然看起来有数据,但完全不回答问题”。

Counter 的典型例子

var httpRequests = prometheus.NewCounterVec(
    prometheus.CounterOpts{
        Name: "http_requests_total",
        Help: "Total number of HTTP requests",
    },
    []string{"path", "method", "status"},
)
httpRequests.WithLabelValues("/users", "GET", "200").Inc()

这类指标很适合看总量、错误量、命中次数之类的趋势。

Gauge 的典型例子

var queueSize = prometheus.NewGauge(
    prometheus.GaugeOpts{
        Name: "queue_size",
        Help: "Current queue size",
    },
)

它更适合“当前有多少”的场景,比如队列长度、在线连接数、当前协程数等。

Histogram 是接口监控的常见主力

var httpDuration = prometheus.NewHistogramVec(
    prometheus.HistogramOpts{
        Name:    "http_request_duration_seconds",
        Help:    "HTTP request latency",
        Buckets: prometheus.DefBuckets,
    },
    []string{"path", "method"},
)
start := time.Now()
// handle request
httpDuration.WithLabelValues("/users", "GET").Observe(time.Since(start).Seconds())

这类指标的价值在于:你不只是知道请求花了多久,而是知道“快的有多少、慢的有多少、慢到了什么区间”。

接入 HTTP 暴露端点

http.Handle("/metrics", promhttp.Handler())

这一步会把指标暴露出来,交给 Prometheus 去抓取。也就是说,这个库本身只负责“把数据准备好”,真正的监控平台和告警逻辑是在外面那一层。

指标设计别一上来就标签爆炸

这是很常见的坑。很多人一开始会想:多打点标签,信息不就更全了吗?结果最后 cardinality 爆炸,监控系统本身先吃不消。

比如用户 id、请求参数、订单号,这些高基数标签就很危险。指标是宏观观测工具,不是把日志字段直接搬进来。

小结

prometheus/client_golang 这道菜很适合成熟一点的服务项目:

  • 它解决的是指标观测,不是日志记录
  • Counter、Gauge、Histogram 要分场景用
  • 接口耗时和错误率非常值得做成指标
  • 标签设计要克制,不要把监控做成高基数地雷

下一篇我们补 casbin。有了 JWT 只是知道“你是谁”,权限细则这件事,通常还得靠另一个层次的工具来扛。

Read more

Harness Engineering:从驾驭模型到构建 AI 工厂

Harness Engineering:从驾驭模型到构建 AI 工厂

2026 年,AI 编程工具的竞争焦点发生了根本性转变:决定 AI 助手好不好用的,不再是模型本身,而是包裹在模型外面的那层"Harness"。同一个模型,在不同的 Harness 下,性能差距可以达到 78% vs 42%。 这篇文章将带你深入了解 Harness Engineering——这个正在重新定义 AI 工程实践的新兴领域。 一、什么是 Harness Engineering? Harness 的字面意思是"马具/缰绳"——用来驾驭一匹强壮但不受控的马。在 AI 语境下,Harness 就是 LLM 之外的一切:工具定义、记忆系统、权限模型、反馈循环、文档规范、多

By Fuyu Jia

Claude Code CLI + Ralph:让 AI 自动完成大型编程任务的终极方案

TL;DR 当你的编程任务大到一个 AI 对话窗口装不下时,Ralph 会帮你把任务拆成小块,让 Claude Code CLI 一个接一个地自动完成——每轮都用全新的上下文窗口,不会越写越糊涂。 一、什么是 Ralph? Ralph 是一个开源项目(GitHub 16k+ Stars),基于 Geoffrey Huntley 提出的 "Ralph Pattern" 构建。它的核心理念很简单: 不要让 AI 在一个漫长的会话里做完所有事情,而是把大任务拆成小故事,每个故事用一个全新的 AI 实例来完成。 这解决了 AI 编程中最常见的痛点——上下文窗口耗尽。当对话越来越长,AI 的输出质量会明显下降。Ralph 通过「每轮一个新实例」的方式,

By Fuyu Jia