第7章 容器监控

摘要:本章详细介绍了Docker容器监控的两种主要方式。首先讲解了Docker自带的监控子命令,包括ps(查看运行容器)、top(查看容器进程)和stats(实时监控容器资源使用率)的使用方法和示例。然后介绍了Google开发的容器监控工具cAdvisor,包括其部署方式、Web界面访问方法以及优缺点分析。cAdvisor虽然界面相对简陋且只能监控单个主机,但可以作为监控数据收集器,将数据导出给第三方工具进行进一步处理。

续上篇博客 容器数据不丢失:Docker 分层存储 + Volume 共享、备份迁移完整指南

Docker自带的监控子命令

当Docker部署规模逐步变大后,可视化监控容器环境的性能和健康状态将会变得越来越重要。

ps

docker ps 是我们早已熟悉的命令了,方便我们查看当前运行的容器。前面已经有大量示例,这里就不赘述了。

[root@docker ~]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS            PORTS                                  NAMES
9f8bc2c3a5c7   nginx          "/docker-entrypoint.…"   3 seconds ago    Up 2 seconds   80/tcp                                  sad_faraday
1e0b0631cf70   httpd:centos   "/bin/sh -c '/usr/sb…"   23 minutes ago   Up 23 minutes   0.0.0.0:80->80/tcp, :::80->80/tcp       myweb
4b78f371fc06   centos:ssh     "/usr/sbin/sshd -D"      32 minutes ago   Up 32 minutes   0.0.0.0:2022->22/tcp, :::2022->22/tcp   sshtest

top

查看容器的进程

[root@docker ~]# docker top --help

Usage:  docker top CONTAINER [ps OPTIONS]

Display the running processes of a container

Aliases:
  docker container top, docker top

示例:

[root@docker ~]# docker top sshtest    #sshtest是容器名
UID                 PID                 PPID                C                   
STIME               TTY                 TIME                CMD
root                5220                5198                0
21:31               ?                   00:00:00            /usr/sbin/sshd -D

命令后面还可以跟上 Linux 操作系统 ps 命令的参数显示特定的信息,比如 -au

[root@docker ~]# docker top 595 -au
USER                PID                 %CPU                %MEM                VSZ                 RSS                 TTY                 STAT                START               TIME                COMMAND
root                5220                0.0                 0.0                 76532               7080                ?                   Ss                 21:31               0:00                 /usr/sbin/sshd -D

stats

列出容器资源使用率

[root@docker ~]# docker stats --help

Usage:  docker stats [OPTIONS] [CONTAINER...]

Display a live stream of container(s) resource usage statistics

Aliases:
  docker container stats, docker stats
  
Options:
  -a, --all             Show all containers (default shows just running)
  --format string       Format output using a custom template:
                        'table':            Print output in table format with column headers (default)
                        'table TEMPLATE':   Print output in table format using the given Go template   
                        'json':             Print in JSON format
                        'TEMPLATE':         Print output using the given Go template.
                        Refer to https://docs.docker.com/go/formatting/ for more information about formatting output with templates
      --no-stream       Disable streaming stats and only pull the first result
      --no-trunc        Do not truncate outpu  

示例:

[root@docker ~]# docker stats
CONTAINER ID   NAME          CPU %     MEM USAGE / LIMIT     MEM %     NET I/O   
       BLOCK I/O         PIDS
9f8bc2c3a5c7   sad_faraday   0.00%     5.141MiB / 15.36GiB   0.03%     866B / 0B 
       8.19kB / 26.6kB   5
1e0b0631cf70   myweb         0.06%     38.39MiB / 15.36GiB   0.24%     1.64kB / 609B    0B / 0B           213
4b78f371fc06   sshtest       0.00%     2.258MiB / 15.36GiB   0.01%     9.7kB / 7.99kB   8.19kB / 23.6kB   1

默认会显示一个实时变化的列表,展示每个容器的 CPU 使用率,内存使用量和可用量,网络和磁盘的 IO 数据。

注意:容器启动时如果没有特别指定内存 limit,stats 命令会显示 host 的内存总量,但这并不意味着每 个 container 都能使用到这么多的内存。

cAdvisor

cAdvisor 是 google 开发的容器监控工具。

[root@docker ~]# docker run \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:rw \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--publish=8080:8080 \
--detach=true \
--name=cadvisor \
google/cadvisor:latest

也可以使用镜像hub.c.163.com/xbingo/cadvisor:latest。

通过 http://[Host_IP]:8080 访问 cAdvisor。首次打开比较慢,系统需要收集数据并绘制图表。

点击Docker Containers进去看容器具体信息

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

总结:

  • 缺点:操作界面略显简陋,而且需要在不同页面之间跳转,并且只能监控一个 host。
  • 优点:可以将监控到的数据导出给第三方工具,由这些工具进一步加工处理。

结论:我们把 cAdvisor 定位为一个监控数据收集器,并导出数据给第三方工具,而非展示数据。

更多推荐