Go语言通过Docker Go语言SDK获取docker stats的信息
一、Docker stats介绍
docker stats是docker提供的一个监控工具,非常的好用,之前一篇博客中简单介绍来了一下,可以先去简单看看docker stats 介绍
二、程序获取监控信息
package main
import (
"bytes"
"context"
"fmt"
"github.com/docker/docker/api/types"
"github.com/docker/docker/client"
)
func main() {
//获取ctx
ctx := context.Background()
//cli客户端对象
cli, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation())
if err != nil {
panic(err)
}
//获取容器id 这个其实docker ps那个命令,不过我们只需要容器id
containers, err := cli.ContainerList(ctx, types.ContainerListOptions{})
if err != nil {
panic(err)
}
//遍历获取到的容器
for _, container := range containers {
fmt.Println("--------容器ID-------")
fmt.Println(container.ID)
fmt.Println(container.Image)
fmt.Println(container.ImageID)
fmt.Println("根据容器id获取容器的stats")
//通过cli的ContainerStats方法可以获取到 docker stats命令的详细信息,其实是一个容器监控的方法
//这个方法返回了容器使用CPU 内存 网络 磁盘等诸多信息
containerStats, err := cli.ContainerStats(ctx, container.ID ,false)
if err != nil {
panic(err)
}
/**
ContainerStats的返回的结构如下 注意这个Body的类型是io.ReadCloser 好奇怪的类型 下面我们给他转成json
type ContainerStats struct {
Body io.ReadCloser `json:"body"`
OSType string `json:"ostype"`
}
*/
fmt.Println(containerStats)
fmt.Println("containerStats.Body的内容是: ",containerStats.Body)
buf := new(bytes.Buffer)
//io.ReadCloser 转换成 Buffer 然后转换成json字符串
buf.ReadFrom(containerStats.Body)
newStr := buf.String()
fmt.Printf(newStr)
}
}
执行结果如下:
基本数据全都有,慢慢解析json拿自己想要的信息吧!
分类:
Docker
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!