使用 Go 和 go-commons 實現內存指標采集并對接 Prometheus

在這里插入圖片描述

文章目錄

    • 一、準備工作
    • 二、編寫內存采集代碼
    • 三、運行 Exporter
    • 四、接入 Prometheus
    • 五、可擴展思路
    • 總結

在運維和監控領域,資源指標采集 是必不可少的一環。CPU、內存、磁盤、網絡這些系統資源,需要實時采集并上報到監控系統中。
本文以 內存指標采集 為例,結合 go-commons 庫和 Prometheus Exporter,手把手實現一個完整的采集服務。


一、準備工作

  1. 安裝 Go
    確保本地已經安裝 Go(推薦 Go 1.20+)。

    go version
    
  2. 拉取 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,可以快速做出可視化大屏。


總結

通過本文示例,你學會了:

  1. 使用 go-commons 快速采集內存指標
  2. 將指標通過 Prometheus Exporter 暴露
  3. 在 Prometheus 中配置采集目標

這就是一個從 系統指標采集監控可視化 的完整鏈路。

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/98021.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/98021.shtml
英文地址,請注明出處:http://en.pswp.cn/web/98021.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

webrtc弱網-IntervalBudget類源碼分析與算法原理

一、核心功能 IntervalBudget 類用于基于時間窗口的帶寬預算管理。它根據設定的目標比特率(kbps)和一個固定時間窗口(500ms),計算在該時間窗口內可用的字節數(即“預算”),并支持預…

深度學習基本模塊:RNN 循環神經網絡

循環神經網絡(RNN)是一種專門用于處理序列數據的神經網絡架構。與處理空間數據的卷積神經網絡(Conv2D)不同,RNN通過引入循環連接使網絡具有"記憶"能力,能夠利用之前的信息來影響當前的輸出&#…

React18學習筆記(二) React的狀態管理工具--Redux,案例--移動端外賣平臺

文章目錄一.Redux的基礎用法1.示例:普通網頁中的Redux計步器2.Redux管理數據的流程3.配套工具和環境準備3.1.配套工具3.2.環境準備4.示例:React項目中的Redux計步器思路步驟step1:創建子模塊step2:導入子模塊step3:注入store實例step4:React組件內使用store中的數據step5:在組件…

34.Socket編程(UDP)(上)

點分十進制字符串IP 轉 32位網絡序列IP 分析:1)IP轉成4字節 2)4字節轉成網絡序列 思路: "192.168.1.1" 進行字符串劃分,以 "." 為分割符,分割出"192",&qu…

Redis的持久化工具包—RDB AOF

文章目錄 前言 一、RDB 持久化(快照持久化) 1. 定義 2. RDB 觸發機制 (1)手動觸發 (2)自動觸發 3. RDB 持久化流程 4. RDB 核心配置 5. RDB 優缺點 二、AOF 持久化(日志持久化) 1. 定…

【Web安全】XXL-JOB框架SRC高頻漏洞分析總結

文章目錄前言一、核心漏洞分類與技術細節二、漏洞關聯利用與攻擊路徑三、版本演進與修復策略四、安全運維建議五、典型漏洞復現環境搭建六、總結前言 XXL-JOB是國內主流的開源分布式任務調度框架,由徐雪里開發維護,以輕量易用、高可用、適配分布式場景等…

Capacitor 打包后接口訪問不到的排查經歷

我最近在用 Quasar Capacitor 6 做一個 Android App,前端用的是 Vue3 Quasar,打包交給 Capacitor 去跑在手機的 WebView 里,后端是 FastAPI 提供接口。開發模式下一切順利,瀏覽器里訪問接口沒有任何問題,我甚至覺得打…

【正點原子】Linux應用編程入門~概念及環境介紹

應用編程概念 應用編程(也可稱為系統編程)與驅動編程、裸機編程有何不同?系統調用;何為庫函數;應用程序的 main()函數;應用程序開發環境的介紹;系統調用 定義系統調用(system call&a…

一、HTML 完全指南:從零開始構建網頁

文章目錄前言一、 HTML 結構認識 HTML 標簽HTML 文件基本結構標簽層次結構快速生成代碼框架二、 HTML 常見標簽詳解2.1 注釋標簽2.2 標題標簽 (h1 - h6)2.3 段落標簽 (p)2.4 換行標簽 (br)2.5 格式化標簽2.6 圖片標簽 (img)2.7 超鏈接標簽 (a)2.8 表格標簽基本使用合并單元格2.…

基于POI-TL實現動態Word模板的數據填充:【散點圖】特殊處理方案

基于POI-TL實現動態Word模板的數據填充:散點圖特殊處理方案 在使用POI-TL進行Word模板動態數據填充時,圖表生成是一個常見需求。最近在項目中使用POI-TL處理散點圖時遇到了一個特殊問題,經過研究后找到了解決方案,特此記錄分享。 問題背景 POI-TL作為一款優秀的Java Wor…

使用node-Express框架寫一個學校宿舍管理系統練習項目-前后端分離

今天繼續分享一個新的練習項目,是使用node做為后端語言,來寫的一個前后端分離項目:學校宿舍管理系統。我們如果想掌握一門編程語言,就是需要大量的練習。所以當我們學習到了一些知識,自己想一下 可以拿學到的知識&…

Kafka 運維實戰基本操作含命令與最佳實踐

1. 基礎概覽與工具入口 Kafka 發行包的所有 CLI 工具均在 bin/ 目錄下。任何工具不帶參數運行都會顯示所有可用選項。本文命令默認:--bootstrap-server localhost:9092;生產請替換為你的控制面或內網 VIP。 2. 主題管理(創建 / 修改 / 刪除 /…

貪心算法應用:航班起降問題詳解

Java中的貪心算法應用:航班起降問題詳解 貪心算法是一種在每一步選擇中都采取當前狀態下最優的選擇,從而希望導致全局最優解的算法策略。在航班起降問題中,貪心算法可以有效地解決機場跑道調度問題,即如何安排航班的起降順序以最大…

uniapp scroll-view 設置scrollTop無效

當我們使用 scroll-view的scroll-top的時候 默認想讓它回到頂部,當我們設置值為0的時候會不生效,在實際運用過程中,發現設置了scroll-top無效,滾動條位置并沒有發生變化,是因為微信小程序的官方框架處于性能考慮&#…

網絡與通信

1.TCP協議與UDP協議TCP(Transmission Control Protocol,傳輸控制協議)和 UDP(User Datagram Protocol,用戶數據報協議)是 TCP/IP 協議族中兩種核心的傳輸層協議,它們在數據傳輸方式、可靠性、適…

Node.js中package.json詳解

1. name(名稱) 如果你計劃發布你的包,package.json 中最重要的字段是 name 和 version,因為它們是必需的。name 和 version 共同組成一個假定完全唯一的標識符。包的更改應伴隨版本號的更新。如果你不打算發布包,那么…

代碼隨想錄第14天| 翻轉、對稱與深度

226.翻轉二叉樹 (優先掌握遞歸) 題目鏈接/文章講解/視頻講解:翻轉二叉樹 交換的是指針,而不是數值,如果用數值做交換,需要交換的節點下面無法很好的操作。 使用遞歸來實現,但要提前清除是什么順…

DNS-Windows上使用DNS

DNS-Windows上使用DNS一、查看與修改DNS配置1.1、查看當前DNS服務器設置1.2、臨時修改 DNS 服務器(命令行)二、DNS緩存相關操作2.1、查看DNS緩存內容2.2、 刷新 DNS 緩存(清除過期記錄)三、測試域名解析(nslookup 工具…

3dsMax 2026 .NET Core 8 轉型下的Maxscript腳本開發:動態編譯模塊的重構策略與兼容性升級路徑

3ds Max 長期以來一直提供出色的 .NET 集成,使 Maxscript 能夠無縫利用任何 .NET 庫的強大功能。部分開發者在工具中廣泛使用了 .NET 功能。 之前,3ds Max 依賴于 .NET Framework 4.8 并且最近更新到了 4.8.1,用于 2025 版本的發布。然而,隨著 3ds Max 2026 的推出,Autod…

golang 做webrtc開發核心

在Golang中進行WebRTC開發,核心在于理解WebRTC協議的工作原理以及如何利用Go生態中的庫來實現關鍵功能。以下是Golang WebRTC開發的核心要點: WebRTC基礎概念 了解ICE(Interactive Connectivity Establishment)協議用于NAT穿越掌握…