日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

libvirt go使用

發布時間:2023/12/20 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 libvirt go使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

需求

通常在云環境中,為了保證云平臺中虛擬機的正常運行,基本都需要這樣一個功能,就是收集虛擬機的監控數據,比如cpu的使用率、內存的使用率、磁盤io、網絡io等基本信息。可以利用這些信息及時調整云平臺環境中出現的一些問題,從而實現保證VM的正常運行。

原理

說到KVM管理工具,首先應該想到的就是libvirt,因為目前對KVM使用最為廣泛的管理工具(應用程序接口)就是libvirt。Libvirt本身構建于一種抽象的概念上,它為受支持的虛擬機監控程序實現常用功能提供通用的API。Libvirt提供了操作KVM的原生層接口,可以實現對虛擬機的基本管理操作。Libvirt庫用C實現,libvirt.org/go/libvirt就是基于libvirt API的golang語言綁定工具包,通過該包可以實現對VM日常管理和監控數據的獲取

virsh命令

//查看幫助 [root@dev14-202 ~]# virsh --help//查看某個參數幫助 [root@dev14-202 ~]# virsh list --help//查看所有虛擬機 [root@dev14-202 ~]# virsh list --allId Name State ----------------------------------------------------27 shengborun running28 X-ray0 running- generic shut off- generic-2 shut off

示例代碼

通過libvirt庫的go語言版本獲取內存&CPU&磁盤信息

package mainimport ("fmt""libvirt.org/go/libvirt" )func main() {fmt.Println("main")vName := "shengborun"conn, err := libvirt.NewConnect("qemu:///system")if err != nil {fmt.Println("err", err)return}defer conn.Close()// 通過虛擬機名稱獲取其全部狀態dob, err := conn.LookupDomainByName(vName)if err != nil {fmt.Println("err", err)return}dobs := make([]*libvirt.Domain, 0)dobs = append(dobs, dob)dstats, err := conn.GetAllDomainStats(dobs, 0x3FE, libvirt.CONNECT_GET_ALL_DOMAINS_STATS_ACTIVE)if err != nil {fmt.Println("err", err)return}fmt.Println("dstats", dstats)// 獲取所有開啟的虛擬機doms, err := conn.ListAllDomains(libvirt.CONNECT_LIST_DOMAINS_ACTIVE)if err != nil {fmt.Println("err", err)}fmt.Printf("%d running domains:\n", len(doms))for _, dom := range doms {name, err := dom.GetName()if err == nil {fmt.Printf(" %s\n", name)}if name != vName {continue}info, err := dom.GetInfo()fmt.Println("GetInfo", info, err)//內存利用率// get tag 4:剩余 & 5:總共meminfo, err := dom.MemoryStats(10, 0)fmt.Println("MemoryStats", meminfo, err)//磁盤利用率-錯誤值(都是最大值)diskinfo, err := dom.GetBlockInfo("hda", 0)fmt.Println("DiskStats", diskinfo, err)blockinfo, err := dom.BlockStats("hda")fmt.Println("BlockStats", blockinfo, err)//go版本不支持guestinfo, err := dom.GetGuestInfo(libvirt.DOMAIN_GUEST_INFO_DISKS, 0)fmt.Println("GetGuestInfo", guestinfo, err)//dom.GetCPUStats()dom.Free()} }

運行結果

[root@dev14-202 xf]# ./main main dstats [{0xc00001a0f0 <nil> 0xc0000180c0 0xc000182000 [{true 1 true 255426290000000 true 0 false false false 0} {true 1 true 254730690000000 true 0 false false false 0} {true 1 true 256252940000000 true 0 false false false 0} {true 1 true 256985880000000 true 0 false false false 0}] [{true vnet1 true 463730831316 true 374389891 true 0 true 0 true 31193204405 true 163230349 true 0 true 0}] [{true hda false 0 true /img/shenborui.img true 5612365 true 153443550208 true 1082302480999 true 4825156 true 198678954496 true 1128580165176 true 2500891 true 2791494625571 false 0 true 103292866048 true 107374182400 true 107390828544}] <nil> <nil> <nil>}] 5 running domains:guestfs-n0ahsgobvhzpl0hjguestfs-25g102zflirduv76X-ray0shengborun GetInfo &{1 8392704 8392704 4 1035293710000000} <nil> MemoryStats [{6 8392704} {0 1312160} {1 3210408} {2 240301} {3 6159022712} {4 2950908} {5 8175488} {9 1641288341} {7 8442800}] <nil> DiskStats &{107374182400 107390828544 107390828544} <nil> BlockStats &{true 153443550208 true 5612365 false 0 true 198678954496 true 4825156 false 0 false 0 false 0 false 0} <nil> GetGuestInfo <nil> virError(Code=3, Domain=0, Message='Function 'virDomainGetGuestInfo' not available in the libvirt library used during Go build')guestfs-kvxmpg5vksa4shu1

總結

以上是生活随笔為你收集整理的libvirt go使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。