Go language acquisition system performance data gopsutil library

psutilIt is a cross-platform process and system monitoring Python library, and gopsutilits Go language version of the implementation. This article describes its basic use.

Go language is simple to deploy, very good performance characteristics suitable for some, such as gathering information and monitoring service system, this article describes gopsutil library is well-known Python library: psutil a version of the Go language implementation.

installation

go get github.com/shirou/gopsutil

use

CPU

CPU collect relevant information.

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

Get CPU load information:

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

func getCpuLoad() {
    info, _ := load.Avg()
    fmt.Printf("%v\n", info)
}

Memory

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

// mem info
func getMemInfo() {
    memInfo, _ := mem.VirtualMemory()
    fmt.Printf("mem info:%v\n", memInfo)
}

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

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

even 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

Two ways to get the machine's 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
}

or:

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

Guess you like

Origin www.cnblogs.com/nickchen121/p/11517451.html