ホームページ  >  記事  >  バックエンド開発  >  まだ独自の Go システム監視関数を作成していますか?

まだ独自の Go システム監視関数を作成していますか?

Go语言进阶学习
Go语言进阶学习転載
2023-07-24 15:03:36635ブラウズ
Go 開発要件がある場合、ホストのハードディスク、CPU、メモリ、プロセスなどの使用状況を取得する場合、どうしますか?より単純なアイデアは、os/exec を使用して ps、cd、top などの特定のコマンドを実行し、その実行結果を分析することです。もちろん、すべてはファイルであるという Linux の考えに基づいて、より直接的なアプローチは、/proc ディレクトリ内のファイルなどの関連ファイルの内容を読み取ることです。

#上記の方法は要件を満たすことができますが、これらを実現する完全なサードパーティ ライブラリがすでに存在するため、車輪を再発明する必要はありません。私たちの収集要件。gopsutil です。

gopsutil 概要

psutil (プロセス ユーティリティとシステム ユーティリティ) は、Python でプロセス ユーティリティとシステム ユーティリティを取得するためのクロスプラットフォーム ライブラリです ( CPU、メモリ、ディスク、ネットワーク、センサーなどの情報が含まれており、gopsutil はその Go 言語バージョンです。

gopsutil は、さまざまなシステムの違いから保護し、移植性に優れています。

サポートされているリスト

  • #FreeBSD i386/amd64/arm
  • ##Linux i386/amd64/arm(raspberry pi)
  • Windows i386/amd64/arm/arm64
  • Darwin i386/amd64
  • OpenBSD amd64
  • Solaris amd64
部分的なサポート リスト

  • DragonFly BSD 上の CPU
  • ##Linux RISC-V# 上のホスト
  • さらに、このプロジェクトは C 構造を Go 構造に移植しており、その実装には cgo コードが含まれていないため、クロスコンパイルが容易になります。

使用方法

gopsutil には現在 v3 と v2 のバージョンがあり、下位互換性の保証はないため、使用方法は 2 つあります

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 は VirtualMemoryStat 構造体を返し、これが String() メソッドの json.Marshal() 関数を呼び出します。

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はGo语言进阶学习で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。