天天看点

docker(9、容器监控1) 1、常用的容器方案

当 Docker 部署规模逐步变大后,可视化监控容器环境的性能和健康状态会变得越来越重要,目前比较常用的容器监控工具和方案

docker(9、容器监控1) 1、常用的容器方案

1、Docker 自带的几个监控子命令:ps、top、stats

docker container ps

[email protected]:~# docker container ls --help  
[email protected]:~# docker container ps --help
[email protected]:~# docker  ps --help                     #这三个命令是一样的
Usage:    docker container ls [OPTIONS]
List containers
Aliases:
  ls, ps, list
Options:
  -a, --all             Show all containers (default shows just running)
  -f, --filter filter   Filter output based on conditions provided
      --format string   Pretty-print containers using a Go template
  -n, --last int        Show n last created containers (includes all states) (default -1)
  -l, --latest          Show the latest created container (includes all states)
      --no-trunc        Don't truncate output
  -q, --quiet           Only display numeric IDs
  -s, --size            Display total file sizes
           
[email protected]:~# docker ps
[email protected]:~# docker container ps
[email protected]:~# docker container ls    #三个命令是一样的
CONTAINER ID        IMAGE               COMMAND              CREATED              STATUS              PORTS               NAMES
b89ca1da78c3        busybox             "sh"                 About a minute ago   Up About a minute                       sad_sanderson
7874b10cb1d4        httpd               "httpd-foreground"   2 minutes ago        Up 2 minutes        80/tcp              keen_yalow
           
[email protected]:~# docker ps -a
[email protected]:~# docker container ps -a
[email protected]:~# docker container ls -a      #三个命令的一样的
CONTAINER ID        IMAGE               COMMAND              CREATED              STATUS                          PORTS               NAMES
07373028ad05        busybox             "sh"                 About a minute ago   Exited (0) About a minute ago                       stoic_jepsen
b89ca1da78c3        busybox             "sh"                 About a minute ago   Up About a minute                                   sad_sanderson
7874b10cb1d4        httpd               "httpd-foreground"   2 minutes ago        Up 2 minutes                    80/tcp              keen_yalow
           

docker container top container

如果想知道某容器运行了哪些进程,可以执行 docker top

还可以在最后面跟上linux中ps的参数 -aux

[email protected]:~# docker top --help
[email protected]:~# docker container top --help #两个命令一样的
Usage:    docker top CONTAINER [ps OPTIONS]
Display the running processes of a container
           

运行容器通过top命令查看

[[email protected] ~]# docker run -d --name lamp mattrayner/lamp
5e0e2edef27dc26a99294ad91ce2347320f57dc54f96223e75d5c49998019f49
           

 docker container top lamp

[[email protected] ~]# docker container top lamp
[[email protected] ~]# docker top lamp       #两个命令输出结果一样
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                9512                9488                1                   10:20               ?                   00:00:00            /usr/bin/python /usr/bin/supervisord -n
root                10029               9512                0                   10:20               ?                   00:00:00            /bin/sh /usr/bin/mysqld_safe
root                10030               9512                4                   10:20               ?                   00:00:00            apache2 -D FOREGROUND
1000                10217               10030               0                   10:20               ?                   00:00:00            apache2 -D FOREGROUND
1000                10220               10030               0                   10:20               ?                   00:00:00            apache2 -D FOREGROUND
1000                10222               10030               0                   10:20               ?                   00:00:00            apache2 -D FOREGROUND
1000                10223               10030               0                   10:20               ?                   00:00:00            apache2 -D FOREGROUND
1000                10226               10030               0                   10:20               ?                   00:00:00            apache2 -D FOREGROUND
polkitd             10441               10029               4                   10:20               ?                   00:00:00            /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306 --log-syslog=1 --log-syslog-facility=daemon --log-syslog-tag=
[[email protected] ~]# 
           
[[email protected] ~]# docker top lamp -aux
USER                PID                 %CPU                %MEM                VSZ                 RSS                 TTY                 STAT                START               TIME                COMMAND
root                9512                0.0                 1.7                 58712               17312               ?                   Ss                  10:20               0:00                /usr/bin/python /usr/bin/supervisord -n
root                10029               0.0                 0.0                 4616                752                 ?                   S                   10:20               0:00                /bin/sh /usr/bin/mysqld_safe
root                10030               0.0                 2.1                 536896              20936               ?                   S                   10:20               0:00                apache2 -D FOREGROUND
1000                10217               0.0                 0.8                 536928              8608                ?                   S                   10:20               0:00                apache2 -D FOREGROUND
1000                10220               0.0                 0.8                 536928              8608                ?                   S                   10:20               0:00                apache2 -D FOREGROUND
1000                10222               0.0                 0.8                 536928              8608                ?                   S                   10:20               0:00                apache2 -D FOREGROUND
1000                10223               0.0                 0.8                 536928              8608                ?                   S                   10:20               0:00                apache2 -D FOREGROUND
1000                10226               0.0                 0.8                 536928              8608                ?                   S                   10:20               0:00                apache2 -D FOREGROUND
polkitd             10441               0.1                 18.9                1176104             188524              ?                   Sl                  10:20               0:01                /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306 --log-syslog=1 --log-syslog-facility=daemon --log-syslog-tag=
[[email protected] ~]# 
           
[[email protected] ~]# docker top lamp -aux
USER                PID                 %CPU                %MEM                VSZ                 RSS                 TTY                 STAT                START               TIME                COMMAND
root                9512                0.0                 1.7                 58712               17312               ?                   Ss                  10:20               0:00                /usr/bin/python /usr/bin/supervisord -n
root                10029               0.0                 0.0                 4616                752                 ?                   S                   10:20               0:00                /bin/sh /usr/bin/mysqld_safe
root                10030               0.0                 2.1                 536896              20936               ?                   S                   10:20               0:00                apache2 -D FOREGROUND
1000                10217               0.0                 0.8                 536928              8608                ?                   S                   10:20               0:00                apache2 -D FOREGROUND
1000                10220               0.0                 0.8                 536928              8608                ?                   S                   10:20               0:00                apache2 -D FOREGROUND
1000                10222               0.0                 0.8                 536928              8608                ?                   S                   10:20               0:00                apache2 -D FOREGROUND
1000                10223               0.0                 0.8                 536928              8608                ?                   S                   10:20               0:00                apache2 -D FOREGROUND
1000                10226               0.0                 0.8                 536928              8608                ?                   S                   10:20               0:00                apache2 -D FOREGROUND
polkitd             10441               0.1                 18.9                1176104             188524              ?                   Sl                  10:20               0:01                /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306 --log-syslog=1 --log-syslog-facility=daemon --log-syslog-tag=
[[email protected] ~]# 
           

docker container stats

该命令用于显示每个容器各种资源的使用情况,默认会显示一个实时变化的列表,展示每个容器的CPU、MEM的使用率和可用量,还有网络和IO的情况。

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

我们还可以查看指定容器的性能,只需在后面指定容器的名字即可,可以是一个,也可以是多个

[[email protected] ~]#  docker container stats

CONTAINER           CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS
5e0e2edef27d        0.03%               198 MiB / 972.6 MiB   20.36%              656 B / 656 B       218 MB / 531 MB     35
3813d4577cbf        0.00%               56 KiB / 972.6 MiB    0.01%               2.01 kB / 656 B     0 B / 0 B           1
           

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

[email protected]:~# docker container stats lamp admiring_bohr
 
CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS
b67aded0f855        lamp                0.04%               206.7MiB / 1.953GiB   10.34%              648B / 0B           4.61MB / 398MB      35
3c9c0f060dd0        admiring_bohr       0.04%               209.1MiB / 1.953GiB   10.45%              648B / 0B           60.6MB / 375MB      35
           

ps、top、stats这几个命令是docker 自带的,有点是运行方便,很适合想快速了解容器运行状态的场景。缺点是输出的数据有限,而且都是实时数据,无法反应历史变化和趋势。