zl程序教程

您现在的位置是:首页 >  后端

当前栏目

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

Go监控系统 参数 整合 性能指标
2023-09-11 14:16:33 时间

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

安装方式:

go get github.com/shirou/gopsutil

2 常用的API具体使用

2.1 CPU信息

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负载信息 : %v\n", percent)
   }
}

func main() {
   getCpuInfo()
}

2.2 磁盘信息

package main

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

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

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

func main() {
   getDiskInfo()
}

2.3 内存信息

package main

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

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

func main() {
   getMemInfo()
}

2.4 主机信息

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地址信息

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

~