Maison >développement back-end >Golang >Êtes-vous toujours en train d'écrire vos propres fonctions de surveillance du système Go ?
La méthode ci-dessus peut répondre aux exigences, mais nous n'avons pas besoin de réinventer la roue car il existe déjà une bibliothèque tierce assez complète qui réalise ces exigences de collection pour nous, c'est gopsutil.
psutil (utilitaires de processus et système) est une bibliothèque multiplateforme utilisée pour obtenir des informations sur l'utilisation des processus et du système (CPU, mémoire, disque, réseau, capteurs) en Python, et gopsutil est son Allez en version linguistique.
gopsutil nous protège des différences entre les différents systèmes et a une bonne portabilité.
Liste prise en charge
Liste de support partiel
De plus, ce projet transplante la structure C vers la structure Go. Il n'y a pas de code cgo dans son implémentation, ce qui est plus propice à la compilation croisée.
gopsutil a actuellement des versions v3 et v2, et il n'y a aucune garantie de compatibilité ascendante, il y a donc deux façons de l'utiliser
import ( // "github.com/shirou/gopsutil/v3/mem" // to use v3 "github.com/shirou/gopsutil/mem" )
Par exemple, si nous voulons afficher les informations sur l'utilisation de la mémoire système , il peut être obtenu des manières suivantes
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) }
Le résultat est
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}
Une chose qui est plus conviviale à propos du package gopsutil est que la plupart des fonctions de collection renvoient un objet de structure, et elles implémentent toutes le fmt Interface .Stringer, donc lors de l'impression, ils seront sortis au format json.
Par exemple, dans l'exemple ci-dessus, mem.VirtualMemory renvoie la structure VirtualMemoryStat, qui appelle la fonction json.Marshal() dans la méthode 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) }
gopsutil est divisé en différents sous-packages via différentes unités de collecte. En introduisant différents sous-packages lors de l'utilisation, des méthodes associées peuvent être appelées.
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" )
Par exemple, si nous voulons obtenir des informations sur l'hôte, nous devons introduire le sous-package 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 处理了跨平台兼容性问题,对外接口基本保持一致,使用起来比较友好。
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!