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)
	}
}

代码解析:

  1. 导入必要包:

    • context: 用于管理goroutine的上下文
    • fmt: 用于格式化输出
    • github.com/docker/docker/api/types: Docker API的数据结构
    • github.com/docker/docker/client: 与Docker守护进程交互的客户端
  2. 创建Docker客户端:

    • 使用client.NewClientWithOpts(client.FromEnv)创建Docker客户端,并从环境变量中读取配置。
  3. 指定容器ID和ps命令参数:

    • containerID替换为你要获取信息的容器ID。
    • psArgs定义了传递给ps命令的参数,用于筛选要获取的进程信息。这里我们使用:
      • -eo: 指定输出格式
      • pid,cmd,%cpu,%mem,rss,vsz: 选择要获取的字段,包括进程ID、命令、CPU使用率、内存使用率、常驻内存(RSS)和虚拟内存(VSZ)。
  4. 调用ContainerTop方法:

    • 使用cli.ContainerTop(context.Background(), containerID, psArgs)方法获取容器的进程信息。
  5. 解析并输出进程信息:

    • 遍历resp.Processes中的每个进程信息。
    • 解析每个进程的字段,并使用fmt.Printf格式化输出。

使用示例:

  1. your_container_id替换为目标容器ID。
  2. 运行代码:

go run main.go


这将打印出目标容器内所有进程的详细信息,包括进程ID、命令、CPU使用率、内存使用率等。

**总结:**

通过本教程,你学会了如何使用Golang Docker SDK轻松获取容器内进程的详细信息。你可以根据实际需求修改代码,例如筛选特定进程或将信息保存到数据库中。
Golang Docker SDK实战: 获取容器进程信息(CPU、内存等)

原文地址: https://www.cveoy.top/t/topic/f2nz 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录