介紹
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數獲得。