위의 방법은 요구 사항을 충족할 수 있지만 이러한 수집 요구 사항을 구현하는 상당히 완전한 타사 라이브러리가 이미 있기 때문에 바퀴를 다시 만들 필요는 없습니다. 바로 gopsutil입니다.
psutil(프로세스 및 시스템 유틸리티)은 Python에서 프로세스 및 시스템 사용률(CPU, 메모리, 디스크, 네트워크, 센서) 정보를 얻는 데 사용되는 크로스 플랫폼 라이브러리이며, gopsutil은 해당 라이브러리입니다. 언어 버전으로 이동하세요.
gopsutil은 다양한 시스템의 차이로부터 우리를 보호하고 이식성이 좋습니다.
지원 목록
부분 지원 목록
또한 이 프로젝트는 C 구조를 Go 구조로 이식하여 구현에 cgo 코드가 없으므로 크로스 컴파일에 더 도움이 됩니다.
gopsutil에는 현재 v3 및 v2 버전이 있으며 이전 버전과의 호환성 보장이 없으므로 두 가지 방법으로 사용할 수 있습니다.
import ( // "github.com/shirou/gopsutil/v3/mem" // to use v3 "github.com/shirou/gopsutil/mem" )
예를 들어 시스템 메모리 사용량 정보를 보려면 , 다음 방법으로 얻을 수 있습니다.
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) }
결과는
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}
입니다. gopsutil 패키지에 대해 더 친숙한 점은 대부분의 수집 함수가 구조 객체를 반환하고 모두 fmt를 구현한다는 것입니다. .Stringer 인터페이스이므로 인쇄 시 json 형식으로 출력됩니다.
예를 들어 위의 예에서 mem.VirtualMemory는 String() 메서드에서 json.Marshal() 함수를 호출하는 VirtualMemoryStat 구조를 반환합니다.
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) }
gopsutil은 다양한 수집 단위를 통해 다양한 하위 패키지로 구분되어 있으며, 사용 중에 다양한 하위 패키지를 도입하여 관련 메서드를 호출할 수 있습니다.
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" )
예를 들어 호스트 정보를 얻으려면 github.com/shirou/gopsutil/v3/host 하위 패키지
를 도입해야 합니다.import ( "fmt" "github.com/shirou/gopsutil/v3/host" ) func main() { hostInfo, _ := host.Info() fmt.Println(hostInfo) }
输出
{"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"}
gopsutil 库有非常全面的覆盖单元,包括主机、磁盘、内存、CPU、网络、进程、docker等模块,它能很好地帮助我们获取系统信息。并且 gopsutil 处理了跨平台兼容性问题,对外接口基本保持一致,使用起来比较友好。
위 내용은 还在自己写 Go 系统监控函数吗의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!