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

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

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

~

相关文章
|
6月前
|
监控 算法 Java
如果使用pprof来进行性能的观测和优化
在开始优化之前,首先需要确定你的程序的性能瓶颈在哪里。使用性能分析工具(例如 Go 的内置 `pprof` 包)来检测程序中消耗时间和内存的地方。这可以帮助你确定需要优化的具体部分。
|
4月前
|
监控 Kubernetes Go
全链路追踪 & 性能监控,GO 应用可观测全面升级
当前,大多数面向 Golang 应用的监控能力主要是通过 SDK 方式接入,需要开放人员手动进行埋点,会存在一定问题。对此,可观测 Go Agent 应运而生。本文介绍的阿里云可观测 Go Agent 方案,能通过无侵入的方式实现应用监控能力。
108667 24
|
Java Go
gops —— Go 程序诊断分析工具
GitHub: https://github.com/google/gops 一个用于列出和诊断分析系统中正在运行的 Go 程序的命令行工具 安装 1 go get -u github.
2258 0
|
3月前
|
存储 中间件 数据库
go-zero 是如何追踪你的请求链路
go-zero 是如何追踪你的请求链路
|
3月前
|
Kubernetes 数据可视化 Java
|
3月前
|
SQL NoSQL Go
Go - 实现项目内链路追踪(二)
Go - 实现项目内链路追踪(二)
34 1
|
3月前
|
消息中间件 中间件 API
玩转 Go 链路追踪
玩转 Go 链路追踪
|
3月前
|
SQL JSON NoSQL
Go - 实现项目内链路追踪
Go - 实现项目内链路追踪
35 0
|
监控 Java Go
Go的系统监控函数
Go提供了许多系统监控函数。
167 0
|
11月前
|
Cloud Native 中间件 API
都在还说链路跟踪,那么 go-zero 的链路跟踪是咋样的?
都在还说链路跟踪,那么 go-zero 的链路跟踪是咋样的?
下一篇
无影云桌面