Golang Docker SDK 获取容器 CPU 百分比
在 Golang 的 Docker SDK 中,可以使用'ContainerStats' 方法来获取容器的 CPU 百分比。该方法返回一个'types.Stats' 对象,其中包含了容器的各种统计信息,包括 CPU 使用情况。
要获取容器的 CPU 百分比,可以使用'Stats' 对象中的'CPUStats' 字段。该字段是一个'types.CPUStats' 对象,其中包含了容器的 CPU 使用情况。在'CPUStats' 对象中,有一个'CPUUsage' 字段,它是一个'types.CPUUsage' 对象,包含了容器的 CPU 使用情况的详细信息。
在'CPUUsage' 对象中,有一个'TotalUsage' 字段,它表示容器的总 CPU 使用时间。还有一个'UsageInKernelmode' 字段,表示容器在内核模式下的 CPU 使用时间。通过计算这两个字段的差值,就可以得到容器的 CPU 百分比。
具体的代码示例如下:
import (
"context"
"fmt"
"github.com/docker/docker/api/types"
"github.com/docker/docker/client"
)
func main() {
cli, err := client.NewClientWithOpts(client.FromEnv)
if err != nil {
panic(err)
}
containerID := "your-container-id"
stats, err := cli.ContainerStats(context.Background(), containerID, false)
if err != nil {
panic(err)
}
var previousCPU, previousSystem uint64
for {
var stat types.Stats
if err := stats.Decode(&stat); err != nil {
panic(err)
}
cpuDelta := stat.CPUStats.CPUUsage.TotalUsage - previousCPU
systemDelta := stat.CPUStats.SystemUsage - previousSystem
cpuPercent := float64(cpuDelta) / float64(systemDelta) * 100
fmt.Printf("Container CPU usage: %.2f%%
", cpuPercent)
previousCPU = stat.CPUStats.CPUUsage.TotalUsage
previousSystem = stat.CPUStats.SystemUsage
}
}
以上代码会不断地获取容器的 CPU 使用情况,并计算 CPU 百分比,然后打印出来。注意替换'containerID' 为你要监控的容器的 ID。
原文地址: https://www.cveoy.top/t/topic/fUi3 著作权归作者所有。请勿转载和采集!