生产环境必须用 echo-contrib/prometheus 手动注册:echo-prometheus 默认直方图分桶失配、path 标签未归一化致内存爆炸、不支持自定义标签,而 echo-contrib/prometheus 可显式控制注册与打点,支持自定义指标和关键标签。

直接上 Prometheus 中间件,echo-prometheus 是目前最轻量、侵入最小、且与 Echo v4/v5 兼容性最好的方案。别自己手写指标收集器——HTTP 状态码、延迟直方图、请求计数这些基础维度,它全给你自动埋点好了,只要暴露 /metrics 就能被 Prometheus 抓取。
怎么装和挂载 echo-prometheus 中间件
注意:必须用对应 Echo 主版本的中间件分支。Echo v5 要用 github.com/labstack/echo-prometheus/v5,v4 用 v4 分支,混用会导致 c.Response().Status 拿不到真实状态码。
- 安装命令(以 v5 为例):
go get github.com/labstack/echo-prometheus/v5 - 挂载位置必须在所有路由注册之前,否则中间件拿不到完整路由信息:
e.Use(echo_prometheus.NewMiddleware()) - 默认只暴露
/metrics,如果要改路径,传入echo_prometheus.Config{Path: "/admin/metrics"}
/metrics 返回什么?哪些指标真正有用
它默认导出三类核心指标:
-
http_request_duration_seconds_bucket:按状态码 + 方法 + 路由路径(如/api/v1/users/:id)分组的响应时间直方图,P90/P99 都能算出来 -
http_requests_total:按方法、状态码、路径标签聚合的累计请求数,适合做错误率(rate(http_requests_total{code=~"5.."}[5m]) / rate(http_requests_total[5m])) -
http_request_size_bytes_sum和http_response_size_bytes_sum:进出流量统计,排查大响应体或恶意上传很管用
别信文档里说的“自动加自定义标签”——它默认不带 service_name 或 env,你得手动 wrap 一次:echo_prometheus.NewMiddleware(echo_prometheus.WithLabelValues("my-api", "prod"))。
Echo框架 5.1.0 版本源码包下载,适合关注 RealIP 行为变化、StartConfig.Listener、NewDefaultFS 和观测性中间件入口的开发团队。
常见坑:指标不准、延迟为 0、路径全是 UNKNOWN
这些问题几乎都源于中间件加载时机或路由注册顺序错乱:
- 延迟为 0 或
UNKNOWN路径:说明中间件在e.GET("/users", ...)之后才e.Use(...),导致c.Request().URL.Path还没被路由解析器标准化 - 所有请求都归到
/<.>:你用了正则路由但没配echo_prometheus.WithRouteNameFunc,得自己写个函数把/users/:id映射成固定名 - 状态码永远是 200:你在 handler 里用了
c.JSON(500, ...)但没调return,后续中间件仍会覆盖状态码;必须确保 panic 恢复中间件(middleware.Recover())在 Prometheus 之后挂载
真要加业务指标(比如“下单成功数”),别往 echo-prometheus 里硬塞——用 promauto.NewCounter 单独注册,再在 handler 里 counter.Inc()。混在一起会让指标语义混乱,查问题时根本分不清是框架层还是业务层的问题。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










