当前位置: 首页 > news >正文

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"] = diskMapArrutil.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.lryc.cn/news/392415.html

相关文章:

  • Infinitar链游新发展新机遇
  • Figma 被爆出它剽窃了苹果的设计后撤下了AI工具Make Designs
  • ERROR | Web server failed to start. Port 8080 was already in use.
  • C++ 类和对象 构造函数
  • 纯javascript实现图片批量压缩打包zip下载后端ThinkPHP多国语言切换国际站
  • 使用ChatGPT写论文,只需四步突破论文写作瓶颈!
  • 神领物流项目第一天
  • [作业]10 枚举-排列类
  • vue2(vue-cli3x[vue.config.js])使用cesium新版(1.117.0)配置过程
  • 【深度学习】常用命令行指令汇总
  • 谷粒商城学习-11-docker安装redis
  • C++:类继承是什么,怎么继承
  • 期权学习必看圣书:《3小时快学期权》要在哪里看?
  • Keepalived 双机热备
  • 基于React和TypeScript的开源白板项目(Github项目分享)
  • 1019记录
  • 详细设计与概要设计区别-慧哥充电桩开源系统
  • vue3 引入百度地图的三种方式
  • 鸿蒙开发设备管理:【@ohos.usb (USB管理)】
  • Golang | Leetcode Golang题解之第204题计数质数
  • ELK日志系统和Filebeat采集器的学习总结
  • QML-Grid和OpacityMask
  • MySQL的并发控制、事务、日志
  • CNN文献综述
  • python语句前面有一个$是什么意思
  • wsl安装Linux系统到指定位置
  • [笔记] 高等数学在各工程门类的典型应用场景
  • 刀片服务器和机架式服务器有何区别
  • SQLyog脚本无限试用重置脚本
  • 代码随想录训练营第二十九天 134加油站 135分发糖果 860柠檬水找零 406根据身高重建队列