package util import ( "fmt" "github.com/shirou/gopsutil/v3/cpu" "github.com/shirou/gopsutil/v3/disk" "github.com/shirou/gopsutil/v3/host" "github.com/shirou/gopsutil/v3/load" "github.com/shirou/gopsutil/v3/mem" "net" "strings" "time" ) var ( IsAlert = false MSG = "" ) // 获取网络信息 func GetNetInfo() string { addrs, err := net.InterfaceAddrs() if err != nil { fmt.Println(err) return "" } for _, address := range addrs { // 检查ip地址判断是否回环地址 if ipnet, ok := address.(*net.IPNet); ok && !ipnet.IP.IsLoopback() { if ipnet.IP.To4() != nil { //fmt.Println(ipnet.Mask) //fmt.Println(ipnet.IP) return ipnet.IP.String() } } } return "" } // 获取主机信息 func GetHostInfo() { hostInfo, err := host.Info() if err != nil { fmt.Println("get host info fail, error: ", err) } fmt.Printf("hostname is: %v, os platform: %v \n", hostInfo.Hostname, hostInfo.Platform) MSG += fmt.Sprintf("hostname is: %v, os platform: %v \n", hostInfo.Hostname, hostInfo.Platform) } // 获取CPU信息 func GetCpuInfo() { // cpuInfo,err := cpu.Info() // if err != nil { // fmt.Println("get cpu info fail, err: %v",err) // } // for _,ci := range cpuInfo { // fmt.Printf("%v \n",ci) // } cpuPercent, _ := cpu.Percent(time.Second, true) cpuNumber, _ := cpu.Counts(true) if cpuPercent[0] >= 95 { //IsAlert = true //暂时不监控cpu情况 MSG += fmt.Sprintf("CPU核心数: %v \n", cpuNumber) MSG += fmt.Sprintf("CPU使用率: %.3f%% \n", cpuPercent[0]) } } // 获取内存信息 func GetMemInfo() { memInfo, err := mem.VirtualMemory() if err != nil { fmt.Println("get memory info fail. err: ", err) } // 获取总内存大小,单位GB memTotal := memInfo.Total / 1024 / 1024 / 1024 // 获取已用内存大小,单位MB memUsed := memInfo.Used / 1024 / 1024 // 可用内存大小 memAva := memInfo.Available / 1024 / 1024 // 内存可用率 memUsedPercent := memInfo.UsedPercent if memUsedPercent >= 95 { IsAlert = true MSG += fmt.Sprintf("总内存: %v GB, 已用内存: %v MB, 可用内存: %v MB, 内存使用率: %.3f %% \n", memTotal, memUsed, memAva, memUsedPercent) } } // 获取系统负载 func GetSysLoad() { loadInfo, err := load.Avg() if err != nil { fmt.Println("get average load fail. err: ", err) } if loadInfo.Load15 >= 10 { IsAlert = true MSG += fmt.Sprintf("系统平均负载: %v \n", loadInfo) } } // 获取硬盘存储信息 func GetDiskInfo() { diskPart, err := disk.Partitions(false) if err != nil { fmt.Println(err) } for _, dp := range diskPart { if find := strings.Contains(dp.String(), "/snap/core"); find { //oracle arm cpu core 被误认为分区 return } if find := strings.Contains(dp.String(), "/snap/lxd"); find { //oracle arm cpu loop 被误认为分区 return } fmt.Println(dp) diskUsed, _ := disk.Usage(dp.Mountpoint) fmt.Printf("分区总大小: %d MB \n", diskUsed.Total/1024/1024) fmt.Printf("分区使用率: %.3f %% \n", diskUsed.UsedPercent) fmt.Printf("分区inode使用率: %.3f %% \n", diskUsed.InodesUsedPercent) if diskUsed.UsedPercent >= 80 || diskUsed.InodesUsedPercent >= 80 { IsAlert = true MSG += fmt.Sprintf("异常分区: %s \n", dp.Mountpoint) MSG += fmt.Sprintf("分区总大小: %d GB \n", diskUsed.Total/1024/1024/1024) MSG += fmt.Sprintf("分区使用率: %.3f %% \n", diskUsed.UsedPercent) MSG += fmt.Sprintf("分区inode使用率: %.3f %% \n", diskUsed.InodesUsedPercent) } } }