4.3 容器监控

系列 - 容器与守护进程运维
摘要
本实验将介绍三种不同的Docker容器监控方法,从基础的Docker自带监控命令到更高级的监控工具。

在开始本实验前,请确保完成以下准备工作:

  1. 检查 SELinux 是否已关闭:执行 getenforce 命令,结果应该显示 Disabled 或 Permissive
  2. 检查防火墙是否已关闭:执行 systemctl status firewalld 命令
  3. 下载所需镜像
    1. harbor.seahi.me/stu/task-supervisor
    2. google/cadvisor

Docker提供了多种内置命令来监控容器状态,包括 docker psdocker topdocker stats 等。

bash

docker ps

这条命令显示当前正在运行的容器。如果想要查看所有容器(包括已停止的),需要增加 -a 参数:

bash

docker ps -a

首先,让我们启动一个用于测试的容器:

bash

docker run -d \
--restart always \
--name supervisor \
harbor.seahi.me/stu/task-supervisor

然后,查看该容器内运行的进程:

bash

docker top supervisor

容器进程列表

top命令
docker top 命令类似于Linux中的 top 命令,但它专门用于查看容器内的进程。

bash

docker stats

Docker Stats输出

退出方法
Ctrl+C 可以退出 docker stats 命令。该命令默认会持续输出最新状态。
cAdvisor
cAdvisor (Container Advisor) 是谷歌开发的容器资源监控工具,提供了更详细的容器性能指标和资源使用情况分析。

cAdvisor 可以运行在宿主机上,也可以作为容器运行(推荐方式)。它能够收集、聚合、处理和导出容器的信息。

首先,让我们启动两个用于测试监控的容器:

bash

docker run --rm -d \
--name redis \
redis
Redis
Redis 是一个开源的内存数据库,常用于缓存、会话存储、消息队列等场景。

bash

docker run --rm -d \
--name web-server \
httpd
httpd
Apache HTTP Server (httpd) 是一个广泛使用的Web服务器软件。

bash

docker run --privileged \
-v /:/rootfs:ro \
-v /var/run:/var/run:rw \
-v /sys:/sys:ro \
-v /var/lib/docker:/var/lib/docker:ro \
-p 8080:8080 \
--detach \
--name cadvisor \
google/cadvisor:latest
警告
--privileged 参数让容器以特权模式运行,拥有访问宿主机上所有设备的权限。在生产环境中应谨慎使用此参数,以避免潜在的安全风险。
问题
--detach 的缩写是 -d,用于在后台运行容器。

打开浏览器,输入 http://服务器IP:8080 访问cAdvisor的Web界面:

cAdvisor首页

点击 “Docker Containers” 查看容器列表:

容器列表

单击某个容器,可以查看该容器的详细资源使用情况和性能指标。

Weave Scope
Weave Scope 是一个可视化和监控工具,提供了容器和服务之间的关系图,以及详细的容器资源使用情况。它支持Docker和Kubernetes环境。

bash

wget https://github.com/weaveworks/scope/releases/download/v1.13.2/scope -O /usr/local/bin/scope

给脚本增加执行权限:

bash

chmod +x /usr/local/bin/scope

bash

scope launch

Weave Scope启动

打开浏览器,访问 http://服务器IP:4040

Weave Scope界面

点击其中一个容器图标,可以查看该容器的详细状态和指标:

容器详情

技巧
Weave Scope不仅可以监控容器资源使用情况,还能可视化展示容器之间的网络连接关系,帮助理解复杂的容器应用架构。

除了上述工具外,Docker还提供了一些其他有用的命令来帮助监控和管理容器。

使用 docker logs 命令可以查看容器的日志输出:

bash

docker logs <容器名/ID>

容器日志

技巧
可以添加 -f 参数实时查看日志(类似 tail -f),添加 --tail <行数> 参数查看最后几行日志。

随着使用Docker的时间增长,系统中可能会积累大量不再使用的容器、镜像、网络和缓存。使用 docker system prune 命令可以一键清理这些资源:

bash

docker system prune

系统清理

确认后,Docker会清理未使用的资源:

清理结果

如果还想要删除未使用的数据卷,可以添加 --volumes 参数:

bash

docker system prune --volumes

清理卷

谨慎操作
使用 docker system prune 命令会删除所有未使用的Docker资源。在生产环境中使用前,请确保你了解这个命令的影响范围。