golang 获取系统的主机 CPU 内存 磁盘等信息

news2024/11/25 12:53:35

golang 获取系统的主机 CPU 内存 磁盘等信息

要求

需要go1.18或更高版本

官方地址:https://github.com/shirou/gopsutil

使用

#下载包
go get github.com/shirou/gopsutil/v3/cpu
go get github.com/shirou/gopsutil/v3/disk
go get github.com/shirou/gopsutil/v3/host
go get github.com/shirou/gopsutil/v3/mem
go get github.com/shirou/gopsutil/v3/net

使用gin定义接口

hostRouters := r.Group("/host", func(context *gin.Context) {})
	{
		hostRouters.GET("stats", func(c *gin.Context) {
			statMap := make(map[string]interface{})
			// 获取主机相关信息
			hostInfo, _ := host.Info()
			hostMap := make(map[string]interface{})
			hostMap["uptime"] = hostInfo.Uptime                   //运行时间
			hostMap["bootTime"] = hostInfo.BootTime               //启动时间
			hostMap["procs"] = hostInfo.Procs                     //进程数
			hostMap["os"] = hostInfo.OS                           //操作系统
			hostMap["platform"] = hostInfo.Platform               //平台
			hostMap["platformVersion"] = hostInfo.PlatformVersion //平台版本
			hostMap["kernelArch"] = hostInfo.KernelArch           //内核
			hostMap["kernelVersion"] = hostInfo.KernelVersion     //内核版本
			statMap["hosts"] = hostMap

			// 获取内存信息
			memInfo, _ := mem.VirtualMemory()
			memMap := make(map[string]interface{})
			memMap["total"] = memInfo.Total             //总内存
			memMap["available"] = memInfo.Available     //可用内存
			memMap["used"] = memInfo.Used               //已使用内存
			memMap["free"] = memInfo.Free               //剩余内存
			memMap["usedPercent"] = memInfo.UsedPercent //百分比
			memMap["buffers"] = memInfo.Buffers         //缓存
			memMap["shared"] = memInfo.Shared           //共享内存
			memMap["cached"] = memInfo.Cached           //缓冲区
			statMap["mems"] = memMap

			// 获取CPU信息
			cpuInfo, _ := cpu.Info()
			var cpuMapArr []map[string]interface{}
			for _, c := range cpuInfo {
				cpuMap := make(map[string]interface{})
				cpuMap["cpu"] = c.CPU + 1         //第几个CPU 从0开始的
				cpuMap["cores"] = c.Cores         //CPU的核数
				cpuMap["modelName"] = c.ModelName //CPU类型
				cpuMapArr = append(cpuMapArr, cpuMap)
			}
			statMap["cpus"] = cpuMapArr

			// 获取IO信息
			ioInfo, _ := net.IOCounters(false)
			var ioMapArr []map[string]interface{}
			for _, i := range ioInfo {
				ioMap := make(map[string]interface{})
				ioMap["ioName"] = i.Name             //网口名
				ioMap["bytesSent"] = i.BytesSent     //发送字节数
				ioMap["bytesRecv"] = i.BytesRecv     //接收字节数
				ioMap["packetsSent"] = i.PacketsSent //发送的数据包数
				ioMap["packetsRecv"] = i.PacketsRecv //接收的数据包数
				ioMapArr = append(ioMapArr, ioMap)
			}
			statMap["ios"] = ioMapArr

			// 获取磁盘信息
			partitions, _ := disk.Partitions(false)
			var diskMapArr []map[string]interface{}
			for _, partition := range partitions {
				diskMap := make(map[string]interface{})
				usage, _ := disk.Usage(partition.Mountpoint)
				diskMap["disk"] = partition.Mountpoint     //第几块磁盘
				diskMap["total"] = usage.Total             //总大小
				diskMap["free"] = usage.Free               //剩余空间
				diskMap["used"] = usage.Used               //已使用空间
				diskMap["usedPercent"] = usage.UsedPercent //百分比
				diskMapArr = append(diskMapArr, diskMap)
			}
			statMap["disks"] = diskMapArr

			util.R(c, nil, statMap)
		})
	}

调用接口,查看接口响应数据

{
    "code": "0",
    "msg": "成功",
    "data": {
        "cpus": [
            {
                "cores": 1,
                "cpu": 1,
                "modelName": ""
            },
            {
                "cores": 1,
                "cpu": 2,
                "modelName": ""
            },
            {
                "cores": 1,
                "cpu": 3,
                "modelName": ""
            },
            {
                "cores": 1,
                "cpu": 4,
                "modelName": ""
            },
            {
                "cores": 1,
                "cpu": 5,
                "modelName": ""
            },
            {
                "cores": 1,
                "cpu": 6,
                "modelName": ""
            },
            {
                "cores": 1,
                "cpu": 7,
                "modelName": ""
            },
            {
                "cores": 1,
                "cpu": 8,
                "modelName": ""
            },
            {
                "cores": 1,
                "cpu": 9,
                "modelName": ""
            },
            {
                "cores": 1,
                "cpu": 10,
                "modelName": ""
            },
            {
                "cores": 1,
                "cpu": 11,
                "modelName": ""
            },
            {
                "cores": 1,
                "cpu": 12,
                "modelName": ""
            },
            {
                "cores": 1,
                "cpu": 13,
                "modelName": ""
            },
            {
                "cores": 1,
                "cpu": 14,
                "modelName": ""
            },
            {
                "cores": 1,
                "cpu": 15,
                "modelName": ""
            },
            {
                "cores": 1,
                "cpu": 16,
                "modelName": ""
            }
        ],
        "disks": [
            {
                "disk": "/etc/hosts",
                "free": 134272794624,
                "total": 469202288640,
                "used": 311020077056,
                "usedPercent": 69.84618367740407
            },
            {
                "disk": "/dev/termination-log",
                "free": 134272794624,
                "total": 469202288640,
                "used": 311020077056,
                "usedPercent": 69.84618367740407
            },
            {
                "disk": "/etc/hostname",
                "free": 134272794624,
                "total": 469202288640,
                "used": 311020077056,
                "usedPercent": 69.84618367740407
            },
            {
                "disk": "/etc/resolv.conf",
                "free": 134272794624,
                "total": 469202288640,
                "used": 311020077056,
                "usedPercent": 69.84618367740407
            }
        ],
        "hosts": {
            "bootTime": 1704638867,
            "kernelArch": "aarch64",
            "kernelVersion": "5.10.0-136.40.0.117.oe2203sp1.aarch64",
            "os": "linux",
            "platform": "alpine",
            "platformVersion": "3.19.0",
            "procs": 1,
            "uptime": 14905256
        },
        "ios": [
            {
                "bytesRecv": 111431059,
                "bytesSent": 209346524,
                "ioName": "all",
                "packetsRecv": 1505753,
                "packetsSent": 287887
            }
        ],
        "mems": {
            "available": 48697397248,
            "buffers": 16645812224,
            "cached": 33186672640,
            "free": 2395566080,
            "shared": 2713157632,
            "total": 133410463744,
            "used": 81182412800,
            "usedPercent": 60.85160827847815
        }
    }
}

最后图表显示

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1873576.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言指针速成下篇

c语言的指针下篇终于迎来了收尾&#xff0c;那么废话不多说&#xff0c;我们直接进入正题 指针访问数组 # include <stdio.h> int main () { int arr[ 10 ] { 0 }; // 输⼊ int i 0 ; int sz sizeof (arr)/ sizeof (arr[ 0 ]); // 输⼊ int * p arr //这…

Linux命令 wc(word count)-l(lines)用于统计文件中的行数。

文章目录 1、wc -l2、实战3、wc --help 1、wc -l 在命令 wc -l 中&#xff0c;-l 的英文全称是 lines。这个选项用于指定 wc&#xff08;word count&#xff0c;单词计数&#xff09;命令来统计文件的行数。 例如&#xff0c;当你运行 wc -l load_user_100w_sort.sql 时&…

ElasticSearch安装、配置详细步骤

一、环境及版本介绍 操作系统&#xff1a; Windows 10 软件版本&#xff1a; elasticsearch-7.17.22、kibana-7.17.22、IK-7.17.22 开发环境选择软件版本应提前考虑正式系统环境&#xff0c;否则会产生软件与服务器环境不兼容的问题出现&#xff0c;ElasticSearch与环境支持…

龙迅#LT6911GXC支持HDMI2.1转MIPI/4PORT LVDS应用功能,分辨率高达8K30HZ/4K120HZ压缩格式。

1. 描述 该LT6911GXC是一款高性能HD-DVI2.1转MIPI或LVDS芯片&#xff0c;适用于VR/显示应用。 HDCP RX作为HDCP中继器的上游&#xff0c;可以与其他芯片的HDCP TX配合实现中继器功能。 对于 HD-DVI2.1 输入&#xff0c;LT6911GXC可以配置为 3/4 通道。 对于MIPI输出&#xff0c…

vue2使用wangEditor5搭建模拟文档的编辑器快速集成

如图 1、下载依赖 2、elm引入&#xff08;可省略&#xff09; main.js 或者 按需引入 3、cv <template><div style"background: #f1f3f4"><div style"width: 100%; height: 42px"><!-- 工具栏 --><Toolbarid"tool-conta…

SAP中通过财务科目确定分析功能来定位解决BILLING问题实例

接用户反馈&#xff0c;一笔销售订单做发货后做销售发票时&#xff0c;没有成功过账到财务&#xff0c;提示财户确定错误。 这个之前可以通过VF02中点击小绿旗来重新执行过财动作&#xff0c;看看有没有相应日志来定位问题。本次尝试用此方法&#xff0c;也没有找到相关线索。 …

英国牛津大学博士后职位—统计学

牛津大学&#xff08;University of Oxford&#xff09;&#xff0c;简称“牛津”&#xff08;Oxford&#xff09;&#xff0c;位于英国牛津&#xff0c;是一所公立研究型大学&#xff0c;采用传统学院制。是罗素大学集团成员&#xff0c;被誉为“金三角名校”、“G5超级精英大…

ICRA 2024 混变刚度的仿人软体手指实现多模式抓取

ICRA 2024 发表了"用于多模式抓取的具有混合可变刚度机制的仿生软指 "的研究工作。核心思想是利用记忆合金的形状记忆效应&#xff0c;构建结构简化、功能多样的柔性手指&#xff0c;从而实现更高效的多模式抓取。 与传统的刚性夹爪相比&#xff0c;柔性软体夹爪具有…

浅谈红队攻防之道-DLL注入上线cs

等我熬过这一段狼狈&#xff0c;一个人尝尽孤独的滋味&#xff0c;我会笑着与这个世界和解 0x1 DLL注入概念 DLL注入(DLL Injection)是一种计算机编程技术&#xff0c;它可以强行使另一个进程加载一个动态链接库(DLL)以在其地址空间内运行指定代码。常见用途是改变原先程序的…

首个实时 AI 视频生成技术发布;科大讯飞发布星火大模型 4.0 丨 RTE 开发者日报

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE&#xff08;Real-Time Engagement&#xff09; 领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「…

SwiftUI 中的内容边距

文章目录 前言创建示例适配 iPad使用 contentMargins可运行 Demo总结前言 SwiftUI 引入了一组视图修饰符,使我们能够有效地管理视图中的安全区域。在许多情况下,安全区域是你希望放置内容的地方。今天,我们将了解 SwiftUI 引入的新内容边距概念以及它与安全区域的区别。 创…

老师如何发布学校分班情况?

随着新学期的临近&#xff0c;许多老师可能都会回想起过去那些忙碌的日子&#xff0c;他们不得不面对一堆学生名单&#xff0c;手动进行班级分配&#xff0c;然后逐一通知家长和学生&#xff0c;这种工作不仅繁琐而且容易出错&#xff0c;让人倍感压力。 然而&#xff0c;今天我…

地理空间数据格式GeoJSON扫盲,在CesiumJS中如何加载。

Hi&#xff0c;我是贝格前端工场&#xff0c;GIS已经越来越多的应用在可视化大屏中了&#xff0c;开发GIS类应用就少不了地理空间数据&#xff0c;本文介绍一下数据GeoJSON数据格式。 一、什么是GeoJSON数据格式&#xff0c;在GIS开发中有什么作用 GeoJSON是一种基于JSON&…

如何知道docker谁占用的显卡的显存?

文章目录 python环境安装nvidia-htop查看pid加一个追踪总结一下【找到容器创建时间】使用说明示例 再总结一下【用PID找到容器创建时间&#xff0c;从而找到谁创建的】使用说明示例 python环境安装nvidia-htop nvidia-htop是一个看详细的工具。 pip3 install nvidia-htop查看…

Windows部署MinIO,搭建本地对象存储服务

一、前言 二、MinIO介绍 三、Windows部署MinIO服务 1、准备工作 2、下载MinIO服务 3、启动MinIO服务 4、设置用户名密码 5、创建.bat文件启动服务 四、MinIO基本操作 1、存储桶管理 2、对象管理 3、数据查看 一、前言 基于外网的项目&#xff0c;可以使用阿里云等…

涨点超强!图像特征提取最新方法!性能效率快到飞起

在图像处理领域&#xff0c;有一个非常关键的步骤&#xff1a;图像特征提取。它能给我们提供一种高效、准确且灵活的方式来描述和分析图像内容。 通过降低图像数据的维度&#xff0c;去除冗余和噪声信息&#xff0c;图像特征提取不但简化了后续处理过程&#xff0c;还能提高算…

文本分析|小白教程

在信息爆炸的时代&#xff0c;文本数据无处不在&#xff0c;如何从这些海量的文字中提炼出有价值的信息呢&#xff1f;答案就是——文本分析。文本分析&#xff0c;简单来说&#xff0c;就是对文本数据进行深度的研究和分析。它能够从看似普通的文字中&#xff0c;提取出主题、…

老司机开发技巧,如何扩展三方包功能

前言 最近碰上有个业务&#xff0c;查询的sql如下&#xff1a; sql 复制代码 select * from table where (sku_id,batch_no) in ((#{skuId},#{batchNo}),...); 本来也没什么&#xff0c;很简单常见的一种sql。 问题是我们使用的是mybatis-plus&#xff0c;然后写的时候有没…

【C++ 初阶路】--- 类和对象(末)

目录 一、const成员1.1 取地址及const取地址操作符重载 二、再谈构造函数2.1 构造函数体赋值2.2 初始化列表2.3 explicit关键字 三、static成员3.1 概念3.2 特性 四、友元4.1 友元函数4.2 友元类 五、内部类六、匿名对象 一、const成员 将const修饰的“成员函数”称之为const成…