Adakah anda masih menulis fungsi pemantauan sistem Go anda sendiri?

Lepaskan: 2023-07-24 15:03:36
ke hadapan
646 orang telah melayarinya
Jika anda mempunyai keperluan pembangunan Go: dapatkan penggunaan cakera keras hos, CPU, memori, proses, dll., apakah yang akan anda lakukan? Idea yang lebih mudah ialah menggunakan os/exec untuk melaksanakan arahan tertentu seperti ps, cd, dan atas, dan kemudian menganalisis hasil pelaksanaannya. Sudah tentu, berdasarkan idea Linux bahawa semuanya adalah fail, pendekatan yang lebih langsung ialah membaca kandungan fail berkaitan, seperti fail dalam direktori /proc.

Kaedah di atas boleh memenuhi keperluan, tetapi kami tidak perlu mencipta semula roda kerana sudah ada perpustakaan pihak ketiga yang cukup lengkap yang melaksanakan keperluan koleksi ini untuk kami, ia adalah gopsutil.

gopsutil Pengenalan

psutil (proses dan utiliti sistem,) ialah perpustakaan merentas platform yang digunakan untuk mendapatkan proses dan penggunaan sistem (CPU, memori, cakera, rangkaian, penderia) dalam Python, dan gopsutil adalah Pergi versi bahasa.

gopsutil melindungi kita daripada perbezaan dalam pelbagai sistem dan mempunyai mudah alih yang baik.

Senarai yang disokong

  • FreeBSD i386/amd64/arm
  • Linux i386/amd64/arm(raspberry pi)
  • /
    /
  • Darwin i386/amd64
  • OpenBSD amd64
  • Solaris amd64

    Senarai Sokongan B
  • SD
  • hos di Linux RISC-V

Selain itu, projek ini memindahkan struktur C ke struktur Go Tiada kod cgo dalam pelaksanaannya, yang lebih kondusif untuk kompilasi silang.

Menggunakan

gopsutil pada masa ini mempunyai versi v3 dan v2, dan tiada jaminan keserasian ke belakang, jadi terdapat dua cara untuk menggunakannya

import (
    // "github.com/shirou/gopsutil/v3/mem" // to use v3
    "github.com/shirou/gopsutil/mem"  
)
Salin selepas log masuk

Contohnya, jika kita ingin melihat maklumat penggunaan sistem , ia boleh diperolehi dengan cara berikut

package main

import (
    "fmt"

    "github.com/shirou/gopsutil/v3/mem"
    // "github.com/shirou/gopsutil/mem"  // to use v2
)

func main() {
    v, _ := mem.VirtualMemory()

    // almost every return value is a struct
    fmt.Printf("Total: %v, Free:%v, UsedPercent:%f%%\n", v.Total, v.Free, v.UsedPercent)

    // convert to JSON. String() is also implemented
    fmt.Println(v)
}
Salin selepas log masuk

Hasilnya ialah

Total: 8589934592, Free:138248192, UsedPercent:76.416254%
{"total":8589934592,"available":2025828352,"used":6564106240,"usedPercent":76.4162540435791,"free":138248192,"active":1949327360,"inactive":1887580160,"wired":2214510592,"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}
Salin selepas log masuk

Satu perkara yang lebih mesra tentang pakej gopsutil ialah kebanyakan fungsi koleksi mengembalikan objek struktur, dan semuanya melaksanakan fmt Antara muka .Stringer, jadi apabila mencetak Ia akan dikeluarkan dalam format json.

Sebagai contoh, dalam contoh di atas, mem.VirtualMemory mengembalikan struktur VirtualMemoryStat, yang memanggil fungsi json.Marshal() dalam kaedah String().

type VirtualMemoryStat struct {
 Total uint64 `json:"total"`
 Available uint64 `json:"available"`
 Used uint64 `json:"used"`
 UsedPercent float64 `json:"usedPercent"`
 Free uint64 `json:"free"`
 Active   uint64 `json:"active"`
 Inactive uint64 `json:"inactive"`
 Wired    uint64 `json:"wired"`

func (m VirtualMemoryStat) String() string {
 s, _ := json.Marshal(m)
 return string(s)
}
Salin selepas log masuk

gopsutil dibahagikan kepada sub-pakej yang berbeza melalui unit koleksi yang berbeza Dengan memperkenalkan sub-pakej yang berbeza semasa penggunaan, kaedah yang berkaitan boleh dipanggil.

import (
 "github.com/shirou/gopsutil/v3/mem"
 "github.com/shirou/gopsutil/v3/cpu"
 "github.com/shirou/gopsutil/v3/disk"
 "github.com/shirou/gopsutil/v3/docker"
 "github.com/shirou/gopsutil/v3/host"
 "github.com/shirou/gopsutil/v3/internal"
 "github.com/shirou/gopsutil/v3/load"
 "github.com/shirou/gopsutil/v3/mem"
 "github.com/shirou/gopsutil/v3/net"
 "github.com/shirou/gopsutil/v3/process"
 "github.com/shirou/gopsutil/v3/winservices"
)
Salin selepas log masuk

Sebagai contoh, jika kita ingin mendapatkan maklumat hos, kita perlu memperkenalkan github.com/shirou/gopsutil/v3/host sub-package

import (
 "fmt"
 "github.com/shirou/gopsutil/v3/host"
)

func main() {
 hostInfo, _ := host.Info()
 fmt.Println(hostInfo)
}
Salin selepas log masuk

输出

{"hostname":"MacBook-Pro.local","uptime":1619284,"bootTime":1644332729,"procs":301,"os":"darwin","platform":"darwin","platformFamily":"Standalone Workstation","platformVersion":"10.15.5","kernelVersion":"19.5.0","kernelArch":"x86_64","virtualizationSystem":"","virtualizationRole":"","hostId":"7a1a74f2-30fc-4cc1-b439-6b7aef22e45d"}
Salin selepas log masuk

总结

gopsutil 库有非常全面的覆盖单元,包括主机、磁盘、内存、CPU、网络、进程、docker等模块,它能很好地帮助我们获取系统信息。并且 gopsutil 处理了跨平台兼容性问题,对外接口基本保持一致,使用起来比较友好。

Atas ialah kandungan terperinci Adakah anda masih menulis fungsi pemantauan sistem Go anda sendiri?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
go
sumber:Go语言进阶学习
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan