Go 微服务监控告警:业务指标 vs 系统指标分层方案
监控不是 metrics 列表,而是按层次梳理的策略。本文按 L7 应用 / L4 通道 / L3 基础设施分层讲透 Go 服务监控。
一、三层监控原则
- 业务指标(L7):订单数、登录数、失败率
- 应用指标(L6):QPS、延迟、错误率
- 系统指标(L5):CPU、内存、GC、goroutine
二、业务指标案例
订单服务:
varordersSuccess=prometheus.NewCounterVec(prometheus.CounterOpts{Name:"biz_orders_success_total"},[]string{"biz","channel"},)varordersFail=prometheus.NewCounterVec(prometheus.CounterOpts{Name:"biz_orders_fail_total"},[]string{"biz","channel","reason"},)业务侧"failure reason"枚举要有限。
三、应用指标:USE 原则
- Utilization:资源占用
- Saturation:饱和度
- Errors:错误次数
Go runtime 指标都有:
go_goroutines:活跃 goroutinego_memstats_heap_inuse_bytes:堆使用process_cpu_seconds_total:进程占用
四、RED 原则
- Rate:每秒请求数
- Errors:错误数
- Duration:响应时长
三者综合代表一个服务的健康度。
五、Aggregation 关键技巧
varhttpDuration=prometheus.NewHistogramVec(prometheus.HistogramOpts{Name:"http_duration_seconds",Buckets:[]float64{.005,.01,.025,.05,.1,.25,1,2.5,5,10},},[]string{"method","route","status"},)Buckets 决定 p99 计算。
六、多 Label 引起的维度爆炸
requestCount.WithLabelValues("GET","/a","200").Inc()requestCount.WithLabelValues("GET","/a","404").Inc()// 大量路由 + 大量 status 时,TSDB 内存爆炸解决:
- 限制 status 到 4xx/5xx/2xx 大类
- 路由拆分相似业务到 service_name label
七、慢调用追踪
histogram + trace 联动:
start:=time.Now()deferfunc(){httpDuration.WithLabelValues(...).Observe(time.Since(start).Seconds())}()1s 以上的慢查询,记到 trace 系统进一步分析。
八、灰度指标
requestCount.WithLabelValues(method,route,status,version).Inc()通过 version label 区分 v1 v2 的性能。
九、跨服务链路指标
每个 service 都统计依赖的服务接口:
vardepLatency=prometheus.NewHistogramVec(prometheus.HistogramOpts{Name:"dep_call_duration_seconds"},[]string{"target","method"},)A→B 调用延迟。
十、Alerting 策略
-alert:HighErrorRateexpr:sum(rate(http_total{status=~"5.."}[5m]))/sum(rate(http_total[5m]))>0.05for:1m-alert:GoroutineSurgeexpr:go_goroutines>10000针对每个 service 自定义规则。
十一、生产实战:指标分层
| 层次 | 采集方式 | 频率 | 存储 |
|---|---|---|---|
| 业务 | 显式埋点 | 100% | TSDB |
| 应用 | 中间件 | 100% | TSDB |
| 系统 | runtime | 100% | TSDB |
| 网络 | sidecar | 100% | TSDB |
| Trace | OTel SDK | 5% | trace store |
十二、踩坑清单
- Counter 重置:32-bit 下 4.29B 上限 → 1.6y QPS 50% 写满 → 用 64-bit
- Histogram bucket 错过:p95 跨 bucket 边界精度差
- export 失败处理:promhttp export 失败不影响业务
十三、总结与展望
业务指标 + RED + USE 三大原则是监控核心。Go 端用client_golang体系完善,配合 OTel 编织体系。
未来:AI Ops + Observability = 自动告警 + 异常检测 + 自动 RCA(根因分析)。
十四、参考文献
- USE method (Brendan Gregg)
- Google SRE Book
- prometheus 官方 docs