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

640?wx_fmt=gif

本篇已加入《》,可以点击查看更多容器化技术相关系列文章。本篇会介绍几个目前比较常用且流行的容器监控工具,首先我们来看看Docker自带的几个监控子命令:ps、top以及stats,然后是一个功能更强的开源监控工具Weave Scope。

# 实验环境:阿里云ECS主机,CentOS 7.4

01

Docker自带监控子命令

ps

    想必只要我们看过一点docker的文章,就应该都知道docker ps这个命令,它使我们可以方便的查看现在正在运行的所有容器实例。

# docker ps

  执行后效果如下图:

640?wx_fmt=png

  其实,它等价于下面两句命令:

top

        如果我们想要了解某个容器中到底运行了哪些进程,可以通过top命令来查询。

# docker top container_name

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

# docker top exceptionless_api_1

  640?wx_fmt=png

  可以看到,在exceptionless_api_1这个容器中只运行了一个进程,该进程是一个.NET Core应用程序,其命令为:dotnet Exceptionless.Web.dll。

  如果想要看到更多信息比如状态、启动时间等等,可以加上-au:(当然可以参阅Linux ps命令的参数加上更多参数显示特定信息)

# docker top exceptionless_api_1 -au

  640?wx_fmt=png 

  从上图可以看到,该进程对于CPU和内存的占用量。

stats

        如果我们想要查询每个容器对于各种资源的使用情况,那么可以直接使用docker stats,这是一个强大的命令,默认会显示一个实时变化的列表,以显示每个容器实例的CPU使用率、内存使用量以及可用量等等。  640?wx_fmt=png

Note:可以看到上图中内存的Limit都是3.7G,这是因为在容器启动时没有特别指定内存Limit,所以这里都会默认显示Host主机的总内存量(这里我的阿里云ECS主机是4G的内存配置),但并不意味着每个容器都能使用到这么多的内存。因此,我们完全可以为不同的容器实例设置不同的资源限制值,我也有写一篇文章《Docker资源限制学习与验证》。

   可以看到默认列表是基于容器ID来排列的,其实并不便于我们查看某个具体容器的资源使用情况,我们可以加上具体容器名字来定位和查看详情:

# docker stats exceptionless_api_1

  640?wx_fmt=png

02

开源监控工具Weave Scope

安装与运行

        Weave Scope 是 Docker 和 Kubernetes 可视化监控工具。Scope 提供了至上而下的集群基础设施和应用的完整视图,用户可以轻松对分布式的容器化应用进行实时监控和问题诊断。

  Weave Scope的GitHub地址为:https://github.com/weaveworks/scope

  我们可以通过以下脚本安装运行Weave Scope:

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

  640?wx_fmt=png

   看到上图中的提示信息,代表你已经成功启动了Weave Scope。

监控容器

        Weave Scope默认的端口号绑定的是4040,因此我们可以直接访问http://[Host IP]:4040就可以看到如下图所示的界面:  640?wx_fmt=png

   从上图中可以看到,目前我的Host中有哪些容器实例,他们之间的关联是什么样的。比如这里我有一个Exceptionless的容器实例群,包括UI、API、Job、ElasticSearch、Kibna以及Redis。其中UI和其他容器没有关联关系,而API、Job、Kibna以及Redis都互有联系。

  此外,Weave Scope还有自己的容器,因为我们的Weave Scope也是容器运行的,点击筛选“System containers”就会显示Weave自己的容器了:

  640?wx_fmt=png

   默认情况下,Weave提供了CPU占用率和内存使用量这两个关键指标的监控,我们可以选择不同的指标进行查看:

  比如这里我选中Memory,Weave会采用水位高低的显示方式来展示内存使用量;同理,CPU占用率也是一样。

   640?wx_fmt=png

   如果想查看某个容器的详细信息,可以单击该容器的图标,这里我们点击exceptionless_elasticsearch这个容器,可以看到如下图所示的详细信息:

   640?wx_fmt=png

   从上图可以看到详情主要包括两个部分:

  (1)Status:CPU、内存实时占用率以及历史曲线(注意CPU和内存那条线不一定都是直的,是曲线哟);

  (2)Info:容器镜像名称、启动命令、网络、状态等信息;

   滚动下拉还可以看到如下图所示的信息:

  640?wx_fmt=png

   从上图可以看到容器中正在运行的进程及其资源占用情况。点开Image,还会看到更详细的镜像信息。

   此外,我们还看到了容器详情上面有一排按钮,可以支持我们对容器进行操作,从而不再需要去记住那些docker attach等命令。

  640?wx_fmt=png

   第一个图标是attach,点击可以attach容器的启动进程,等价于:docker attach。

   第二个图标是打开shell,点击可以进入容器中,等价于:docker exec。

   后面三个代表restart重启容器,pause暂停容器 及 stop停止容器。

  比如我点击第二个图标,即可进入该容器中可以进行shell命令输入了:  640?wx_fmt=png

监控Host

        除了监控容器之外,Weave Scope还支持监控容器所在的Host。当我们单击顶部菜单中的“Hosts”选项,即可显示当前Host的信息:

  640?wx_fmt=png

  可以看到,我目前就只有一台阿里云ECS主机Host。

  同理,单击该Host图标也会显示其详细信息:

  640?wx_fmt=png

   从图中可以看到,Host的实时资源使用情况和历史曲线我们都能够清晰的看到,滚动下拉条还可以看到Host上运行的进程和容器列表,如下图所示:

   640?wx_fmt=png

   单击某个容器链接,就可以看到该容器的详细监控信息了,很方便。

   此外,对于Host也提供了单击进入Shell的按钮,可以方便地打开Shell窗口做远程管理:  640?wx_fmt=png

多Host监控

        实际环境中,我们会有多个Host,每个Host都会部署多个容器,那么如何让多个Host作为一个集群被监控呢?

  假设我们有两个Host,只需要在这两个Host中执行以下命令进行启动即可:

# scope launch 192.168.16.150 192.168.16.151

  这样无论访问哪个服务器的4040端口(假设没有更改默认端口)都能监控到两个Host。

逻辑条件查询

        实际环境中我们会有很多个容器,那么如何快速查询到某个关键指标的容器呢?

  Weave Scope还提供了逻辑条件的查询,这里我们以CPU和内存为例:

  (1)查询内存使用量>900MB的容器实例:

  640?wx_fmt=png

   筛选出来,目前只有一个容器内存使用超过了900mb。

  (2)查询CPU占用率>1%的容器实例:

  640?wx_fmt=png

   筛选出来,也只有一个(当然也跟我实验环境容器实例并不多有关)。

03

小结

对于容器监控,docker自带的监控子命令是最简单的最容易使用的,但是对于多Host监控、告警及监控非容器资源都不支持,且用户友好度不够。Weave Scope则解决了多Host监控、监控非容器资源,但是不支持告警,不过对于一般小型的微服务容器实例监控是足够了。此外,Weave Scope对于大屏显示的界面友好度及Dashboard做的还是不够好,因此后面第二篇我们会学习Prometheus,它是一个更加强大和优秀的开源容器监控方案。

参考资料

Cloud Man,《每天5分钟玩转Docker容器技术》

冰冻vs西瓜,《利用WeaveScope监控容器》

sjyu_eadd,《Docker那些事儿-Docker容器监控工具》

640?wx_fmt=gif

640?wx_fmt=jpeg

恰童鞋骚年,风华也许不再正茂,但却仍想挥斥方遒

本公众号会长期关注和分享.NET Core,Microservice,云原生(Docker & Kubernetes等),DevOps等技术内容文章,还会与你分享个人生活成长的点滴及各类好书的读书笔记,希望能对你有所帮助,一起成长!

640?wx_fmt=png

640?wx_fmt=png
点个【在看】,和更多人一起分享!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/313252.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

char *与char []

由于指针的灵活性,导致指针能代替数组使用,或者混合使用,这些导致了许多指针和数组的迷惑,因此,刻意再次深入探究了指针和数组这玩意儿,其他类型的数组比较简单,容易混淆的是字符数组和字符指针…

.NET Core ORM 类库Petapoco中对分页Page添加Order By对查询的影响

介绍最近一直在使用PetapocoEntity Framework Core结合开发一套系统。使用EFCore进行Code First编码,使用使用Petapoco进行数据库的常规操作。并且结合PetaPoco.SqlKata的使用,减少了编写SQL语句的工作量,对提升开发效率有很大的帮助。Petapo…

.Net Core 3.0 IdentityServer4 快速入门

一、简介IdentityServer4是用于ASP.NET Core的OpenID Connect和OAuth 2.0框架。将IdentityServer4部署到您的应用中具备如下特点:1)、认证服务2)、单点登陆3)、API访问控制4)、联合网关5)、专注于定制6&…

.NET Core3.0创建Worker Services

.NET CORE 3.0新增了Worker Services的新项目模板,可以编写长时间运行的后台服务,并且能轻松的部署成windows服务或linux守护程序。如果安装的vs2019是中文版本,Worker Services变成了辅助角色服务。Worker Services 咱也不知道怎么翻译成了这…

OpenCV Mat数据类型像素操作

转自:http://blog.csdn.net/skeeee/article/details/13297457 OpenCV图像像素操作及效率分析 在计算机视觉应用中,对于图像内容的读取分析是第一步,所以学习高效的处理图像是很有用的。一个图像有可能包含数以万计的像素,从根本上…

Bumblebee微服务网关之Url重写

为了提高Url访问的统一和友好性,一般访问的Url和服务定义的Url有所不同;为了解决这一问题Bumblebee提供Url重写功能;通过Url重写功能可以在转发前进行一个重写后再转发到后台服务。引用插件Bumblebee中使用Url重写需要引用两个插件,分别是Bumblebee.Conf…

依赖注入:一个Mini版的依赖注入框架

前面的章节中,我们从纯理论的角度对依赖注入进行了深入论述,我们接下来会对.NET Core依赖注入框架进行单独介绍。为了让读者朋友能够更好地理解.NET Core依赖注入框架的设计与实现,我们按照类似的原理创建了一个简易版本的依赖注入框架&#…

.NET Core 3.0 新 JSON API - JsonSerializer

JsonSerializer 前面几节的内容可能稍微有点底层,我们大部分时候可能只需要对C#的类进行串行化或者将JSON数据反串行化成C#类,在.NET Core 3.0里面,我们可以使用JsonSerializer这个类来做这些事情。 例子 还是使用之前用到的json数据&#xf…

Caffe查看每一层学习出来的pattern

Filter visualization http://www.cnblogs.com/dupuleng/articles/4244877.html 这一节参考http://nbviewer.ipython.org/github/BVLC/caffe/blob/master/examples/filter_visualization.ipynb,主要介绍如何显示每一层的参数及输出,这一部分非常重要&am…

.NET Core 3.0 新 JSON API - Utf8JsonWriter

Utf8JsonWriter类 下面研究一下如何写入json文件。这里需要使用Utf8JsonWriter类。 直接看代码: 这个类需要传递的参数类型是Stream或者Buffer,也就是向Stream或Buffer里面写入数据。 那么就提供一个buffer: 下面单独写一个方法,来…

python查看CNN训练模型参数

参照:http://blog.csdn.net/u011762313/article/details/49851795 #!/usr/bin/env python# 引入“咖啡” import caffeimport numpy as np# 使输出的参数完全显示 # 若没有这一句,因为参数太多,中间会以省略号“……”的形式代替 np.set_prin…

Bumblebee微服务网关之consul服务发现

网关需要维护相关负载的服务器,手动添加相对来说是一件比较麻烦的工作;为了解决这一问题组件扩展了一个基于consul服务发现插件,通过配置这个插件和启用后网关会自动从consul服务中获取服务并添加到网关对应的路由负载规则中。引用插件Bumble…

Github带来的不止是开源,还有折叠的认知

几乎每个程序员都知道github,但是知道目前上面有多少repositories的估计没几个。Z哥今天去看了下,最新的数量显示是1.39亿个。▲截图来自于github.com而这个数字在2008年那会只是3.3万个。这个增长速度可谓真的是“爆炸式增长”。与此同时,大…

最优间隔分类器-SVM

http://blog.csdn.net/Andrewseu/article/details/46991541 本讲大纲: 1.最优间隔分类器(optimal margin classifier) 2.原始/对偶优化问题(KKT)(primal/dual optimization problem) 3.SVM对偶(SVM dual) 4.核方法(…

自动给 Asp.Net Core Api 增加 ApiVersionNeutral

自动给 Asp.Net Core Api 增加 ApiVersionNeutralIntro新增加一个 Controller 的时候,经常忘记在 Controller 上增加 ApiVersion ,结果就导致前端使用指定的 ApiVersion 访问的时候就会失败,不支持的 Api 版本。错误信息如下:{ &q…

K-means与高斯混合模型

K-means http://blog.pluskid.org/?p17 Clustering 中文翻译作“聚类”,简单地说就是把相似的东西分到一组,同 Classification (分类)不同,对于一个 classifier ,通常需要你告诉它“这个东西被分为某某类”这样一些例子&#xf…

轻量级ORM《sqlcommon》第一个版本发布了

一、sqlcommon的特色1. 轻量级,整个包只有123kb。2. 性能好,自测。。。3. API和功能简单、代码简短、可维护性好基本都能看懂。这个点我认为很重要,你不用为了实现一个需求而四处查资料,这意味着这个包你可以自行维护修改&#xf…

从基于直方图的Graph-Cut到Grab-Cut

http://blog.csdn.net/zouxy09/article/details/8534954 区别: (1)Graph Cut的目标和背景的模型是灰度直方图,Grab Cut取代为RGB三通道的混合高斯模型GMM; (2)Graph Cut的能量最小化&#xf…

1024程序员节活动继续:购书优惠劵,折后再折,赶紧来抢啊

1024程序员节当当网计算机图书每满100减50!满200减100!满300-150!机械工业出版社华章公司联合当当网特意为【DotNET技术圈】用户申请了一批可与满减叠加使用的“满200减30”的图书优惠码,优惠码使用后相当于:400减230 …

Shape Context

http://blog.csdn.net/u012507022/article/details/52437149 形状上下文特征是一种很流行的形状描述子,多用于目标识别,它采用一种基于形状轮廓的特征描述方法,其在对数极坐标系下利用直方图描述形状特征能够很好地反映轮廓上采样点的分布情况。 形状上下…