登录
首页 >  Golang >  Go教程

Go runtime/metrics 与 expvar:低成本暴露运行时状态

来源:Golang学习网专题原创

时间:2026-06-12 10:38:50 595浏览 收藏

所属专题:Go 微服务可观测性与故障排查实战

有些内部状态还没接入完整 Prometheus 指标体系,但线上排查又需要临时观察,例如构建版本、队列长度、开关状态、缓存命中统计。

Go runtime/metrics 与 expvar:低成本暴露运行时状态 思维导图

解决方案思路

runtime/metrics 用于读取 Go 运行时指标,expvar 用于暴露少量 JSON 状态。它们适合做轻量诊断入口,但生产环境必须加访问控制,并避免输出敏感数据。

Go runtime/metrics 与 expvar:低成本暴露运行时状态 代码讲解图

核心代码示例

samples := []metrics.Sample{{Name: "/sched/goroutines:goroutines"}}
metrics.Read(samples)
expvar.Publish("build_info", expvar.Func(func() any {
    return map[string]string{"version": version}
}))

Go runtime/metrics 与 expvar:低成本暴露运行时状态 运行逻辑图

运行逻辑

Go runtime 持续维护调度、内存和 GC 状态,采集函数定时读取后暴露给 /debug/vars 或转换为 Prometheus 指标。异常上升时再进入 pprof 或 trace。

重点观察指标

  • goroutines 数量、heap classes、GC pause
  • 队列长度、缓存状态、构建版本
  • /debug/vars 访问频率和异常字段

常见误区

  • 把 expvar 当正式业务 API 使用
  • 暴露内部敏感配置
  • 指标名频繁变化导致看板失效

参考方案

落地检查

  • 字段、指标和 Span 名称要稳定,便于长期聚合。
  • 上线前先在灰度环境验证采集成本和数据量。
  • 告警必须能指向 owner、排查入口和回滚方案。
声明:本文转载于:Golang学习网专题原创 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>