golang练手项目监控系统资源项目(一)

介绍项目:仿写监控系统资源项目
主要功能:监控服务资源可视化
开发环境 :windows+idea+influxdb+granfa
主要技术:时序性数据库influxdb 和可视化平台granfa
项目描述  实时监控本机资源,展示成可视化页面。
负责模块:监控cpu 内存等指数写到influxdb数据库,然后用granfa平台展示

第三方库为

"github.com/shirou/gopsutil/cpu"    


go get github.com/yusufpapurcu/wmi


go get golang.org/x/sys

代码展示一

func getCpuInfo() {
	cpuInfos, err := cpu.Info()
	if err != nil {
		fmt.Printf("get cpu info failed, err:%v", err)
	}
	for _, ci := range cpuInfos {
		fmt.Println(ci)
	}
	// CPU使用率
	for {
		percent, _ := cpu.Percent(time.Second, false)
		fmt.Printf("cpu percent:%v\n", percent)
	}
}


这是读到我cpu的信息
{"cpu":0,"vendorId":"AuthenticAMD","family":"107","model":"","stepping":0,"physicalId":"178BFBFF00A50F00","coreId":"","cor
es":16,"modelName":"AMD Ryzen 7 5800H with Radeon Graphics         ","mhz":3201,"cacheSize":0,"flags":[],"microcode":""}  
cpu percent:[10.742187500020295]
cpu percent:[9.143407122232915]
cpu percent:[9.375]
cpu percent:[9.9609375]
cpu percent:[9.27734375]
cpu percent:[16.50390625]
cpu percent:[10.64453125]
cpu percent:[10.44921875]
cpu percent:[8.88671875]
cpu percent:[9.27734375]
cpu percent:[14.453125]
cpu percent:[11.62109375]
cpu percent:[12.98828125]
cpu percent:[14.55078125]
cpu percent:[11.1328125]
cpu percent:[14.2578125]
cpu percent:[12.890625]
cpu percent:[10.83984375]
cpu percent:[11.42578125]
cpu percent:[10.9375]

打印的时我的cpu的使用率


//cpu 负载 
import "github.com/shirou/gopsutil/load"

func getCpuLoad() {
	info, _ := load.Avg()
	fmt.Printf("%v\n", info)
}
// mem info
func getMemInfo() {
	memInfo, _ := mem.VirtualMemory()
	fmt.Printf("mem info:%v\n", memInfo)
}

// host info
func getHostInfo() {
	hInfo, _ := host.Info()
	fmt.Printf("host info:%v uptime:%v boottime:%v\n", hInfo, hInfo.Uptime, hInfo.BootTime)
}

// 磁盘

// disk info
func getDiskInfo() {
	parts, err := disk.Partitions(true)
	if err != nil {
		fmt.Printf("get Partitions failed, err:%v\n", err)
		return
	}
	for _, part := range parts {
		fmt.Printf("part:%v\n", part.String())
		diskInfo, _ := disk.Usage(part.Mountpoint)
		fmt.Printf("disk info:used:%v free:%v\n", diskInfo.UsedPercent, diskInfo.Free)
	}

	ioStat, _ := disk.IOCounters()
	for k, v := range ioStat {
		fmt.Printf("%v:%v\n", k, v)
	}
}

// 网络信息
func getNetInfo() {
	info, _ := net.IOCounters(true)
	for index, v := range info {
		fmt.Printf("%v:%v send:%v recv:%v\n", index, v, v.BytesSent, v.BytesRecv)
	}
}
func main() {
	//getCpuInfo()
	//getCpuLoad()
	//getMemInfo()
	//getHostInfo()
	//getDiskInfo()
	getNetInfo()
}


还有内存 磁盘等检测信息 都可以打印查看。详细看李文周(qimi)老师的博客

又了解了一个拓展知识 cpu负载跟cpu使用率不一样

1. CPU负载和CPU利用率的区别
CPU利用率:显示的是程序在运行期间实时占用的CPU百分比

CPU负载:显示的是一段时间内正在使用和等待使用CPU的平均任务数。CPU利用率高,并不意味着负载就一定大。举例来说:如果我有一个程序它需要一直使用CPU的运算功能,那么此时CPU的使用率可能达到100%,但是CPU的工作负载则是趋近于“1”,因为CPU仅负责一个工作嘛!如果同时执行这样的程序两个呢?CPU的使用率还是100%,但是工作负载则变成2了。所以也就是说,当CPU的工作负载越大,代表CPU必须要在不同的工作之间进行频繁的工作切换。

举例说明:

网上有篇文章举了一个有趣比喻,拿打电话来说明两者的区别,我按自己的理解阐述一下。

某公用电话亭,有一个人在打电话,四个人在等待,每人限定使用电话一分钟,若有人一分钟之内没有打完电话,只能挂掉电话去排队,等待下一轮。电话在这里就相当于CPU,而正在或等待打电话的人就相当于任务数。

在电话亭使用过程中,肯定会有人打完电话走掉,有人没有打完电话而选择重新排队,更会有新增的人在这儿排队,这个人数的变化就相当于任务数的增减。为了统计平均负载情况,我们5分钟统计一次人数,并在第1、5、15分钟的时候对统计情况取平均值,从而形成第1、5、15分钟的平均负载。
有的人拿起电话就打,一直打完1分钟,而有的人可能前三十秒在找电话号码,或者在犹豫要不要打,后三十秒才真正在打电话。如果把电话看作CPU,人数看作任务,我们就说前一个人(任务)的CPU利用率高,后一个人(任务)的CPU利用率低。

当然, CPU并不会在前三十秒工作,后三十秒歇着,只是说,有的程序涉及到大量的计算,所以CPU利用率就高,而有的程序牵涉到计算的部分很少,CPU利用率自然就低。但无论CPU的利用率是高是低,跟后面有多少任务在排队没有必然关系。
————————————————
版权声明:本文为CSDN博主「felby」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/felby/article/details/121076490

代码转载来自李文周qimi老师 https://www.liwenzhou.com/posts/Go/go_gopsutil/ 
 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值