
文章目录
在企业中,通常业务是不允许随意停止的,否则将给企业带来巨大的经济损失。
运维工程师要保证业务正常运行,就必须利用工具时刻监控业务的运行状态,容器中的业务也不例外。
除了容器自身的监控命令外,还有一些针对容器的动态特征而开发的第三方监控工具。
本章将对 容器监控 及其相关内容进行详解。
在容器中,通常可以通过执行命令或利用第三方工具,获取当前容器中的数据并将数据呈现给用户。
安装完成的 Docker 自带一些用于监控容器的子命令,这是 Docker 开发者为用户提供的容器监控方式。
docker ps 命令是之前中讲过的命令,用来查看容器状态,示例代码如下:

另外,通过 docker container ls 命令也可以达到相同的效果,示例代码如下:

注意,若是 docker container ls 命令执行失败,更新 Docker 版本即可。
docker top 命令用于查看容器中的进程,示例代码如下:

以上示例通过 docker top 命令添加容器 ID 号查看到了容器内进程。
除此之外,还可以在命令中添加容器名称,达到相同的效果,示例代码如下:

在 docker top 命令中添加参数即可显示特定的进程信息,此处以 -u 参数为例,示例代码如下:

以上示例通过给 docker top 命令添加 -u 参数,将 sysdig 容器的进程信息以用户为主的格式显示出来。
docker stats 命令用于查询容器的各项资源的消耗情况,示例代码如下:

以上示例执行了 docker stats 命令,在终端通过一个动态列表显示出各个容器的资源使用情况,如 cpu 使用率、内存、容器网络等信息。
在没有限制容器内存的情况下,此处将会显示宿主机的内存。
此处的动态列表有一项明显的不足,就是只能显示容器 ID 号,不显示容器名称。
但只要在命令中添加容器名称,即可查看指定容器的信息,示例代码如下:

Docker 自带的容器监控命令能够灵活捕捉容器的实时信息,且使用方便。
但它们无法反映容器资源占用的趋势,且只能显示有限的数据。
Sysdig 是一款命令行监控工具,因其轻量级的特点深受广大用户的喜爱。
Sysdig 就像放大镜,使用户可以更清晰地看到宿主机与容器的各项行为。
它相当于多种 Linux 监控工具的合集,如 strace、htop、lsof 等,将这些工具的功能及查询结果整合到同一个界面中,供用户操作。
Sysdig 为在 Docker Hub 中提供了容器镜像,用户可以将 Sysdig 以容器的形式运行,示例代码如下:

以上示例中,Sysdig 容器以挂载宿主机目录的方式收集系统信息,并给予其足够的系统权限。
注意,该命令中必须使用绝对路径,否则会在执行时出错。
容器启动后将直接进入容器终端,若通过 Ctrl+P+Q 组合键退出容器或者容器在后台运行,通过 exec 命令即可进入 Sysdig 容器,示例代码如下:

在 Sysdig 容器中,通过以下命令启动 Sysdig 监控:

执行成功之后,将显示 Sysdig 功能界面,如图所示。

功能界面中不仅有各项资源的使用信息,下方还有各类选项,用户可以根据不同要求从不同角度去监控不同类型的资源。
按 F2 键或者单击 Views 选项,进入监控选项列表,如图所示。

在该界面中,左边列出了 Sysdig 的各个监控项,右边是关于监控项的说明。
通过键盘方向键即可移动界面中的光标,从而切换监控项。
下面将光标移动到 Containers 项,按回车键或者双击该选项,进入容器监控界面,如图所示。

若是用户觉得图中的内容太过繁琐,或者难以理解,可以按 F7 键,进入数据说明界面。
其中有对各项数据的解释,能帮助用户更快掌握 Sysdig 的使用方法,如图所示。

进入该界面之后,按任意键即可退出。
另外,在监控界面中还可以指定按照某一项数据进行排序,单击列表中某一项数据的表头即可。
此处以内存为例,按照占用内存排序的监控列表,如图所示。

若要查看单个容器内部信息,将光标移动到该容器信息上,按回车键即可,如图所示。

再移动光标到指定信息,按回车键还可以查看容器进程中的线程信息,如图所示。

若要返回上一级,在键盘上按退格键即可。
为方便用户管理,Sysdig 还支持搜索功能,通过 Ctrl+F 组合键即可启动该功能,再输入关键字即可查询。此处关键字以 usr 为例,如图所示。

如果在操作过程中遇到问题,可以按 F1 键或者单击某选项,进入帮助文档。
帮助文档详细介绍了 Sysdig 的操作方式,供用户学习。
若动态列表变化太快,导致用户无法准确查看到信息,可以按P键将列表暂停。
Sysdig 为用户提供了较为全面的监控视角,但其本质是命令行工具,缺乏更具直观性的监控角度。
Weave Scope 为用户提供了更直观的监控视角,它将整个监控以图形界面的形式呈现出来。
首先,下载 Weave Scope 的二进制安装包到指定的路径下,示例代码如下:

Weave Scope 安装包的本质是一个脚本,所以需要赋予其执行权限,示例代码如下:

然后,通过命令执行该脚本,示例代码如下:

此时,Weave Scope 监控已经开启,通过浏览器访问系统提示中的 http://192.168.77.128:4040/ 即可进入监控界面。
在进入界面之前先查看容器状态,示例代码如下:

从以上示例中可以看到,宿主机中增加了一个被命名为 weavescope 的新容器,这说明 Weave Scope 以容器的方式在宿主机中运行。
下面根据提示进入 Weave Scope 界面,如图所示。

图中,宿主机中的所有容器都以图形的形式呈现出来,更加便于用户管理。
在 Weave Scope 界面中,宿主机上的容器被分为多个种类,默认不显示 Weave Scope 本身的容器。
若要查看所有容器,就需要在界面左下角的选项中进行操作,如图所示。

在左下方单击 All 选项,即可查看宿主机中所有运行中的容器,如图所示。

若要查看容器的资源占用情况,需要在界面上方选项中进行操作,如图所示。

在上方单击 CPU 选项,即可显示界面中容器的 CPU 使用情况,如图所示。

单击 CPU 选项之后,CPU 使用情况将会以液位高度的形式在容器图标上显示。
此时,将鼠标指针移动到容器图标之上,即可显示具体数据,如图所示。

若要查看某一容器的详细信息,单击该容器图标即可,如图所示。

其中,容器的详细信息包括以下各项:
CPU与内存的实时状态曲线图。
镜像、镜像标签、命令等信息。
该容器中实时运行的进程信息。
维护人员或容器的启动命令等信息。
该容器的镜像信息。
容器详细信息界面中,有一行可对该容器直接进行操作的选项,如图所示。

图中的选项从左到右分别表示:
通过 docker attach 命令进入容器终端;
通过 docker exec 命令进入容器终端;
通过 docker restart 命令重新启动容器;
通过 docker pause 命令暂停容器;
通过 docker stop 命令终止容器。
有了这些选项,用户就不需要在终端中输入命令,直接单击选项即可对容器进行操作。
若需要执行这些选项之外的操作,可通过选项进入容器终端完成。
Weave Scope 为用户提供广阔的监控视角,除了监控容器,还可以对宿主机进行监控。
单击界面上方的 Hosts 选项,即可查看宿主机,如图所示。

与容器操作相同,单击宿主机图标即可查看其详细信息,如图所示。

与容器相比,宿主机的 Staus 项中增加了负载信息。
详细信息还包含了宿主机中的容器信息,单击容器名称即可查看容器的详细信息。
宿主机的信息中只有一个供用户对其进行操作的选项,单击即可进入宿主机终端,如图所示。

在企业生产环境中,通常需要使用多台宿主机部署容器业务,所以容器监控也需要同时监控多台宿主机。
而 Weave Scope 恰好拥有多宿主机监控的功能,下面通过示例来演示该功能的使用方式。
首先,准备两台安装了 Weave Scope 的服务器,并分别在启动命令中添加两个服务器的 IP 地址进行启动,示例代码如下:

根据两台宿主机中启动命令的执行结果,无论是访问 http://192.168.77.128:4040/ 还是 http://192.168.77.130:4040/,都可以监控到两台宿主机,如图所示。

单击界面上方的 Containers 选项,查看所有宿主机中的容器,如图所示。

为了便于用户分辨,Weave Scope 在每个容器图标下的容器名称后都会标注该容器所属宿主机的主机名。
在生产环境中部署大量容器,需要对某一容器进行操作时,可以使用 Weave Scope 界面左上角的搜索功能,对该容器进行搜索。
此处以关键字 "reg" 为例,搜索结果如图所示。

另外,Weave Scope 还支持逻辑条件搜索。
例如,搜索 CPU 占用率大于 1% 的容器,在搜索栏中输入 "cpu>1 即可,如图所示。

界面的右下角有四个选项,从左到右前三个是调试界面显示的选项,最后一个是 Weave Scope 的帮助选项,如图所示。

单击帮助选项,即可查看 Weave Scope 的帮助文档,如图所示。

本章讲解了 Docker 自带的监控命令,以及一些第三方监控软件的安装与使用。
其中,Sysdig 是一款优秀的命令行监控工具;
Weave Scope 不仅操作简单,还为用户提供了更为直观的图形界面。
希望大家通过本篇文章的学习能够熟练掌握 Docker 容器的监控方式,以保证容器中业务的正常运行。
电脑0x0000001A蓝屏错误怎么U盘重装系统教学分享。有用户电脑开机之后遇到了系统蓝屏的情况。系统蓝屏问题很多时候都是系统bug,只有通过重装系统来进行解决。那么蓝屏问题如何通过U盘重装新系统来解决呢?来看看以下的详细操作方法教学吧。 准备工作: 1、U盘一个(尽量使用8G以上的U盘)。 2、一台正常联网可使用的电脑。 3、ghost或ISO系统镜像文件(Win10系统下载_Win10专业版_windows10正式版下载-系统之家)。 4、在本页面下载U盘启动盘制作工具:系统之家U盘启动工具。 U盘启动盘制作步骤: 注意:制作期间,U盘会被格式化,因此U盘中的重要文件请注
在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList()Obt
这篇文章是继上一篇文章“Observability:从零开始创建Java微服务并监控它(一)”的续篇。在上一篇文章中,我们讲述了如何创建一个Javaweb应用,并使用Filebeat来收集应用所生成的日志。在今天的文章中,我来详述如何收集应用的指标,使用APM来监控应用并监督web服务的在线情况。源码可以在地址 https://github.com/liu-xiao-guo/java_observability 进行下载。摄入指标指标被视为可以随时更改的时间点值。当前请求的数量可以改变任何毫秒。你可能有1000个请求的峰值,然后一切都回到一个请求。这也意味着这些指标可能不准确,你还想提取最小/
1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里
需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc
因为我现在正在做一些时间测量,我想知道是否可以在不使用Benchmark类或命令行实用程序time的情况下测量用户时间或系统时间。使用Time类只显示挂钟时间,而不显示系统和用户时间,但是我正在寻找具有相同灵active的解决方案,例如time=TimeUtility.now#somecodeuser,system,real=TimeUtility.now-time原因是我有点不喜欢Benchmark,因为它不能只返回数字(编辑:我错了-它可以。请参阅下面的答案。)。当然,我可以解析输出,但感觉不对。*NIX系统的time实用程序也应该可以解决我的问题,但我想知道是否已经在Ruby中实
在几个项目中,我希望有一个类似rakeserver的rake任务,它将通过任何需要的方式开始为该应用程序提供服务。这是一个示例:task:serverdo%x{bundleexecrackup-p1234}end这行得通,但是当我准备停止它时,按Ctrl+c并没有正常关闭;它中断了Rake任务本身,它说rakeaborted!并给出堆栈跟踪。在某些情况下,我必须执行Ctrl+c两次。我可能可以用Signal.trap写一些东西来更优雅地中断它。有没有更简单的方法? 最佳答案 trap('SIGINT'){puts"Yourmessa
在Ruby中,以毫秒为单位获取自纪元(1970)以来的当前系统时间的正确方法是什么?我试过了Time.now.to_i,好像不是我想要的结果。我需要结果显示毫秒并且使用long类型,而不是float或double。 最佳答案 (Time.now.to_f*1000).to_iTime.now.to_f显示包含十进制数字的时间。要获得毫秒数,只需将时间乘以1000。 关于ruby-以毫秒为单位获取当前系统时间,我们在StackOverflow上找到一个类似的问题:
关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭8年前。Improvethisquestion我们有以下(以及更多)系统,我们将数据从一个应用推送/拉取到另一个:托管CRM(InsideSales.com)Asterisk电话系统(内部)横幅广告系统(openx,我们托管)潜在客户生成系统(自行开发)电子商务商店(spree,我们托管)工作板(本土)一些工作网站抓取+入站工作提要电子邮件传送系统(如Mailchimp,自主开发)事件管理系统(如eventbrite,自主开发)仪表板系统(大量图表和
我的ruby脚本从命令行参数获取某些输入。它检查是否缺少任何命令行参数,然后提示用户输入。但是我无法使用gets从用户那里获得输入。示例代码:test.rbname=""ARGV.eachdo|a|ifa.include?('-n')name=aputs"Argument:#{a}"endendifname==""puts"entername:"name=getsputsnameend运行脚本:rubytest.rbraghav-k错误结果:test.rb:6:in`gets':Nosuchfileordirectory-raghav-k(Errno::ENOENT)fromtes