Golang Go语言中有什么应用程序状态收集方案,求大家推荐
现在线上的程序逻辑比较复杂,协程较多。有的时候会碰到一些异常问题,需要一个较好的 bug 追踪方案。
目前我们的做法是起一个 safemap,维护一个 map[GoroutineID]map[描述][状态] 的结构,代码中在需要得时候更新这个数据结构,比如开始收集信息、收集信息结束之类得。
需要收集得不光是 error 信息,还可能包含程序某个协程逻辑运行到哪里了。
此功能默认不开启。需要 debug 时通过访问程序得一个 http 接口来开启此功能,然后通过接口获取 safemap 的数据。
现在感觉这种方案太原始了,不知道有没有更好的方案,求大家推荐
谢谢
Golang Go语言中有什么应用程序状态收集方案,求大家推荐
更多关于Golang Go语言中有什么应用程序状态收集方案,求大家推荐的实战教程也可以访问 https://www.itying.com/category-94-b0.html
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中,有多种方案可用于收集应用程序状态,以下是一些推荐的方法:
-
使用runtime/pprof和net/http/pprof包:
- 这两个包提供了强大的性能分析工具,可以生成CPU、内存、阻塞和互斥锁等性能分析数据。
- 可以将性能分析数据暴露为HTTP服务,方便远程访问和分析。
-
go-runtime-metrics库:
- 一个轻量级且易于集成的开源库,专注于收集Go应用程序的运行时指标。
- 支持输出到statsd等统计处理服务,实现数据可视化。
- 通过简单的导入即可激活功能,无需复杂配置。
-
手动调用runtime包中的API:
- 如runtime.StartCPUProfile和runtime.StopCPUProfile等API,可用于按需采集CPU性能数据。
- 这种方法灵活性高,适合定制化的分析需求。
-
结合使用监控和日志系统:
- 将Golang应用程序与监控和日志系统(如Prometheus、Grafana、ELK等)集成。
- 通过监控和日志系统实时收集和分析应用程序的状态信息。
综上所述,Golang中有多种方案可用于收集应用程序状态,具体选择哪种方案取决于您的具体需求和场景。建议根据实际需求进行选择和配置,以实现最佳的应用程序状态监控和分析效果。