文章目录
- 一、准备工作
- 二、编写内存采集代码
- 三、运行 Exporter
- 四、接入 Prometheus
- 五、可扩展思路
- 总结
在运维和监控领域,资源指标采集 是必不可少的一环。CPU、内存、磁盘、网络这些系统资源,需要实时采集并上报到监控系统中。
本文以 内存指标采集 为例,结合 go-commons 库和 Prometheus Exporter,手把手实现一个完整的采集服务。
一、准备工作
-
安装 Go
确保本地已经安装 Go(推荐 Go 1.20+)。go version
-
拉取 go-commons 依赖
在你的项目目录下执行:go mod init mem-exporter go get github.com/Rodert/go-commons@latest
go-commons
提供了常用的系统资源采集工具,避免了自己造轮子。
二、编写内存采集代码
新建一个 main.go
文件,内容如下:
package mainimport ("fmt""net/http""github.com/prometheus/client_golang/prometheus""github.com/prometheus/client_golang/prometheus/promhttp"commons "github.com/Rodert/go-commons/system"
)// 定义一个 Prometheus Gauge,用于记录内存使用情况
var memoryUsage = prometheus.NewGauge(prometheus.GaugeOpts{Name: "server_memory_usage_bytes",Help: "Current memory usage in bytes",
})func init() {// 注册自定义指标prometheus.MustRegister(memoryUsage)
}func recordMetrics() {go func() {for {mem, err := commons.GetMemoryInfo()if err == nil {// 记录已用内存memoryUsage.Set(float64(mem.Used))}}}()
}func main() {// 启动指标采集recordMetrics()// 启动 HTTP 服务,暴露指标http.Handle("/metrics", promhttp.Handler())fmt.Println("🚀 Memory exporter started at :2112/metrics")http.ListenAndServe(":2112", nil)
}
三、运行 Exporter
在项目根目录下执行:
go run main.go
控制台输出:
🚀 Memory exporter started at :2112/metrics
然后在浏览器或终端访问:
curl http://localhost:2112/metrics
可以看到类似输出:
# HELP server_memory_usage_bytes Current memory usage in bytes
# TYPE server_memory_usage_bytes gauge
server_memory_usage_bytes 823910912
四、接入 Prometheus
在 Prometheus 的 prometheus.yml
配置文件中添加:
scrape_configs:- job_name: "memory_exporter"static_configs:- targets: ["localhost:2112"]
重启 Prometheus 后,就能在监控面板中查看到 server_memory_usage_bytes
指标了。
五、可扩展思路
-
除了内存,还可以采集:
CPU 使用率
磁盘 IO
网络流量
-
配合 Grafana,可以快速做出可视化大屏。
总结
通过本文示例,你学会了:
- 使用
go-commons
快速采集内存指标 - 将指标通过 Prometheus Exporter 暴露
- 在 Prometheus 中配置采集目标
这就是一个从 系统指标采集 到 监控可视化 的完整链路。