docker容器监控

一、docker介绍

Docker的中文意思就是码头工人,进入到Docker的官方网站后,也可以看到Docker的图标,如下图所示。

这个Docker图标上就是一条鲸鱼,上面有很多集装箱,集装箱就相当于虚拟环境,每个集装箱有自己的虚拟环境,Docker中文意思是码头工人,相当于把集装箱从鲸鱼身上取下来,然后使用这个集装箱的虚拟环境。

Docker搭建虚拟环境包括三个要素,Registry,Contaniner和Image。如下图所示。

从图中可以看出,Registry是一个远程的仓库,从远程的仓库可取拉取一个镜像到本地,拉取镜像后可以运行成一个容器。客户端可以使用docker pull从远程仓库拉取一个镜像,docker run指令可以将一个镜像运行成一个容器,进入这个容器需要使用docker exec指令,可以进入到运行中的容器中,docker build可以把一个设置成功的虚拟环境容器再打包成环境。这系列操作可以通过以下简单实现。

这里的元程仓库是hub.docker.com,这里包括很多的docker镜像。

二、windows中docker的安装

进入docker官网下载地址docker下载,下载Windows版本。

下载之后双击打开,按默认设置点击安装,完成后界面如下,点击close and restart重启完成安装。

进入docker主界面,左下角显示绿色,则表示docker安装成功。

在docker设置中添加镜像网址"registry-mirrors":["https://docker.mirrors.ustc.edu.cn/"]。添加完成后点击右下角蓝色按钮应用设置。

在power shell中输入具体的docker指令。

三、docker实现容器式监控

docker程序还是安装在硬盘上的,随着程序的增加,程序运行时间就会长,需要的内存就会大,硬盘的数据也会多。 这就带来性能上的优化问题。解决内存、硬盘、网络接口速度不能超过限额也就成为一个问题。

也就是,如果多个容器运行,需要收集docker各容器的运行状态和运行信息,也就是需要监控模块的参与。

docker运行的监控原理图如下所示。

图中指示可以使用docker stats去查看每个容器的运行状态。

#docker  stats

使用这个指令后的运行结果如下所示。

对这个结果也可以进行格式化提取,使用—format参数对输出的格式进行初始化。

如单纯提取出ContainerId,指令如下。

docker stats –format “{{.Container}}”

这个指令把docker stats中的第一列的维度Container做为format的参数,然后输出了容器运行的相关信息。

如果输出再添加上CPU的占比信息,这里把Container和CPU的信息以“:”号隔开。

docker stats –format “{{.Container}}:{{.CPUPerc}}”

注意:这里提取CPU的百分比信息,需要把CPU%列维度的名称中“%”替换为Perc,即可。

如果再把内存的占比信息

Docker stats –format “{{.Container}}:{{.CPUPerc}}:{{MemPerc}}”

接下来进入监控的实现,监控实现的时候,不会直接在宿主机中监控,这样不利于管理,因为监控需要提取相关的重要信息,收集信息后还需要使用一些有利的语言工具进行分析,进而进行图形展示。如使用python,matplotlib,tensorflow,web这样的技术架构形成分析界面,这样就需要服务器也要安装这样的资源才能进行分析,cpu的资源又被无端被占用。可以使用docker容器配置环境,进行环境监控。

监控方法的原理图如下所示。

从图中可以得出。需要把Docker stats信息传入到docker容器中,然后在容器安装python,去完成监控信息的分析即可。

解决方法:把docker stats的输出结果放在文件里,文件挂载容器数据卷持久到容器中,运行python程序对数据进行提取。

这里提到了一个技术“挂载”,Docker容器启动的时候,如果要挂载宿主机的一个目录,可以用-v参数指定。可以这样理解,挂载相当于docker的虚拟环境可能使用主机中文件信息。

具体把docker stats的监控信息挂载到docker虚拟机中进行分析的流程如下。

第一步:实时流的获取
docker stats --format "ContainerID:{{.Container}}:CPU%:{{.CPUPerc}}:MEM%:{{.MemPerc}}">info.txt第二步:运行后ctrl+c中止第三步:使用ftp软件下载info.txt文件到本地第四步,写一段程序分解info.txtimport pandas
data=pandas.read_csv("info.txt",sep=":",names=["name1","container_id","name2","cpu%","name3","Mem%"])
data=data[["container_id","cpu%","Mem%"]]
#有几个容器就有几条指令,通过unique()方法对容器进行汇总去重统计
container_length=data["container_id"].unique().size
while True:
print(data.tail(container_length))第五步,接下来,就需要在宿主机建一个文件夹,管理这两个文件,一个是把文件能够在docker虚拟机中执行,一个是收集到的容器信息info.txt。    第六步:现在使用-v实现挂载目录,把宿主机目录挂载到虚拟环境中,需要使用docker pull python3拉取一个python3的容器。然后使用下面的指令进行挂载。
Docker run –it  -v  /home/monitor python /bin/bash
这样可以进入到启动容器中,进入容器后,在这里使用pip3安装pandas软件,使用指令如下。pip install pandas
如图;

第七步:保留进程退出宿主机Ctrl+p+q第八步:先删除宿主机文件info.txt,然后运行docker stats一边收集docker容器的相关信息,一边在宿主机中启动 python程序进行实时流的分析,先重新收集docker容器的相关信息。命令如下。
docker stats
dokcer stats --format "ContainerID:{{.Container}}:CPU%:{{.CPUPerc}}:MEM%:{{.MemPerc}}">/home/monitor/info.tx第九步:再次进入容器,启动python test.py

这里可以看到收集到的实时信息,分析和后续的web展示先略。

四、google方案的图形展示

前面介绍了启动docker stats来收集容器信息,这里也可以不必启动docker stats,可以根据需求监控docker的具体工作目录。Google提供的cadvisor可以监控/var/lib/docker ,第二/sys,第三/var/run,其中var/lib/docker是docker中的相关信息,/sys是系统的相关信息,/var/run是系统运行的相关信息,这些收集的技术的原理图如下图所示。

这里提醒了大家,google使用这个技术默认采用8080端口,这个端口是启动容器中不能占用的端口。监控容器的应用使用cadvisor。

拉取镜像的命令如下。

docker pull google/cadvisor

这里为了更好的验证google/cadvisor,在启动google/cadvisor之前首先需要启动三个centos容器。便于监控使用。启动google/cadvisor容器指令如下。

docker run -it -p 8890:8080 -v /var/run:/var/run -v /var/lib/docker:/var/lib/docker:ro -v /sys:/sys:ro google/cadvisor /bin/bash

启动后,在地址栏输入虚拟机的ip+端口号

如http://192.168.110.148:8890/containers/

进入首页,可以查看整体运行情况。进入首页后,点击第一项:Docker Containers,就可以查看到所有的容器名称,可以点击进入到其中一个容器。

这里可查看容器的运行情况,如下图所示。

这里CPU shares 1024shares表示了CPU进行了限额设置。

比如A容器设置1024,B容器1024C容器1024,A/B/C就可以得到1:1:1,意味着系统平分CPU的占比。

如果A容器设置512,假定启动了centos;B容器设置1024 ,假定启动了apache小程序,C容器设置2048,假设启动 python机器学习。那么A:B:C=1:2:4表示在CPU空闲时间内,C优先级比A/B都高,C占cpu的比率就会大。

具体cpu限额的设置方法,可以在启动容器时设定这个值。指令参数如下。

Docker run --cpu-shares 1024

还可以从前台查看docker服务环境的运行情况,专业术语叫巡检。巡检界面如下图所示。

这里图形显示,显示的内容是实时的,这条曲线也会一直在运动着。

通过google/cadvisor监控查看运转情况的原理图如下 。

docker容器监控相关推荐

  1. docker 容器监控_以简便的方式监控Docker容器中的ADF应用程序

    docker 容器监控 在这篇简短的文章中,我将展示一种简单的方法来确保在Docker容器中运行的ADF应用程序在内存利用率方面是健康的Java应用程序. 我将使用标准工具JConsole,它是计算机 ...

  2. 如何使用Zabbix官方模板轻松实现Docker容器监控?

    感谢王军 ZCP(Zabbix 高级认证专家)翻译!欢迎投稿分享你的使用经验. 本文将介绍通过Zabbix监控Docker容器.使用官方模板 Docker by Zabbix agent2 templ ...

  3. Docker容器监控可视化cAdivisor+InfluxDB+Grafana

    问题 在日常的Docker使用过程中, 要想了解容器当前的运行状况 ,  通过docker stats命令就可以很方便的看到当前宿主机上所有容器的CPU,内存以及网络流量等数据 , 但是, docke ...

  4. Docker 容器监控原理及 cAdvisor 的安装与使用

    生产环境中监控容器的运行状况十分重要,通过监控我们可以随时掌握容器的运行状态,做到线上隐患和问题早发现,早解决.所以今天我就和你分享关于容器监控的知识(原理及工具 cAdvisor). 虽然传统的物理 ...

  5. Docker 容器监控方案随手记

    天气:雨转阴 Docker环境准备 官方安装文档 # 卸载旧 软件 yum remove docker \docker-client \docker-client-latest \docker-com ...

  6. prometheus(普罗米修斯监控)部署、主机监控及docker容器监控

    部署前准备 prometheus相关材料下载 官方下载地址: Prometheus下载地址:https://prometheus.io go下载地址:https://golang.org Grafan ...

  7. Grafana监控Docker容器+K8s集群容器

    文章目录 监控Docker容器 监控K8s集群容器 监控Docker容器 Dashboard ID:10657 原版Json文件:戳我下载 图为修改后Json文件:戳我下载~ 监控K8s集群容器 Da ...

  8. Docker容器安全性分析

    Docker是目前最具代表性的容器技术之一,对云计算及虚拟化技术产生了颠覆性的影响.本文对Docker容器在应用中可能面临的安全问题和风险进行了研究,并将Docker容器应用环境中的安全机制与相关解决 ...

  9. Docker进阶-容器监控cAdvisor+InfluxDB+Granfana

    概述 前面文章介绍使用docker compose组合应用并利用scale快速对容器进行扩容. 由于docker compose启动的服务都在同一台宿主机上,对于一个宿主机上运行多个容器应用时,容器的 ...

最新文章

  1. 3行代码实现从excel中读取出某列元素为所想要的元素集合中的所有行
  2. ProjectManagement::Redmine备份与恢复
  3. 设计模式--适配器(Adapter)模式
  4. Python基础入门:分支及循环
  5. 当我们不为了拿奖,而在做事情的时候
  6. 【shell】Linux shell 之 判断用户输入的变量是否为数字
  7. 第4课 - 深入浅出处理器(续)
  8. 北京曲剧《烟壶》也好看
  9. 再分享 5 个 vs 调试技巧
  10. 互联网公司常用MySQL分库分表方案
  11. menuStrip之MdiWindowListItem判断子窗口是否被打开的方法
  12. axis1 c# 接口 调用_java axis 调用C# webService的例子
  13. 普通索引和唯一索引,难道还分不清
  14. Web前端和后端的区别是什么?如何区分?
  15. 【AC】九度OJ题目1153:括号匹配问题
  16. 20.合并两个有序链表
  17. 从非结构化数据到特色数据指标,AI如何更懂金融?
  18. java天津与深圳,国内最可惜的城市:GDP曾是深圳的38倍,如今GDP被反超万亿!
  19. DataFrame 修改列名
  20. 戴尔服务器安全模式进不去系统,无法进入系统win10戴尔电脑如何进入安全模式...

热门文章

  1. linux服务器修改dns_更改DNS服务器的终极指南
  2. lol峡谷之巅区服务器位置,LOL峡谷之巅专区申请地址一览 峡谷之巅介绍
  3. golang中的gob
  4. img标签的onerror事件(应用以及注意事项)
  5. 操作系统-OS概述(一)
  6. shared_ptr 和 make_shared 的使用(以及qt信号和槽连接)
  7. 《梦境杀手》(Dreamkiller)完整硬盘版[压缩包]
  8. MongoDB安装部署
  9. java leftshift,Java BigInteger shiftLeft()用法及代码示例
  10. Manjaro双网卡网速很慢