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

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
        }
    }
}

最后图表显示

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PIP安装Python扩展包超时解决办法-国内镜像

问题描述 使用pip安装Python扩展包经常超时,无法安装 解决方法 使用清华大学镜像: https://pypi.tuna.tsinghua.edu.cn/simple/ 使用方法:以openpyxl为例 原来:pip install openpyxl 现在:pip install -i https…

Git与GitLab的企业实战--尚硅谷git课程

Git与GitLab的企业实战 第1章 Git概述 Git是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目。 Git易于学习,占地面积小,性能极快。 它具有廉价的本地库,方便的暂存区域和多个工作流分支等特性…

IEEE JSTSP综述:从信号处理领域分析视触觉传感器的研究

触觉传感器是机器人系统的重要组成部分,虽然与视觉相比触觉具有较小的感知面积,但却可以提供机器人与物体交互过程中更加真实的物理信息。 视觉触觉传感是一种分辨率高、成本低的触觉感知技术,被广泛应用于分类、抓取、操作等领域中。近期&a…

什么是指令微调(LLM)

经过大规模数据预训练后的语言模型已经具备较强的模型能力,能够编码丰富的世界知识,但是由于预训练任务形式所限,这些模型更擅长于文本补全,并不适合直接解决具体的任务。 指令微调是相对“预训练”来讲的,预训练的时…

UG_NX11.0之Windows11中安装出错及解决方法

UG_NX11.0之Windows11中安装出错及解决方法 文章目录 UG_NX11.0之Windows11中安装出错及解决方法1. 安装出错2. 解决方法1. 设置以兼容性模式运行2. 配置环境变量 3. 再次安装问题解决4. 安装后可删除配置的环境变量(可选) 1. 安装出错 以管理员身份运行Launch.exe,如下 点击D…

浅谈逻辑控制器之while控制器

浅谈逻辑控制器之while控制器 “While控制器”是一种高级控制结构,它允许用户基于特定条件来循环执行其下的子采样器或控制器,直至该条件不再满足。本文旨在详细介绍While控制器的功能、配置方法、使用场景以及实践示例,帮助测试工程师高效利…

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

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

C++Primer Plus 第十四章代码重用:14.4.4 数组模板示例和非类型参数2

14.4.4 数组模板示例和非类型参数 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右…

SpringBoot整合Solr进行搜索(简单)

SpringBoot整合Solr进行搜索 创建SpringBoot项目pom中加入Solr依赖配置 Solr创建实体编写一个简单的ID查询打印结果 参考文章 创建SpringBoot项目 这里基于aliyun提供的快速构建一个项目。我们这主要是整合Solr。 pom中加入Solr依赖 maven下载地址 pom中加入以下内容&#x…

线程版服务器实现(pthread_server)

用到的所有方法所需要的参数可以在wrap.c文件中查询&#xff0c;wrap中找不到的直接通过man手册查询 1.首先介绍一下我自己写的包裹文件&#xff0c;里面有各种在可能要用到的方法 wrap.c: #include <stdlib.h> #include <stdio.h> #include <unistd.h> #…

软考《信息系统运行管理员》-1.4 常见的信息系统

1.4 常见的信息系统 常见的信息系统综述 财务系统 财务信息系统会计信息系统 办公自动化系统业务处理系统生产管理系统ERP系统客户关系管理系统人力资源系统 会计信息系统 主要任务是保证记账的正确性。 订单处理子系统库存子系统会计应收/应支系统总账子系统 财务信息系…

effective java (1)(考虑使用!)静态工厂方法代替构造方法

只是目前阶段 对本书第一章内容的浅显认知&#xff0c;说实话 这一章 我看了4遍左右&#xff0c;每一遍感觉都不一样 他的创建模式 有时候像设计模式&#xff0c;但作者已经在原文中描述&#xff0c;它并不等价于 设计模式 我们正常 创建一个年级类 是长这样的 我们不写成标准…

机械拆装-基于Unity-总体设计

前言 在工业设计和制造领域&#xff0c;零部件的拆装技术是一个重要的应用场景&#xff0c;比如我们在工程训练课程中经历的摩托车发动机拆装课程&#xff0c;是机械类学生的必修课程。虚拟拆装系统模拟和仿真了模型的拆装过程&#xff0c;虽然SolidWorks等机械设计软件能够解决…

Splashtop 的屏幕录制功能如何提高 IT 合规性

在当今的数字时代&#xff0c;随着远程办公的普及以及监管要求和网络安全威胁的加剧&#xff0c;IT 副总裁、首席信息官&#xff08;CIO&#xff09;等 IT 管理人员面临着一系列独特挑战。 各组织在远程支持运营中要全力维护合规性、提高安全性并坚持问责制&#xff0c;技术解…

瓦罗兰特新赛季更新资讯 瓦罗兰特新赛季免费加速器

瓦罗兰特新赛季来喽&#xff0c;这是一款由拳头开发的免费第一人称射击游戏&#xff0c;游戏凭借其独特的玩法和丰富的英雄选择吸引了大量玩家。 我们可以在游戏中选择自己喜欢的角色出场与敌人进行对战&#xff0c;而且每一个角色都有自己独特的道具以及技能&#xff0c;使用好…

实体零售连锁企业如何通过物流接口实现数智化转型升级?

在电子商务浪潮的持续冲击下&#xff0c;传统的实体零售行业面临着巨大的挑战。为了在线上线下融合的新零售时代保持竞争力&#xff0c;众多实体零售企业积极寻求数字化转型的突破。 某中国零售连锁百强企业近年来致力于打造自有品牌的线上销售体系&#xff0c;自2021年8月起接…

高效管理客户的秘诀:企业如何建立稳固的客户关系

如今的竞争&#xff0c;从商业模式、产品、服务到销售环节&#xff0c;竞争已经不再是单一层面的&#xff0c;而是全方位的&#xff0c;企业需要打造全价值链竞争优势。在这个过程中&#xff0c;客户管理的作用是无可替代的&#xff0c;成为企业成功的关键因素之一。如何高效地…

Excel表格转换Word文档的3个简单方法分享!

在日常办公中&#xff0c;我们经常需要将Excel表格中的数据转换为Word文档以便于编辑、排版或分享。然而&#xff0c;很多人可能并不清楚如何实现这一转换过程&#xff0c;或者只能采取复制粘贴的笨拙方式&#xff0c;导致格式错乱、效率低下。本文将详细介绍两种高效、便捷的E…

企业应该如果安全上网,软件防查盗版,企业防盗版

随着信息化的发展&#xff0c;企业日常办公越来越依赖互联网。终端以及普通PC终端在访问互联网过程中&#xff0c;会遇到各种各样不容忽视的风险&#xff0c;例如员工主动故意的数据泄漏&#xff0c;后台应用程序偷偷向外部发信息&#xff0c;木马间谍软件的外联&#xff0c;以…

精密机器中的交叉导轨负荷与容许负荷的差异!

交叉导轨的设计和制造过程中&#xff0c;负荷及容许负荷是至关重要的参数&#xff0c;只有准确计算出交叉导轨的载荷&#xff0c;才能保证交叉导轨的稳定性和使用寿命。 负荷和容许载荷是两个不同的参数&#xff0c;那这两者的有什么差异呢&#xff1f; 交叉导轨的负荷是指其承…