Heim >Backend-Entwicklung >Golang >Schreiben Sie immer noch Ihre eigenen Go-Systemüberwachungsfunktionen?
Die obige Methode kann die Anforderungen erfüllen, aber wir müssen das Rad nicht neu erfinden, da es bereits eine ziemlich vollständige Bibliothek eines Drittanbieters gibt, die diese Sammlungsanforderungen für uns umsetzt, nämlich gopsutil.
psutil (Prozess- und Systemdienstprogramme) ist eine plattformübergreifende Bibliothek, die zum Abrufen von Informationen zur Prozess- und Systemauslastung (CPU, Speicher, Festplatte, Netzwerk, Sensoren) in Python verwendet wird. Gopsutil ist die dazugehörige Go-Sprachversion.
gopsutil schützt uns vor Unterschieden in verschiedenen Systemen und ist gut portierbar.
Unterstützte Liste
Teilweise unterstützte Liste
Darüber hinaus überträgt dieses Projekt die C-Struktur in die Go-Struktur. In seiner Implementierung gibt es keinen CGO-Code, was der Kreuzkompilierung förderlicher ist.
gopsutil gibt es derzeit in den Versionen v3 und v2, und es gibt keine Abwärtskompatibilitätsgarantie, daher gibt es zwei Möglichkeiten, es zu verwenden
import ( // "github.com/shirou/gopsutil/v3/mem" // to use v3 "github.com/shirou/gopsutil/mem" )
Zum Beispiel, wenn wir Informationen zur Systemspeichernutzung anzeigen möchten , es kann auf folgende Weise abgerufen werden
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) }
Das Ergebnis ist
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}
Eine benutzerfreundlichere Sache am gopsutil-Paket ist, dass die meisten Sammlungsfunktionen ein Strukturobjekt zurückgeben und alle das FMT implementieren .Stringer-Schnittstelle, daher werden sie beim Drucken im JSON-Format ausgegeben.
Im obigen Beispiel gibt mem.VirtualMemory beispielsweise die VirtualMemoryStat-Struktur zurück, die die Funktion json.Marshal() in der Methode String() aufruft.
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 ist über verschiedene Sammeleinheiten in verschiedene Unterpakete unterteilt. Durch die Einführung verschiedener Unterpakete während der Verwendung können verwandte Methoden aufgerufen werden.
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" )
Wenn wir beispielsweise Hostinformationen erhalten möchten, müssen wir das Unterpaket github.com/shirou/gopsutil/v3/host einführen
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 处理了跨平台兼容性问题,对外接口基本保持一致,使用起来比较友好。
Das obige ist der detaillierte Inhalt vonSchreiben Sie immer noch Ihre eigenen Go-Systemüberwachungsfunktionen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!