Go 监控系统硬件指标

大部分使用了gopsutil这个lib。psutil是一个跨平台进程和系统监控的Python库,而gopsutil是其Go语言版本的实现。

网络

Mac地址

func GetMacAddrs() (macAddrs string) {
	netInterfaces, err := net.Interfaces()
	if err != nil {
		fmt.Printf("fail to get net interfaces: %v", err)
		return macAddrs
	}

	for _, netInterface := range netInterfaces {
		macAddr := netInterface.HardwareAddr.String()
		if len(macAddr) == 0 {
			continue
		}

		macAddrs += macAddr + " "
	}
	return macAddrs
}

IP地址

func GetIPs() (ips string) {
	interfaceAddr, err := net.InterfaceAddrs()
	if err != nil {
		fmt.Printf("fail to get net interface addrs: %v", err)
		return ips
	}

	for _, address := range interfaceAddr {
		ipNet, isValidIpNet := address.(*net.IPNet)
		if isValidIpNet && !ipNet.IP.IsLoopback() {
			if ipNet.IP.To4() != nil {
				ips += ipNet.IP.String() + " "
			}
		}
	}
	return ips
}

当前网速计算

func getNetDetail()(netIOIn string,netIOOut string)  {
	oldIn, oldOut := getNetInfo()
	time.Sleep(1 * time.Second)
	curIn, curOut := getNetInfo()
	netIOIn = fmt.Sprintf("%.2fkbps", float64(curIn-oldIn)/1024)
	netIOOut = fmt.Sprintf("%.2fkbps", float64(curOut-oldOut)/1024)
	return netIOIn,netIOOut
}

func getNetInfo() (netIn uint64, netOut uint64) {
	info, _ := net.IOCounters(true)

	for _, v := range info {
		if !strings.HasPrefix(v.Name, "lo") {
			netIn += v.BytesRecv
			netOut += v.BytesSent
		}
	}
	return netIn, netOut
}

负载相关

CPU

import "github.com/shirou/gopsutil/cpu";
import "github.com/shirou/gopsutil/load";

// cpu info
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)
	}
	//负载信息 分别存储1分钟系统负荷、5分钟系统负荷,15分钟系统负荷;
	loadInfo, _ := load.Avg()
	fmt.Printf("%v\n", loadInfo)
}

内存

import "github.com/shirou/gopsutil/mem";

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

硬盘占用

import "github.com/shirou/gopsutil/disk";

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

参考:https://www.cnblogs.com/nickchen121/p/11517451.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值