Go語言通過Docker Go語言SDK獲取docker stats的資訊
阿新 • • 發佈:2020-09-09
一、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拿自己想要的資訊吧!