用 Go 采集服務器資源指標:從原理到實踐

在后端開發或運維工作中,采集服務器資源指標 是個繞不開的需求:

  • 運維要看 CPU、內存、磁盤的使用情況
  • 監控系統要定期上報這些數據
  • 應用程序有時候也需要根據系統負載做限流、彈性伸縮

那么問題來了:用 Go 怎么優雅地采集這些指標呢?


為什么要自己采集指標?

很多人會問:我直接用 top / htop / vmstat 不是就能看了嗎?
沒錯,但這些工具只是給人看的。如果你需要:

  • 代碼里自動獲取 指標
  • 定期 上報到監控系統(比如 Prometheus、InfluxDB)
  • 日志里記錄系統狀態

那就需要代碼層面的采集。


可以采集哪些指標?

常見的幾個維度:

  1. CPU

    • 使用率(user / system / idle)
    • 核心數、邏輯線程數
  2. 內存

    • 總內存、已用內存、空閑內存
    • 使用率(百分比)
  3. 磁盤

    • 分區空間:總大小、已用、剩余
    • 使用率
  4. 網絡(進階)

    • 網卡流量、收發包數

這些指標夠你搭建一個輕量級的監控系統了。


用 Go 怎么實現?

Go 有幾個常見做法:

  1. 直接調用系統命令
    比如執行 df -hfree -m,然后解析輸出。缺點是跨平臺不友好。

  2. 調用 /proc 接口(Linux 特有)
    讀取 /proc/meminfo/proc/stat/proc/diskstats。這種方式比較底層,適合對接高性能監控。

  3. 用工具庫封裝
    比如 go-commons/systemutils 就在做這件事:用 Go 封裝一層,暴露統一的 API。這樣上層代碼就不用關心不同系統的細節。


用 go-commons/systemutils 的示例

假設我們要獲取磁盤信息,可以這樣寫:

package mainimport ("fmt""github.com/Rodert/go-commons/systemutils/diskutils"
)func main() {// 獲取根目錄磁盤信息info, err := diskutils.GetDiskInfo("/")if err != nil {panic(err)}fmt.Printf("掛載點: %s\n", info.Path)fmt.Printf("總空間: %d GB\n", info.Total/1024/1024/1024)fmt.Printf("已使用: %d GB\n", info.Used/1024/1024/1024)fmt.Printf("可用空間: %d GB\n", info.Free/1024/1024/1024)
}

輸出示例:

掛載點: /
總空間: 100 GB
已使用: 45 GB
可用空間: 55 GB

未來 systemutils 里還會有 cpuutilsmemutils,可以類似這樣調用:

cpu := cpuutils.GetCPUUsage()
mem := memutils.GetMemInfo()

如何應用到實際項目?

  1. 日志增強
    在關鍵操作前后,記錄系統資源情況,方便排查問題。

  2. 健康檢查
    在 API /health 接口里,返回 CPU/內存/磁盤的占用情況。

  3. 報警監控
    定時采集指標,當 CPU > 90% 或磁盤剩余空間 < 10% 時,發通知到釘釘/Slack。

  4. 資源限流
    根據系統負載動態調整并發數,避免雪崩。


總結

用 Go 采集服務器資源指標并不復雜,關鍵在于:

  • 選好采集方式(命令行 / proc / 工具庫)
  • 保證跨平臺兼容性
  • 在業務中善加利用(日志、監控、限流)

如果你不想自己重復造輪子,可以直接試試 go-commons/systemutils,它提供了簡單易用的 API,把繁瑣的系統調用封裝掉。

一句話:
👉 用 Go 采指標,用 go-commons 更輕松。

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

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

相關文章

安卓學習 之 上下文菜單的操作

先來認識一下上下文菜單是什么樣子的&#xff1f;如圖&#xff0c;當長按一個控件時彈出來的菜單叫做上下文菜單&#xff1a;圖中第一個和第二個就是一個上下文菜單&#xff0c;第二個菜單里面還有一層菜單&#xff0c;這個上下文菜單被綁定到注冊按鈕中&#xff0c;也就是長按…

fabric啟動節點var/hyperledger/production: permission denied

場景我在節點的compose文件中進行了數據掛載&#xff1a;- ../../data/bank1/peer1:/tmp/hyperledger/bank1/peer1但是運行是依然報錯為var/hyperledger/production的權限問題&#xff0c;并且我也已經對../../data/bank1/peer1目錄設置了操作權限services:peer1-bank1:contain…

uni-app + Vue3 開發展示 echarts 圖表

場景:使用 uni-app 開發手機端,需要展示 echarts 圖表 1. 打開 uni-app 官網 https://uniapp.dcloud.net.cn/ 2. 點擊右上角搜索 3. 點擊插件市場,搜索 echarts 找到 echarts 插件 4. 下載到自己的項目中 使用詳情在該頁面下方.

給AI配一臺手機+電腦?智譜AutoGLM上線!

早上剛坐進地鐵&#xff0c;對著手機隨口說句 “整理上周銷售周報”&#xff0c;等你到公司打開電腦&#xff0c;Excel 數據統計表、PPT 匯報版已經整整齊齊躺在桌面 —— 這不是科幻片里的畫面&#xff0c;而是智譜 AutoGLM 2.0 帶來的真實體驗。2025年8月20日&#xff0c;智譜…

NGUI--游戲登錄、注冊和服務器選擇系統??

項目核心思路該項目實現了一個完整的游戲賬號流程&#xff1a;??用戶側流程??&#xff1a;新用戶注冊 -> 返回登錄 -> 輸入賬號密碼 -> 選擇游戲服務器 -> 進入游戲。??數據管理??&#xff1a;所有數據&#xff08;賬號信息、服務器列表、用戶選擇&#xf…

自動化測試框架是軟件測試的核心基礎設施,通過預設規則和腳本自動執行測試用例,顯著提高測試效率和覆蓋率。

1. 自動化測試框架1.1 概述自動化測試框架是軟件測試的核心基礎設施&#xff0c;通過預設規則和腳本自動執行測試用例&#xff0c;顯著提高測試效率和覆蓋率。現代AI驅動的自動化測試框架結合了機器學習、自然語言處理和計算機視覺技術&#xff0c;實現了更智能的測試用例生成、…

在 Ubuntu 系統中利用 conda 創建虛擬環境安裝 sglang 大模型引擎的完整步驟、版本查看方法、啟動指令及驗證方式

以下是在 Ubuntu 系統中利用 conda 創建虛擬環境安裝 sglang 大模型引擎的完整步驟、版本查看方法、啟動指令及驗證方式,全程使用清華源加速,并包含關鍵注意事項: 一、完整安裝步驟(基于 conda + 清華源) 1. 準備工作:安裝 conda 并配置清華源 (1)安裝 Miniconda #…

Unity Excel數據導入工具

UnityExcelImporterX - Unity Excel數據導入工具 自動將Excel文件&#xff08;.xls, .xlsx&#xff09;中的數據轉換為Unity的ScriptableObject資源。 項目基于unity-excel-importer&#xff0c;增加了一些新特性。項目地址&#xff1a;github.com/nayaku/UnityExcelImporter…

np.linalg 函數一覽

&#x1f4da; 常用 np.linalg 函數一覽下面是一些最常用的功能和示例&#xff1a;1. np.linalg.norm() —— 計算向量或矩陣的范數python深色版本import numpy as npv np.array([3, 4]) print(np.linalg.norm(v)) # L2 范數&#xff08;模長&#xff09;: √(34) 5.0A np.…

Linux入門(二)

計算機原理系列 歡迎大家關注「海拉魯知識大陸」 多交流不迷路 Linux入門&#xff08;二&#xff09; 在上一章Linux入門(一)中rm -rf /是比較簡單的哈&#xff0c;那么升級一下&#xff1a;xargs指令的作用是啥呢&#xff1f; 1.進程 應用的可執行文件是放在文件系統里&a…

開發與維護nodejs工具庫或自定義npm包

h5打開以查看 一、初始設置&#xff1a;為成功發布做好準備 1. 項目初始化與結構 bash # 創建項目目錄并初始化 mkdir my-awesome-lib cd my-awesome-lib npm init -y 推薦的項目結構&#xff1a; text my-awesome-lib/ ├── src/ # 源代碼目錄 │ └──…

IntelliJ IDEA 的 Git 功能

1. 克隆&#xff08;Clone&#xff09;項目 這是你開始的第一步。你需要將遠程倉庫的代碼克隆到本地。 打開 IDEA&#xff0c;選擇 Get from VCS。在彈出的窗口中&#xff0c;選擇 Git。粘貼遠程倉庫的 URL&#xff08;通常來自 GitHub、GitLab 等&#xff09;。選擇一個本地目…

fastapi全局注入mysql,單數據庫

1、封裝sql連接 test_db.py from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession from sqlalchemy.orm import sessionmaker from fastapi import Request, Depends# 1. 數據庫連接配置 async_engine create_async_engine("mysqlaiomysql://root:root…

深度學習常見應用算力要求?

深度學習常見應用的算力要求&#xff0c;首先需要明確算力的核心衡量維度&#xff1a;計算能力&#xff1a;以每秒浮點運算次數&#xff08;FLOPS&#xff0c;如 TF32/FP16/FP8 精度下的吞吐量&#xff09;衡量&#xff0c;決定任務運行速度&#xff1b;顯存容量&#xff1a;決…

邪修實戰系列(5)

1、第一階段邪修實戰總覽&#xff08;9.1-9.30&#xff09; 把第一階段&#xff08;基礎夯實期&#xff09;的學習計劃拆解成極具操作性的每日行動方案。這個計劃充分利用我“在職學習”的特殊優勢&#xff0c;強調“用輸出倒逼輸入”&#xff0c;確保每一分鐘的學習都直接服務…

Python TensorFlow的CNN-LSTM-GRU集成模型在邊緣物聯網數據IoT電動汽車充電站入侵檢測應用

全文鏈接&#xff1a;https://tecdat.cn/?p43881 原文出處&#xff1a;拓端抖音號拓端tecdat 隨著物聯網&#xff08;IoT&#xff09;技術在電動汽車充電站&#xff08;EVCS&#xff09;中的普及&#xff0c;充電站不僅成為智能交通的關鍵節點&#xff0c;更因連接電網、用戶設…

3dma渲染噪點成因排查及優化方案

有時候在用 3D Max 渲染完效果圖&#xff0c;畫面上總有密密麻麻的小顆粒&#xff0c;也就是常說的噪點&#xff0c;原本精致的模型和材質&#xff0c;一有噪點質感就掉了大半。其實多數時候&#xff0c;噪點問題都和渲染參數設置有關。那么出現噪點原因和解決方案有哪些&#…

【LeetCode】算法詳解#15 ---環形鏈表II

1.題目描述 給定一個鏈表的頭節點 head &#xff0c;返回鏈表開始入環的第一個節點。 如果鏈表無環&#xff0c;則返回 null。如果鏈表中有某個節點&#xff0c;可以通過連續跟蹤 next 指針再次到達&#xff0c;則鏈表中存在環。 為了表示給定鏈表中的環&#xff0c;評…

Kafka面試精講 Day 18:磁盤IO與網絡優化

【Kafka面試精講 Day 18】磁盤IO與網絡優化 在“Kafka面試精講”系列的第18天&#xff0c;我們聚焦于磁盤IO與網絡優化。作為支撐百萬級吞吐量的分布式消息系統&#xff0c;Kafka的高性能不僅依賴于優秀的架構設計&#xff0c;更離不開對底層資源——尤其是磁盤和網絡——的極…

ActiveMQ RocketMQ RabbitMQ Kafka選型及應用場景

許多時候我們都將Kafka拿來跟常用的幾個消息隊列作比較&#xff0c;將 Kafka 加入對比使得選型更加全面和實際。但請注意Kafka并非完全適用消息中間件的所有場景。這四款消息中間件定位不同&#xff0c;選擇取決于你的具體場景。消息隊列選型核心定位一句話總結RabbitMQ&#x…