天天看點

cmetric

介紹

sentinel,gosputil 很多開源庫缺少容器内部擷取cpu,記憶體名額資訊的方法。

cmetric 是一個在容器内部執行可擷取到容器的cpu占用率和記憶體的工具。使用極其簡單。

HobbyBear/cmetric: a tool for getting metrics in containers (github.com)

使用

在容器環境擷取的名額是相對于容器而言的,在主控端環境擷取到的相對于是主控端的名額。

cpu := cmetric.CurrentCpuUsage()
		fmt.Println("cpu ", cpu)
		memory := cmetric.CurrentMemoryUsage()
		fmt.Println("memory ", memory/(1024*1024))
           

原理簡析

容器環境下,cpu,記憶體都歸cgroup管理。

主控端環境下,借用了開源工具庫gosputil,擷取主控端的記憶體,cpu。

memory

容器環境下,memory的讀取可讀取/sys/fs/cgroup/memory 下的usage檔案可知容器的記憶體占用。

cpu

容器環境下,參考了docker stats計算cpu的方法,/sys/fs/cgroup/cpu下 找到usage,

取樣兩次usage獲得內插補點,除以與相同間隔内/proc/stat獲得的系統cpu占用內插補點,最後乘以線上cpu數獲得。