Go获取系统性能数据 gopsutil | Go


package main

import (
	"fmt"
	"log"
	lnet "net"
	"time"

	"github.com/shirou/gopsutil/cpu"
	"github.com/shirou/gopsutil/disk"
	"github.com/shirou/gopsutil/host"
	"github.com/shirou/gopsutil/load"
	"github.com/shirou/gopsutil/mem"
	"github.com/shirou/gopsutil/net"
)

func main() {
	/*
		获取系统性能数据 gopsutil
	*/
	// 1.获取cpu信息
	getCPUInfo()
	// 2.获取cpu负载信息
	getCPULoad()
	// 3.获取内存信息
	getMemInfo()
	// 4.获取主机信息
	getHostInfo()
	// 5.获取磁盘信息
	getDiskInfo()
	// 6.获取网络IO
	getNetInfo()
	// 7.获取本机IP
	addr, _ := GetLocalIP()
	fmt.Println(addr) // ipv6
	addr2 := GetOutboundIP()
	fmt.Println(addr2) // ipv4
}

func GetOutboundIP() string {
	conn, err := lnet.Dial("udp", "8.8.8.8:80")
	if err != nil {
		log.Fatal(err)
	}
	defer conn.Close()

	localAddr := conn.LocalAddr().(*lnet.UDPAddr)
	return localAddr.IP.String()
}

func GetLocalIP() (ip string, err error) {
	addrs, err := lnet.InterfaceAddrs()
	if err != nil {
		return
	}
	for _, addr := range addrs {
		ipAddr, ok := addr.(*lnet.IPNet)
		if !ok {
			continue
		}
		if ipAddr.IP.IsLoopback() {
			continue
		}
		if ipAddr.IP.IsGlobalUnicast() {
			continue
		}
		return ipAddr.IP.String(), nil
	}
	return
}

func getNetInfo() {
	info, _ := net.IOCounters(true)
	for _, v := range info {
		fmt.Printf("%v  发送:%v 接收:%v\n", v, v.BytesSent, v.BytesRecv)
	}
}

func getDiskInfo() {
	parts, err := disk.Partitions(true)
	if err != nil {
		fmt.Printf("获取磁盘分区失败:%v\n", err)
		return
	}
	for _, part := range parts {
		fmt.Printf("分区:%v\n", part.String())
		diskInfo, _ := disk.Usage(part.Mountpoint)
		fmt.Printf("磁盘已使用:%v, 磁盘空闲:%v\n", diskInfo.UsedPercent, diskInfo.Free)
	}
	// 磁盘IO信息
	ioStat, _ := disk.IOCounters()
	for k, v := range ioStat {
		fmt.Printf("%v:%v\n", k, v)
	}
}

func getHostInfo() {
	hInfo, _ := host.Info()
	fmt.Printf("主机信息:%v 更新时间:%v 启动时间:%v", hInfo, hInfo.Uptime, hInfo.BootTime)
}

func getMemInfo() {
	memInfo, _ := mem.VirtualMemory()
	fmt.Printf("内存信息:%v\n", memInfo)
}

func getCPUInfo() {
	cpuInfos, err := cpu.Info()
	if err != nil {
		fmt.Println("获取cpu信息出错")
	}
	for _, ci := range cpuInfos {
		fmt.Println(ci)
	}
	// cpu使用率
	percent, _ := cpu.Percent(time.Second, false)
	fmt.Println("cpu使用率", percent)
}

func getCPULoad() {
	info, _ := load.Avg()
	fmt.Printf("%v\n", info)
}

  

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM