Go整合gopsutils监控系统性能指标参数

2023-11-23 22:37:02 浏览数 (1)

1 简介

以下系统环境可以使用:

  • FreeBSD i386/amd64/arm
  • Linux i386/amd64/arm(raspberry pi)
  • Windows i386/amd64/arm/arm64
  • Darwin i386/amd64
  • OpenBSD amd64 (Thank you @mpfz0r!)
  • Solaris amd64 (developed and tested on SmartOS/Illumos, Thank you @jen20!)

这些都有部分支持:

  • CPU on DragonFly BSD
  • host on Linux RISC-V

安装方式:

代码语言:shell复制
go get github.com/shirou/gopsutil

2 常用的API具体使用

2.1 CPU信息
代码语言:go复制
package main

import (
   "fmt"
   "github.com/shirou/gopsutil/cpu"
   "time"
)

//获取CPU信息
func getCpuInfo() {
   //1 CPU全部信息
   cpuInfos, err := cpu.Info()
   if err != nil {
      fmt.Printf("获取CPU信息出错 , err:n %v", err)
   }
   for _, ci := range cpuInfos {
      fmt.Println("CPU基本信息 : n", ci)
   }
   // 实时加载CPU使用率
   for {
      //每秒加载一次
      percent, _ := cpu.Percent(time.Second, false)
      fmt.Printf("CPU负载信息 : %vn", percent)
   }
}

func main() {
   getCpuInfo()
}
2.2 磁盘信息
代码语言:go复制
package main

import (
   "fmt"
   "github.com/shirou/gopsutil/disk"
)

// 磁盘信息
func getDiskInfo() {
   parts, err := disk.Partitions(true)
   if err != nil {
      fmt.Printf("获取磁盘信息失败 , err:%vn", err)
      return
   }
   for _, part := range parts {
      fmt.Printf("磁盘分区 :%vn", part.String())
      diskInfo, _ := disk.Usage(part.Mountpoint)
      fmt.Printf("该磁盘使用信息:used:%v free:%vn", diskInfo.UsedPercent, diskInfo.Free)
   }

   ioStat, _ := disk.IOCounters()
   for k, v := range ioStat {
      fmt.Printf("%v:%vn", k, v)
   }
}

func main() {
   getDiskInfo()
}
2.3 内存信息
代码语言:go复制
package main

import (
   "fmt"
   "github.com/shirou/gopsutil/mem"
)

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

func main() {
   getMemInfo()
}
2.4 主机信息
代码语言:go复制
package main

import (
   "fmt"
   "github.com/shirou/gopsutil/host"
)

//主机信息
func getHostInfo() {
   hInfo, _ := host.Info()
   fmt.Printf("主机信息 :n %v", hInfo)
}

func main() {
   getHostInfo()
}
2.5 IP地址信息
代码语言:go复制
package main

import (
   "fmt"
   "net"
)

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

func main() {
   ip, err := GetLocalIP()
   if err!=nil {
      fmt.Print(err)
   }
   fmt.Println("IP地址 : " ip)
}

~

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

0 人点赞