Golang Docker SDK实战: 获取容器进程信息(CPU、内存等)
Golang Docker SDK实战: 获取容器进程信息(CPU、内存等)
本篇教程将演示如何使用Golang Docker SDK中的ContainerTop方法获取容器内运行进程的详细信息,包括进程ID、命令、CPU使用率、内存使用情况等。
以下是完整的代码示例:
package main
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'
psArgs := []string{'-eo', 'pid,cmd,%cpu,%mem,rss,vsz'}
resp, err := cli.ContainerTop(context.Background(), containerID, psArgs)
if err != nil {
panic(err)
}
// 解析进程信息
fmt.Println('PID\t命令\tCPU使用率\t内存使用率\tRSS\tVSZ')
for _, proc := range resp.Processes {
pid := proc[0]
cmd := proc[1]
cpu := proc[2]
mem := proc[3]
rss := proc[4]
vsz := proc[5]
fmt.Printf('%s\t%s\t%s\t%s\t%s\t%s\n', pid, cmd, cpu, mem, rss, vsz)
}
}
代码解析:
-
导入必要包:
context: 用于管理goroutine的上下文fmt: 用于格式化输出github.com/docker/docker/api/types: Docker API的数据结构github.com/docker/docker/client: 与Docker守护进程交互的客户端
-
创建Docker客户端:
- 使用
client.NewClientWithOpts(client.FromEnv)创建Docker客户端,并从环境变量中读取配置。
- 使用
-
指定容器ID和ps命令参数:
- 将
containerID替换为你要获取信息的容器ID。 psArgs定义了传递给ps命令的参数,用于筛选要获取的进程信息。这里我们使用:-eo: 指定输出格式pid,cmd,%cpu,%mem,rss,vsz: 选择要获取的字段,包括进程ID、命令、CPU使用率、内存使用率、常驻内存(RSS)和虚拟内存(VSZ)。
- 将
-
调用ContainerTop方法:
- 使用
cli.ContainerTop(context.Background(), containerID, psArgs)方法获取容器的进程信息。
- 使用
-
解析并输出进程信息:
- 遍历
resp.Processes中的每个进程信息。 - 解析每个进程的字段,并使用
fmt.Printf格式化输出。
- 遍历
使用示例:
- 将
your_container_id替换为目标容器ID。 - 运行代码:
go run main.go
这将打印出目标容器内所有进程的详细信息,包括进程ID、命令、CPU使用率、内存使用率等。
**总结:**
通过本教程,你学会了如何使用Golang Docker SDK轻松获取容器内进程的详细信息。你可以根据实际需求修改代码,例如筛选特定进程或将信息保存到数据库中。
原文地址: https://www.cveoy.top/t/topic/f2nz 著作权归作者所有。请勿转载和采集!