一、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拿自己想要的信息吧!
