Golang Go语言中有什么应用程序状态收集方案,求大家推荐

现在线上的程序逻辑比较复杂,协程较多。有的时候会碰到一些异常问题,需要一个较好的 bug 追踪方案。

目前我们的做法是起一个 safemap,维护一个 map[GoroutineID]map[描述][状态] 的结构,代码中在需要得时候更新这个数据结构,比如开始收集信息、收集信息结束之类得。

需要收集得不光是 error 信息,还可能包含程序某个协程逻辑运行到哪里了。

此功能默认不开启。需要 debug 时通过访问程序得一个 http 接口来开启此功能,然后通过接口获取 safemap 的数据。

现在感觉这种方案太原始了,不知道有没有更好的方案,求大家推荐

谢谢
Golang Go语言中有什么应用程序状态收集方案,求大家推荐


更多关于Golang Go语言中有什么应用程序状态收集方案,求大家推荐的实战教程也可以访问 https://www.itying.com/category-94-b0.html

4 回复

goroutine 的堆栈信息 pprof 就能看到了吧

更多关于Golang Go语言中有什么应用程序状态收集方案,求大家推荐的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


查了查 net/http/pprof 这个库,能满足我们一部分得需求,我详细看看


谢谢~

函数返回 err 的时候包装一下嵌入调用栈信息即可. 最后打 log https://github.com/hanjm/errors http 服务打日志时带上 requestID

在Golang中,有多种方案可用于收集应用程序状态,以下是一些推荐的方法:

  1. 使用runtime/pprof和net/http/pprof包

    • 这两个包提供了强大的性能分析工具,可以生成CPU、内存、阻塞和互斥锁等性能分析数据。
    • 可以将性能分析数据暴露为HTTP服务,方便远程访问和分析。
  2. go-runtime-metrics库

    • 一个轻量级且易于集成的开源库,专注于收集Go应用程序的运行时指标。
    • 支持输出到statsd等统计处理服务,实现数据可视化。
    • 通过简单的导入即可激活功能,无需复杂配置。
  3. 手动调用runtime包中的API

    • 如runtime.StartCPUProfile和runtime.StopCPUProfile等API,可用于按需采集CPU性能数据。
    • 这种方法灵活性高,适合定制化的分析需求。
  4. 结合使用监控和日志系统

    • 将Golang应用程序与监控和日志系统(如Prometheus、Grafana、ELK等)集成。
    • 通过监控和日志系统实时收集和分析应用程序的状态信息。

综上所述,Golang中有多种方案可用于收集应用程序状态,具体选择哪种方案取决于您的具体需求和场景。建议根据实际需求进行选择和配置,以实现最佳的应用程序状态监控和分析效果。

回到顶部