文章目錄
- 一、準備工作
- 二、編寫內存采集代碼
- 三、運行 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 中配置采集目標
這就是一個從 系統指標采集 到 監控可視化 的完整鏈路。