在后端开发或运维工作中,采集服务器资源指标 是个绕不开的需求:

  • 运维要看 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…