可能提到运维使用的开发语言,大家第一个想到的应该就是 Python。
因为它的库多,用起来之滑溜。
其实 Go 用于运维方面的库也不少,今天就给大家介绍一个库,分分钟把服务器的资源信息,比如 CPU呀,内存呀的使用情况,扒得一清二楚。
官方的 Github 地址:
https://github.com/shirou/gopsutil
看了下,在我写这篇文章的时候已经有 6.9k 的 start 了。
这是他当前版本支持采集的信息。
我们新建一个工程,在工程里面初始化 go mod 之后,直接 go get 就能安装完毕。
go get github.com/shirou/gopsutil/v3
先利用库来显示下当前电脑的 CPU 使用情况:
package main
import (
"fmt"
"github.com/shirou/gopsutil/v3/cpu"
"time"
)
func main() {
// 统计间隔,是否取单个还是总的
p,_ := cpu.Percent(time.Second, false)
fmt.Println(p)
}
这里我就没处理采集错误的情况了,直接下划线忽略。
第一个参数是统计间隔,你可以根据你的情况传入,秒,分,时都行。
第二个参数为是否获取全部的总的统计,因为现在的电脑基本都是多核了吧,你可以传 true 返回的就是每个 CPU 的使用情况。
这段代码放到 main 方法里面直接执行的结果如下:
$ go run main.go
[41.54228855767001]
我这里电脑的 CPU 当前使用情况为 41.54%
内存信息,全部在 mem 这个模块里面
package main
import (
"fmt"
"github.com/shirou/gopsutil/v3/mem"
)
func main() {
m,_ := mem.VirtualMemory()
fmt.Println(m)
}
直接执行就能得到下面一堆信息:
{"total":8589934592,"available":2171953152,"used":6417981440,"usedPercent":74.71513748168945,"free":95838208,"active":2128056320,"inactive":2076114944,"wired":2473566208,"laundry":0,"buffers":0,"cached":0,"writeBack":0,"dirty":0,"writeBackTmp":0,"shared":0,"slab":0,"sreclaimable":0,"sunreclaim":0,"pageTables":0,"swapCached":0,"commitLimit":0,"committedAS":0,"highTotal":0,"highFree":0,"lowTotal":0,"lowFree":0,"swapTotal":0,"swapFree":0,"mapped":0,"vmallocTotal":0,"vmallocUsed":0,"vmallocChunk":0,"hugePagesTotal":0,"hugePagesFree":0,"hugePageSize":0}
如果直接这样输出是不是太不美观了,咱们程序员也是追求美观的好不好。
所以我再推荐一个库,用来格式化输出到我们控制台。
官方 Github 库地址:
github.com/olekukonko/tablewriter
看下他的效果:
是不是一下就高大上了许多。
在项目下面直接执行 go get :
go get github.com/olekukonko/tablewriter
使用思路很简单,我们需要构建一个二维的数组,然后直接丢给这个库渲染即可。
于是我们把上面的信息一整合就得到了下面的这段代码:
package main
import (
"fmt"
"github.com/olekukonko/tablewriter"
"github.com/shirou/gopsutil/v3/cpu"
"github.com/shirou/gopsutil/v3/mem"
"os"
"time"
)
func main() {
table := tablewriter.NewWriter(os.Stdout)
table.SetHeader([]string{"项目", "数量", "百分比"})
// 间隔,是否取单个还是总的
p,_ := cpu.Percent(time.Second, false)
cpuCount,_ := cpu.Counts(true)
table.Append([]string{"CPU",
fmt.Sprintf("%d核",cpuCount),
fmt.Sprintf("%1.f%%",p[0])})
// 内存信息
m,_ := mem.VirtualMemory()
table.Append([]string{"内存",
fmt.Sprintf("%dG",m.Total/1024/1024/1024),
fmt.Sprintf("%1.f%%",m.UsedPercent)})
table.Render()
}
直接运行起来,就能看到下面的图: