Go服务监控

本文涉及的产品
EMR Serverless StarRocks,5000CU*H 48000GB*H
可观测监控 Prometheus 版,每月50GB免费额度
简介: Go服务监控

使用Golang可以开发出高性能的HTTP、GRPC服务。一般项目运行后,我们也需要监控服务的性能或者进行调试。除了打日志,还有没有其他可视化的方案呢?答案是有的。

本文将会介绍几种常用的监控方案。

pprof

这个是go语言自带的。启用很简单:

_ "net/http/pprof"

仅需显式的在 main 包的 import 里增加上面一行即可。完整使用示例:

package main
 
import (
    "net/http"
    _ "net/http/pprof"
)
 
func main(){
    //提供给负载均衡探活以及pprof调试
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        w.Write([]byte("ok"))
    })
 
    http.ListenAndServe(":10108", nil)
}

运行之后,在浏览器打开 http://127.0.0.1:10108/debug/pprof/就能看到监控的一些信息了:

注:生产环境一般不会按上面那么写,都是开个协程:

go http.ListenAndServe(":10108", nil)

如何启动 PProf 可视化界面?

需要graphviz支持,可以到 http://www.graphviz.org/download/ 下载,并把bin加入到环境变量。Mac可以使用brew安装。

下面以heap为例:

方法一:

go tool pprof -http=:8081 http://localhost:10108/debug/pprof/heap

方法二:

go tool pprof http://localhost:10108/debug/pprof/heap

然后在交互式命令行输入web即可跳转到默认浏览器:

查看协程信息:

go tool pprof -http=:8081 http://localhost:10108/debug/pprof/goroutine

debugcharts

一个可以实时查看golang程序内存、CPU、GC、协程等变化情况的可视化工具。

跟pprof一样, import引入, 然后开端口监听就行了:

_ "github.com/mkevac/debugcharts"
//省略其它代码...
http.ListenAndServe(":10108", nil)

运行后,浏览器打开 http://localhost:10108/debug/charts/ 就能看到了:

prometheus

prometheus是grafana的插件,支持go监控的可视化。

首先需要代码里引入包:

"github.com/prometheus/client_golang/prometheus/promhttp"

然后增加路由:

//prometheus
http.Handle("/metrics", promhttp.Handler())
http.ListenAndServe(":10108", nil)

配置grafana后,效果图:

一个端口开启 pprof+charts+prometheus

如果每一个监控都开一个端口就有点浪费端口了。可以在一个端口里开启 pprof+charts+prometheus 。

1、入口文件增加代码:

//监控
go func() {
   //提供给负载均衡探活
   http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
      w.Write([]byte("ok"))
 
   })
 
   //prometheus
   http.Handle("/metrics", promhttp.Handler())
 
   //pprof, go tool pprof -http=:8081 http://$host:$port/debug/pprof/heap
   http.ListenAndServe(":10108", nil)
}()

2、import增加

_ "github.com/mkevac/debugcharts"
"github.com/prometheus/client_golang/prometheus/promhttp"
"net/http"
_ "net/http/pprof"

参考

1、Golang pprof详解

https://studygolang.com/articles/14519

2、mkevac/debugcharts: Very simple charts with some debug data for Go programs

https://github.com/mkevac/debugcharts

3、prometheus/client_golang: Prometheus instrumentation library for Go applications

https://github.com/prometheus/client_golang/

相关文章
|
2天前
|
Go
go创建web服务
go创建web服务
17 4
|
4天前
|
存储 中间件 Go
在go语言服务中封装路由和示例
【6月更文挑战第23天】本文介绍golang后端按协议处理、中间件(一次性与每次请求执行)划分、以及服务架构Controller、Logic/Service、DAO/Repository和Routers划分。代码仓库在GitHub上提供。使用框架简化了交互和处理。后续章节深入探讨服务构建。
104 5
在go语言服务中封装路由和示例
|
8天前
|
监控 Go
go语言并发实战——日志收集系统(十) 重构tailfile模块实现同时监控多个日志文件
go语言并发实战——日志收集系统(十) 重构tailfile模块实现同时监控多个日志文件
|
8天前
|
监控 Go
go语言并发实战——日志收集系统(八) go语言操作etcd以及利用watch实现对键值的监控
go语言并发实战——日志收集系统(八) go语言操作etcd以及利用watch实现对键值的监控
go语言并发实战——日志收集系统(八) go语言操作etcd以及利用watch实现对键值的监控
|
8天前
|
消息中间件 Kafka Go
go语言并发实战——日志收集系统(五) 基于go-ini包读取日志收集服务的配置文件
go语言并发实战——日志收集系统(五) 基于go-ini包读取日志收集服务的配置文件
|
8天前
|
网络协议 算法 Go
使用go的内置的基础路由服务
【6月更文挑战第19天】本文探索Go的HTTP服务:基础路由与多路复用。基础服务示例绑定到`:http`,返回非零错误。多路复用允许按URL模式匹配请求,长路径优先,注册时考虑主机名。错误路径重定向至根。代码示例见:https://github.com/hahamx/examples/tree/main/tcps/2_with_http_handler
100 6
|
19天前
|
缓存 Java Go
如何用Go语言构建高性能服务
【6月更文挑战第8天】Go语言凭借其并发能力和简洁语法,成为构建高性能服务的首选。本文关注使用Go语言的关键设计原则(简洁、并发、错误处理和资源管理)、性能优化技巧(减少内存分配、使用缓存、避免锁竞争、优化数据结构和利用并发模式)以及代码示例,展示如何构建HTTP服务器。通过遵循这些原则和技巧,可创建出稳定、高效的Go服务。
|
21天前
|
关系型数据库 Go 开发工具
|
1月前
|
缓存 负载均衡 网络协议
使用Go语言开发高性能服务的深度解析
【5月更文挑战第21天】本文深入探讨了使用Go语言开发高性能服务的技巧,强调了Go的并发性能、内存管理和网络编程优势。关键点包括:1) 利用goroutine和channel进行并发处理,通过goroutine池优化资源;2) 注意内存管理,减少不必要的分配和释放,使用pprof分析;3) 使用非阻塞I/O和连接池提升网络性能,结合HTTP/2和负载均衡技术;4) 通过性能分析、代码优化、缓存和压缩等手段进一步提升服务性能。掌握这些技术能帮助开发者构建更高效稳定的服务。
|
1月前
|
Prometheus 监控 Cloud Native
Golang深入浅出之-Go语言中的分布式追踪与监控系统集成
【5月更文挑战第4天】本文探讨了Go语言中分布式追踪与监控的重要性,包括追踪的三个核心组件和监控系统集成。常见问题有追踪数据丢失、性能开销和监控指标不当。解决策略涉及使用OpenTracing或OpenTelemetry协议、采样策略以及聚焦关键指标。文中提供了OpenTelemetry和Prometheus的Go代码示例,强调全面可观测性对微服务架构的意义,并提示选择合适工具和策略以确保系统稳定高效。
160 5