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