欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Go语言获取系统性能数据gopsutil库的操作

程序员文章站 2022-04-01 16:26:07
psutil是一个跨平台进程和系统监控的python库,而gopsutil是其go语言版本的实现。本文介绍了它的基本使用。go语言部署简单、性能好的特点非常适合做一些诸如采集系统信息和监控的服务,本文...

psutil是一个跨平台进程和系统监控的python库,而gopsutil是其go语言版本的实现。本文介绍了它的基本使用。

go语言部署简单、性能好的特点非常适合做一些诸如采集系统信息和监控的服务,本文介绍的库是知名python库:的一个go语言版本的实现。

一、安装

go get github.com/shirou/gopsutil

二、使用

2.1 cpu

采集cpu相关信息。

import "github.com/shirou/gopsutil/cpu"

// cpu info
func getcpuinfo() {
 cpuinfos, err := cpu.info()
 if err != nil {
 fmt.printf("get cpu info failed, err:%v", err)
 }
 for _, ci := range cpuinfos {
 fmt.println(ci)
 }
 // cpu使用率
 for {
 percent, _ := cpu.percent(time.second, false)
 fmt.printf("cpu percent:%v\n", percent)
 }
}

获取cpu负载信息:

import "github.com/shirou/gopsutil/load"

func getcpuload() {
 info, _ := load.avg()
 fmt.printf("%v\n", info)
}

2.2 memory

import "github.com/shirou/gopsutil/mem"

// mem info
func getmeminfo() {
 meminfo, _ := mem.virtualmemory()
 fmt.printf("mem info:%v\n", meminfo)
}

2.3 host

import "github.com/shirou/gopsutil/host"

// host info
func gethostinfo() {
 hinfo, _ := host.info()
 fmt.printf("host info:%v uptime:%v boottime:%v\n", hinfo, hinfo.uptime, hinfo.boottime)
}

2.4 disk

import "github.com/shirou/gopsutil/disk"

// disk info
func getdiskinfo() {
 parts, err := disk.partitions(true)
 if err != nil {
 fmt.printf("get partitions failed, err:%v\n", err)
 return
 }
 for _, part := range parts {
 fmt.printf("part:%v\n", part.string())
 diskinfo, _ := disk.usage(part.mountpoint)
 fmt.printf("disk info:used:%v free:%v\n", diskinfo.usedpercent, diskinfo.free)
 }

 iostat, _ := disk.iocounters()
 for k, v := range iostat {
 fmt.printf("%v:%v\n", k, v)
 }
}

2.5 net io

import "github.com/shirou/gopsutil/net"

func getnetinfo() {
 info, _ := net.iocounters(true)
 for index, v := range info {
 fmt.printf("%v:%v send:%v recv:%v\n", index, v, v.bytessent, v.bytesrecv)
 }
}

三、net

3.1 获取本机ip的两种方式

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
}

或:

// get preferred outbound ip of this machine
func getoutboundip() string {
 conn, err := net.dial("udp", "8.8.8.8:80")
 if err != nil {
 log.fatal(err)
 }
 defer conn.close()

 localaddr := conn.localaddr().(*net.udpaddr)
 fmt.println(localaddr.string())
 return localaddr.ip.string()
}

补充:go语言获取当前系统信息

1. 获取当前操作系统架构和名称:

import runtime
fmt.println(runtime.goos)
fmt.println(runtime.goarch)

win7 64bit系统:
windows
amd64

macos(10.13.4) 64bit系统:
darwin
amd64

2. 获取本机名称:

name, err := os.hostname()
if err == nil {
  fmt.println(name)
}

输出: my-pc //计算机名称

3. 获取本机cpu个数:

fmt.println(runtime.gomaxprocs(0)) //4核机器返回:4

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方,望不吝赐教。