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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM