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