暴露Go运行时指标需调用prometheus.MustRegister(prometheus.NewGoCollector()),自动输出go_goroutines、go_memstats_alloc_bytes等带标签指标;业务指标须用CounterVec、Gauge、Histogram按场景打点,并通过/metrics端点暴露供Prometheus抓取。

暴露标准运行时指标
Go语言自带的runtime/metrics包和debug模块能直接提供协程数、内存分配、GC暂停时间等关键指标。无需手动埋点,只需注册Prometheus默认收集器即可自动暴露:
- 调用
prometheus.MustRegister(prometheus.NewGoCollector())启用Go运行时指标 - 默认路径
/metrics会输出go_goroutines、go_memstats_alloc_bytes、go_gc_duration_seconds等标准指标 - 这些指标已带完整标签(如
gc_phase="mark"),可直接用于Grafana图表或告警规则
定义业务自定义指标
仅靠运行时指标不够,必须结合业务逻辑打点。推荐使用CounterVec、Gauge和Histogram三类核心指标:
-
请求计数器:用
CounterVec按method、path、status多维统计,例如http_requests_total{method="GET",path="/api/user",status="200"} -
实时状态量:如当前活跃连接数、任务队列长度,用
Gauge可增可减,适合反映瞬时状态 -
耗时分布:用
Histogram自动分桶记录HTTP延迟,生成_sum、_count、_bucket系列指标,支持计算P95/P99
适配Web框架并保护监控端点
在Gin、Echo或GoFrame等框架中,不能直接用http.Handle,需封装为中间件或路由处理器:
- Gin示例:
router.GET("/metrics", func(c *gin.Context) { promhttp.Handler().ServeHTTP(c.Writer, c.Request) }) - 务必添加基础鉴权,比如用
BasicAuth中间件限制/metrics仅内网或运维账号访问 - 避免将监控端点暴露在公网,同时禁用
OPTIONS等非必要方法,防止被恶意探测
对接Prometheus服务与可视化
配置Prometheus抓取目标后,配合Grafana快速搭建看板:
立即学习“go语言免费学习笔记(深入)”;
- Prometheus配置项中设置
scrape_interval: 15s,targets: ['your-go-service:8080'] - Grafana导入现成仪表盘ID,如
1860(Go Runtime Dashboard)或4701(HTTP Metrics) - 关键看板应包含:协程增长趋势、内存分配速率、GC频率与耗时、P95响应延迟、错误率突增检测


















