ibcadmin 发表于 2019-10-24 09:48:29

你必须知道的容器监控 (1) Docker自带子命令与Weave Scope

<p>本篇已参加《.NET Core on K8S学习实践系列文章索引》,可以点击查看更多容器化技能相干系列文章。本篇会先容几个目前比较常用且流行的容器监控工具,首先我们来看看Docker自带的几个监控子命令:ps、top以及stats,然后是一个功能更强的开源监控工具Weave Scope。</p>
<p># 实行情况:阿里云ECS主机,CentOS 7.4</p>
<h1>一、Docker自带监控子命令</h1>
<h2>1.1 ps</h2>
<p>  想必只要我们看过一点docker的文章,就应该都知道docker ps这个命令,它使我们可以方便的查看现在正在运行的所有容器实例。</p>

# docker ps

<p>  实行后效果如下图:</p>
<p>  <div align="center"></div></p>
<p>  其实,它等价于下面两句命令:</p>

# docker container ps
# docker container ls

<h2>1.2 top</h2>
<p>  假如我们想要相识某个容器中到底运行了哪些进程,可以通过top命令来查询。</p>

# docker top container_name

<p>  这里假设我们想查询exceptionless_api这个容器中运行了哪些进程,通过以下命令查询:</p>

# docker top exceptionless_api_1

<p>  <div align="center"></div></p>
<p>  可以看到,在exceptionless_api_1这个容器中只运行了一个进程,该进程是一个.NET Core应用程序,其命令为:dotnet Exceptionless.Web.dll。</p>
<p>  假如想要看到更多信息好比状态、启动时间等等,可以加上-au:(当然可以参阅Linux ps命令的参数加上更多参数体现特定信息)</p>

# docker top exceptionless_api_1 -au

<p>  <div align="center"></div> </p>
<p>  从上图可以看到,该进程对于CPU和内存的占用量。</p>
<h2>1.3 stats</h2>
<p>  假如我们想要查询每个容器对于各种资源的使用情况,那么可以直接使用docker stats,这是一个强大的命令,默认会体现一个<strong>实时变革</strong>的列表,以体现每个容器实例的CPU使用率、内存使用量以及可用量等等。</p>
<p>  <div align="center"></div></p>
<blockquote>
<p><strong>Note:</strong>可以看到上图中内存的Limit都是3.7G,这是因为在容器启动时没有特殊指定内存Limit,所以这里都会默认体现Host主机的总内存量(这里我的阿里云ECS主机是4G的内存设置),但并不意味着每个容器都能使用到这么多的内存。因此,我们完全可以为差别的容器实例设置差别的资源限定值,我也有写一篇文章《Docker资源限定学习与验证》。</p>
</blockquote>
<p>   可以看到默认列表是基于容器ID来分列的,其实并未便于我们查看某个具体容器的资源使用情况,我们可以加上具体容器名字来定位和查看详情:</p>

# docker stats exceptionless_api_1

<p>  <div align="center"></div></p>
<h1>二、强大监控工具Weave Scope</h1>
<h2>2.1 安装与运行Weave Scope</h2>
<p>  Weave Scope 是 Docker 和 Kubernetes 可视化监控工具。Scope 提供了至上而下的集群根本设施和应用的完整视图,用户可以轻松对分布式的容器化应用进行实时监控和题目诊断。</p>
<p>  Weave Scope的GitHub所在为:https://github.com/weaveworks/scope</p>
<p>  我们可以通过以下脚本安装运行Weave Scope:</p>

# curl -L git.io/scope -o /usr/local/bin/scope
# chmod a+x /usr/local/bin/scope
# scope lanuch

<p>  <div align="center"></div></p>
<p>   看到上图中的提示信息,代表你已经乐成启动了Weave Scope。</p>
<h2>2.2 监控容器</h2>
<p>  Weave Scope默认的端口号绑定的是4040,因此我们可以直接访问http://:4040就可以看到如下图所示的界面:</p>
<p>   <div align="center"></div></p>
<p>   从上图中可以看到,目前我的Host中有哪些容器实例,他们之间的关联是什么样的。好比这里我有一个Exceptionless的容器实例群,包罗UI、API、Job、ElasticSearch、Kibna以及Redis。其中UI和其他容器没有关联关系,而API、Job、Kibna以及Redis都互有接洽。</p>
<p>  别的,Weave Scope另有本身的容器,因为我们的Weave Scope也是容器运行的,点击筛选“System containers”就会体现Weave本身的容器了:</p>
<p>  <div align="center"></div></p>
<p>   默认情况下,Weave提供了CPU占用率和内存使用量这两个关键指标的监控,我们可以选择差别的指标进行查看:</p>
<p>  好比这里我选中Memory,Weave会采用水位高低的体现方式来展示内存使用量;同理,CPU占用率也是一样。</p>
<p>   <div align="center"></div></p>
<p>   假如想查看某个容器的具体信息,可以单击该容器的图标,这里我们点击exceptionless_elasticsearch这个容器,可以看到如下图所示的具体信息:</p>
<p>   <div align="center"></div></p>
<p>   从上图可以看到详情主要包罗两个部门:</p>
<p>  (1)Status:CPU、内存实时占用率以及汗青曲线(注意CPU和内存那条线不愿定都是直的,是曲线哟);</p>
<p>  (2)Info:容器镜像名称、启动命令、网络、状态等信息;</p>
<p>   滚动下拉还可以看到如下图所示的信息:</p>
<p>  <div align="center"></div></p>
<p>   从上图可以看到容器中正在运行的进程及其资源占用情况。点开Image,还会看到更具体的镜像信息。</p>
<p>   别的,我们还看到了容器详情上面有一排按钮,可以支持我们对容器进行操纵,从而不再必要去记着那些docker attach等命令。</p>
<p>  <div align="center"></div></p>
<p>   第一个图标是attach,点击可以attach容器的启动进程,等价于:docker attach。</p>
<p>   第二个图标是打开shell,点击可以进入容器中,等价于:docker exec。</p>
<p>   反面三个代表restart重启容器,pause暂停容器 及 stop停止容器。</p>
<p>  好比我点击第二个图标,即可进入该容器中可以进行shell命令输入了:</p>
<p>  <div align="center"></div></p>
<h2>2.3 监控Host主机</h2>
<p>  除了监控容器之外,Weave Scope还支持监控容器所在的Host。当我们单击顶部菜单中的“Hosts”选项,即可体现当前Host的信息:</p>
<p>  <div align="center"></div></p>
<p>  可以看到,我目前就只有一台阿里云ECS主机Host。</p>
<p>  同理,单击该Host图标也会体现其具体信息:</p>
<p>  <div align="center"></div></p>
<p>   从图中可以看到,Host的实时资源使用情况和汗青曲线我们都能够清楚的看到,滚动下拉条还可以看到Host上运行的进程和容器列表,如下图所示:</p>
<p>   <div align="center"></div></p>
<p>   单击某个容器链接,就可以看到该容器的具体监控信息了,很方便。</p>
<p>   别的,对于Host也提供了单击进入Shell的按钮,可以方便地打开Shell窗口做远程管理:</p>
<p>  <div align="center"></div></p>
<h2>2.4 监控多个Host主机</h2>
<p>  实际情况中,我们会有多个Host,每个Host都会摆设多个容器,那么如何让多个Host作为一个集群被监控呢?</p>
<p>  假设我们有两个Host,只必要在这两个Host中实行以下命令进行启动即可:</p>

# scope launch 192.168.16.150 192.168.16.151

<p>  这样无论访问哪个服务器的4040端口(假设没有更改默认端口)都能监控到两个Host。</p>
<h2>2.5 逻辑条件定位查询</h2>
<p>  实际情况中我们会有很多个容器,那么如何快速查询到某个关键指标的容器呢?</p>
<p>  Weave Scope还提供了逻辑条件的查询,这里我们以CPU和内存为例:</p>
<p>  (1)查询内存使用量>900MB的容器实例:</p>
<p>  <div align="center"></div></p>
<p>   筛选出来,目前只有一个容器内存使用超过了900mb。</p>
<p>  (2)查询CPU占用率>1%的容器实例:</p>
<p>  <div align="center"></div></p>
<p>   筛选出来,也只有一个(当然也跟我实行情况容器实例并不多有关)。</p>
<h1>三、小结</h1>
<p>  对于容器监控,docker自带的监控子命令是最简朴的最轻易使用的,但是对于多Host监控、告警及监控非容器资源都不支持,且用户友好度不够。Weave Scope则办理了多Host监控、监控非容器资源,但是不支持告警,不外对于一样平常小型的微服务容器实例监控是充足了。别的,Weave Scope对于大屏体现的界面友好度及Dashboard做的还是不够好,因此反面第二篇我们会学习Prometheus,它是一个更加强大和精良的开源容器监控方案。</p>
<h1>参考资料</h1>
<p>Cloud Man,《每天5分钟玩转Docker容器技能》</p>
<p>冰冻vs西瓜,《使用WeaveScope监控容器》</p>
<p>sjyu_eadd,《Docker那些事儿-Docker容器监控工具》</p>
<p> </p>

<p>作者:周旭龙</p>
<p>出处:https://edisonchou.cnblogs.com</p>
<p>本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保存此段声明,且在文章页面显着位置给出原文链接。</p><br><br/><br/><br/><br/><br/>来源:<a href="https://www.cnblogs.com/edisonchou/p/docker_monitor_introduction_part1.html" target="_blank">https://www.cnblogs.com/edisonchou/p/docker_monitor_introduction_part1.html</a>
页: [1]
查看完整版本: 你必须知道的容器监控 (1) Docker自带子命令与Weave Scope