>  기사  >  백엔드 개발  >  还在自己写 Go 系统监控函数吗

还在自己写 Go 系统监控函数吗

Go语言进阶学习
Go语言进阶学习앞으로
2023-07-24 15:03:36629검색
Go 개발 요구 사항이 있는 경우: 호스트의 하드 디스크, CPU, 메모리, 프로세스 등의 사용량을 얻으려면 어떻게 하시겠습니까? 더 간단한 아이디어는 os/exec를 사용하여 ps, cd 및 top과 같은 특정 명령을 실행한 다음 해당 실행 결과를 분석하는 것입니다. 물론, 모든 것이 파일이라는 Linux의 생각에 기초하여, 보다 직접적인 접근 방식은 /proc 디렉토리에 있는 파일과 같은 관련 파일의 내용을 읽는 것입니다.

위의 방법은 요구 사항을 충족할 수 있지만 이러한 수집 요구 사항을 구현하는 상당히 완전한 타사 라이브러리가 이미 있기 때문에 바퀴를 다시 만들 필요는 없습니다. 바로 gopsutil입니다.

gopsutil 소개

psutil(프로세스 및 시스템 유틸리티)은 Python에서 프로세스 및 시스템 사용률(CPU, 메모리, 디스크, 네트워크, 센서) 정보를 얻는 데 사용되는 크로스 플랫폼 라이브러리이며, gopsutil은 해당 라이브러리입니다. 언어 버전으로 이동하세요.

gopsutil은 다양한 시스템의 차이로부터 우리를 보호하고 이식성이 좋습니다.

지원 목록

  • FreeBSD i386/amd64/arm
  • Linux i386/amd64/arm(라즈베리 파이)
  • Windows i386/amd64/arm/arm64
  • 다윈 i386/amd64
  • OpenBSD amd64
  • Solaris amd64

부분 지원 목록

  • CPU
  • Linux RISC-V의 호스트

또한 이 프로젝트는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 Go语言进阶学习에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제
이전 기사:다음 기사: