Iris v12 内置 iris.Prometheus 插件最轻量可靠,自动监控 HTTP 状态码、响应时间、请求计数,默认暴露 /metrics;需在 app.Run() 前调用 app.Use(),不支持自动采集业务指标,须手动注册 HistogramVec/CounterVec 并规范 label 设计。

直接用 Iris 内置的 Prometheus 插件,配合 /metrics 端点暴露指标,是最轻量、最可靠的方式。别自己写中间件统计请求耗时或错误数——Iris v12 的 iris.Prometheus 已自动覆盖 HTTP 状态码、响应时间、请求计数等核心维度,且与 Grafana 无缝对接。
启用 iris.Prometheus 插件并暴露 /metrics
插件本身不采集业务逻辑指标,只监控 HTTP 层基础行为(如 http_request_duration_seconds、http_requests_total)。它默认监听 /metrics,无需额外路由注册。
- 必须在
app.Run()前调用app.Use(iris.Prometheus()),否则中间件链不生效 - 不要手动注册
GET "/metrics"路由——插件已内置,重复注册会冲突报错panic: route conflict - 若需修改路径(比如改成
/monitor/metrics),得用带配置的初始化:iris.Prometheus(iris.PrometheusOptions{Path: "/monitor/metrics"}) - 暴露的指标默认不含 labels(如
handler或method),如需按控制器/方法拆分,得配合ctx.Values().Set("route_name", "user.Get")+ 自定义 collector,原生插件不支持
如何补全业务级指标(如数据库耗时、消息处理延迟)
Iris 的 Prometheus 插件只管 HTTP 入口,你自己的业务逻辑(比如调用 db.Query()、发送 Kafka 消息)不会被自动打点。这时候得手动用 prometheus.NewHistogramVec 或 NewCounterVec 注册指标,并在关键位置 .Observe() 或 .Inc()。
- 全局注册一次即可,通常放在
main()初始化阶段:dbDuration := prometheus.NewHistogramVec(prometheus.HistogramOpts{Name: "db_query_duration_seconds", Help: "DB query latency"}, []string{"operation"}) - 在 DAO 层执行前记录开始时间,执行后
dbDuration.WithLabelValues("select_user").Observe(time.Since(start).Seconds()) - 注意 label 值不能含动态内容(如用户 ID),否则会导致 cardinality 爆炸;用固定分类(
"select"、"insert")更安全 - 注册完记得调用
prometheus.MustRegister(dbDuration),否则/metrics里看不到该指标
常见错误:指标没出现在 /metrics 或数值恒为 0
不是插件没启,而是指标生命周期或采集时机出了问题。Prometheus 是 pull 模型,它只抓取当前内存中已注册且有值的指标。
- 忘记调用
prometheus.MustRegister(...)→ 指标对象存在但未注册到默认 registry,/metrics完全不显示 - 在 handler 里每次 new 一个
HistogramVec→ 每次都是新对象,旧对象无引用被 GC,Observe()实际写入的是即将消失的实例 - 用
time.Now()计算耗时但没考虑纳秒转秒 →.Observe(time.Since(start).Nanoseconds())写进去了,但单位是纳秒,直观看就是超大数字(比如 12000000000),Grafana 图形会失真 - HTTP 中间件里设了
ctx.Values().Set("start_time", time.Now()),但在后续 handler 里忘了取、忘了.Observe()→ 数据断在半路,指标永远为 0
真正难的不是加几行 Observe(),而是 label 设计和采样粒度:太粗(全归到 handler="unknown")看不出瓶颈,太细(user_id="123456")会让 Prometheus 内存暴涨甚至 OOM。留心 label 值的稳定性,比写代码本身更花时间。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











