Skip to content

Bibliothèque d'informations système gopsutils

Dépôt : shirou/gopsutil: psutil for golang (github.com)

Documentation : gopsutil package - github.com/shirou/gopsutil/v3 - Go Packages

Lors du développement, il est souvent nécessaire d'obtenir les informations système de la plateforme sur laquelle le programme s'exécute. Ce processus implique des appels système pour différents systèmes d'exploitation, et l'adaptation nécessite beaucoup de travail et de temps. gopsutils est une bibliothèque d'informations système développée en Go, compatible avec de nombreux systèmes d'exploitation mainstream. Elle supporte actuellement les architectures suivantes :

  • FreeBSD i386/amd64/arm
  • Linux i386/amd64/arm(raspberry pi)
  • Windows i386/amd64/arm/arm64
  • Darwin amd64/arm64
  • OpenBSD amd64 (Merci @mpfz0r!)
  • Solaris amd64 (développé et testé sur SmartOS/Illumos, Merci @jen20!)

Support partiel:

  • CPU sur DragonFly BSD
  • host sur Linux RISC-V

Cet outil supporte également l'obtention d'informations système des conteneurs Docker.

Installation

Utiliser la commande go get

go get github.com/shirou/gopsutil/v3

TIP

Cet article a été écrit sur Windows 10, les résultats peuvent varier selon les systèmes.

Hôte

Les API liées à l'hôte sont fournies par le package host, adaptées pour différents systèmes d'exploitation.

Informations

go
func Info() (*InfoStat, error)
go
func main() {
  info, _ := host.Info()
  JsonPrint(info)
}
json
{
  "hostname": "LAPTOP-8C92S0HL",
  "uptime": 490854,
  "bootTime": 1683909241,
  "procs": 195,
  "os": "windows",
  "platform": "Microsoft Windows 10 Home China",
  "platformFamily": "Standalone Workstation",
  "platformVersion": "10.0.19044.2251 Build 19044.2251",
  "kernelVersion": "10.0.19044.2251 Build 19044.2251",
  "kernelArch": "x86_64",
  "virtualizationSystem": "",
  "virtualizationRole": "",
  "hostId": "ba697a8c-c555-4329-905c-adc6cb650dde"
}

Les autres API de ce package sont des décompositions de Info(), elles ne seront pas démontrées ici.

CPU

Les informations CPU sont fournies par le package cpu, qui propose principalement 4 fonctions pour obtenir les informations CPU, le nombre de cœurs, le taux d'utilisation et les time slices.

Informations

go
func Info() ([]InfoStat, error)
go
func main() {
  info, _ := cpu.Info()
  JsonPrint(info)
}
json
[
  {
    "cpu": 0,
    "vendorId": "GenuineIntel",
    "family": "198",
    "model": "",
    "stepping": 0,
    "physicalId": "BFEBFBFF000806EC",
    "coreId": "",
    "cores": 8,
    "modelName": "Intel(R) Core(TM) i7-8565U CPU @ 1.80GHz",
    "mhz": 1992,
    "cacheSize": 0,
    "flags": [],
    "microcode": ""
  }
]

Nombre de cœurs

go
func Counts(logical bool) (int, error)
go
func main() {
   cores, _ := cpu.Counts(true)
   JsonPrint(cores)
}
8

Taux d'utilisation

go
func Percent(interval time.Duration, percpu bool) ([]float64, error)
go
func main() {
   percents, _ := cpu.Percent(time.Second*5, true)
   JsonPrint(percents)
}
json
[
  4.643962848297214, 4.049844236760125, 5.607476635514018, 5.29595015576324,
  3.115264797507788, 2.803738317757009, 3.115264797507788, 2.1806853582554515
]

Time slices

go
func Times(percpu bool) ([]TimesStat, error)
go
func main() {
  times, _ := cpu.Times(true)
  JsonPrint(times)
}

Disque

Les fonctions liées au disque sont fournies par le package disk, certaines sont conçues pour Linux.

Taux d'utilisation

go
func Usage(path string) (*UsageStat, error)
go
func main() {
  use, _ := disk.Usage("/")
  JsonPrint(use)
}
json
{
  "path": "/",
  "fstype": "",
  "total": 274152288256,
  "free": 251611193344,
  "used": 22541094912,
  "usedPercent": 8.22210715635224,
  "inodesTotal": 0,
  "inodesUsed": 0,
  "inodesFree": 0,
  "inodesUsedPercent": 0
}

Partitions

go
func Partitions(all bool) ([]PartitionStat, error)
go
func main() {
  part, _ := disk.Partitions(true)
  JsonPrint(part)
}
json
[
  {
    "device": "C:",
    "mountpoint": "C:",
    "fstype": "NTFS",
    "opts": ["rw", "compress"]
  },
  {
    "device": "D:",
    "mountpoint": "D:",
    "fstype": "NTFS",
    "opts": ["rw", "compress"]
  }
]

IO

go
func IOCounters(names ...string) (map[string]IOCountersStat, error)
go
func main() {
  part, _ := disk.IOCounters("/")
  JsonPrint(part)
}

Mémoire

Les API liées à la mémoire sont fournies par le package mem

Informations

go
func VirtualMemory() (*VirtualMemoryStat, error)
go
func main() {
  memory, _ := mem.VirtualMemory()
  JsonPrint(memory)
}

Mémoire d'échange

go
func SwapMemory() (*SwapMemoryStat, error)
go
func main() {
  memory, _ := mem.SwapMemory()
  JsonPrint(memory)
}

Périphériques d'échange

go
func SwapDevices() ([]*SwapDevice, error)
go
func main() {
  devices, _ := mem.SwapDevices()
  JsonPrint(devices)
}

Réseau

Processus

Golang by www.golangdev.cn edit