docker入门基础(五)

目录

  • 七、Docker 最常用的监控方案

    • 1、Docker 自带的监控子命令
    • 2、sysdig
    • 3、scope
    • 4、cAdvisor
    • 5、Prometheus
    • 6、各种方案对比

七、Docker 最常用的监控方案

1、Docker 自带的监控子命令

1)ps

docker container ps 是我们早已熟悉的命令了,方便我们查看当前运行的容器。

[[email protected] ~]# docker container ps
CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS              PORTS               NAMES
b3c485a2e81a        busybox                       "sh"                     About an hour ago   Up About an hour                        recursing_villani
17eccfdf171d        httpd                         "httpd-foreground"       2 hours ago         Up 2 hours                              web1
157cf44e2b18        busybox                       "sh"                     3 hours ago         Up 3 hours                              bbox3
6e3d4928bb05        busybox                       "sh"                     5 hours ago         Up 5 hours                              bbox1
79e3327cf198        quay.io/calico/node:v2.6.12   "start_runit"            6 hours ago         Up 6 hours                              calico-node
16a9df891e00        weaveworks/weave:2.5.0        "/home/weave/weaver …"   26 hours ago        Up 6 hours                              weave

新版的 Docker 提供了一个新命令 docker container ls,其作用和用法与 docker container ps 完全一样。不过 ls 含义可能比 ps 更准确,所以更推荐使用。

[[email protected] ~]# docker container ls
CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS              PORTS               NAMES
b3c485a2e81a        busybox                       "sh"                     About an hour ago   Up About an hour                        recursing_villani
17eccfdf171d        httpd                         "httpd-foreground"       2 hours ago         Up 2 hours                              web1
157cf44e2b18        busybox                       "sh"                     3 hours ago         Up 3 hours                              bbox3
6e3d4928bb05        busybox                       "sh"                     5 hours ago         Up 5 hours                              bbox1
79e3327cf198        quay.io/calico/node:v2.6.12   "start_runit"            6 hours ago         Up 6 hours                              calico-node
16a9df891e00        weaveworks/weave:2.5.0        "/home/weave/weaver …"   26 hours ago        Up 6 hours                              weave

2)top

如果想知道某个容器中运行了哪些进程,可以执行 docker container top [container] 命令。

[[email protected] ~]# docker container top b3c485a2e81a
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                40418               40402               0                   15:34               ?                   00:00:00            sh

上面显示了 sysdig 这个容器中的进程。命令后面还可以跟上 Linux 操作系统 ps 命令的参数显示特定的信息,比如 -au

[[email protected] ~]# docker container top b3c485a2e81a -au
USER                PID                 %CPU                %MEM                VSZ                 RSS                 TTY                 STAT                START               TIME                COMMAND
root                40418               0.0                 0.0                 1240                260                 ?                   Ss+                 15:34               0:00                sh

3)stats

docker container stats 用于显示每个容器各种资源的使用情况。

[[email protected] ~]# docker container stats

CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS
b3c485a2e81a        recursing_villani   0.00%               52KiB / 972.6MiB      0.01%               746B / 306B         0B / 0B             1
17eccfdf171d        web1                0.00%               2.367MiB / 972.6MiB   0.24%               1.2kB / 975B        4.71MB / 0B         82
157cf44e2b18        bbox3               0.00%               56KiB / 972.6MiB      0.01%               1.67kB / 2.82kB     0B / 4.1kB          1
6e3d4928bb05        bbox1               0.00%               52KiB / 972.6MiB      0.01%               1.08kB / 642B       0B / 0B             1
79e3327cf198        calico-node         0.76%               24.93MiB / 972.6MiB   2.56%               0B / 0B             89.1MB / 19.5kB     41
16a9df891e00        weave               0.13%               36.6MiB / 972.6MiB    3.76%               0B / 0B             25.7MB / 12.3kB     16

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

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

除此之外 docker container stats 命令还会显示容器网络和磁盘的 IO 数据。

默认的输出有个缺点,显示的是容器 ID 而非名字。我们可以在 stats 命令后面指定容器的名称只显示某些容器的数据。比如 docker container stats sysdig weave

[[email protected] ~]# docker container stats bbox1 bbox3

CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT   MEM %               NET I/O             BLOCK I/O           PIDS
6e3d4928bb05        bbox1               0.00%               52KiB / 972.6MiB    0.01%               1.08kB / 642B       0B / 0B             1
157cf44e2b18        bbox3               0.00%               56KiB / 972.6MiB    0.01%               1.67kB / 2.82kB     0B / 4.1kB          1

ps,top, stats 这几个命令是 docker 自带的,优点是运行方便,很适合想快速了解容器运行状态的场景。其缺点是输出的数据有限,而且都是实时数据,无法反应历史变化和趋势。接下来要介绍的几个监控工具会提供更丰富的功能。

2、sysdig

sysdig 是一个轻量级的系统监控工具,同时它还原生支持容器。通过 sysdig 我们可以近距离观察 linux 操作系统和容器的行为。

Linux 上有很多常用的监控工具,比如 strace,tcpdump,htop, iftop,lsof ......

而 sysdig 则是将这些工具的功能集成到一个工具中,并且提供一个友好统一的操作界面。

下面我们将演示 sysdig 强大的监控能力。

安装和运行 sysdig 的最简单方法是运行 Docker 容器,命令行为:

docker container run -it --rm --name=sysdig --privileged=true           --volume=/var/run/docker.sock:/host/var/run/docker.sock           --volume=/dev:/host/dev           --volume=/proc:/host/proc:ro           --volume=/boot:/host/boot:ro           --volume=/lib/modules:/host/lib/modules:ro           --volume=/usr:/host/usr:ro           sysdig/sysdig

可以看到,sysdig 容器是以 privileged 方式运行,而且会读取操作系统 /dev/proc 等数据,这是为了获取足够的系统信息。

启动后,通过 docker container exec -it sysdig bash 进入容器,执行 csysdig 命令,将以交互方式启动 sysdig。

[email protected]:/# csysdig

这是一个类似 linux top 命令的界面,但要强大太多。sysdig 按不同的 View 来监控不同类型的资源,点击底部 Views 菜单(或者按 F2),显示 View 选择列表。

界面左边列出了 sysdig 支持的 View,一共 30 多项,涵盖了操作系统的各个方面,因为这里主要是讨论容器监控,所以我们将光标移到 Containers这一项,界面右边立即显示出此 View 的功能介绍。

回车或者双击 Containers,进入容器监控界面。

sysdig 会显示该 Host 所有容器的实时数据,每两秒刷新一次。各列数据的含义也是自解释的,如果不清楚,可以点一下底部 Legend(或者按 F7)。如果想按某一列排序,比如按使用的内存量,很简单,点一下列头 VIRT

如果想看某个容器运行的进程,比如 weavescope,将光标移到目标容器,然后回车或者双击。

还可以继续双击查看进程中的线程。

返回上一级,按退格键即可。

sysdig 的交互功能很强,如果界面显示的条目很多,可以点击底部 Search菜单,然后输入关键字进行查找。如下图,关键字为 service

如果觉得界面刷新太快,看不清楚关注的信息,可以点击底部 Pause 菜单。

sysdig 的特点如下:

  1. 监控信息全,包括 Linux 操作系统和容器。
  2. 界面交互性强。

不过 sysdig 显示的是实时数据,看不到变化和趋势。而且是命令行操作方式,需要 ssh 到 Host 上执行,会带来一些不便。

3、scope

Weave Scope 的最大特点是会自动生成一张 Docker 容器地图,让我们能够直观地理解、监控和控制容器。

安装运行 weave scope

[[email protected] ~]# curl -L git.io/scope -o /usr/local/bin/scope
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:--  0:00:01 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:03 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:04 --:--:--     0
  0     0    0   595    0     0    114      0 --:--:--  0:00:05 --:--:--  581k
100 11664  100 11664    0     0   1494      0  0:00:07  0:00:07 --:--:--  8145
[[email protected] ~]# chmod a+x /usr/local/bin/scope
[[email protected] ~]# scope launch
Unable to find image ‘weaveworks/scope:1.10.1‘ locally
1.10.1: Pulling from weaveworks/scope
ff3a5c916c92: Pull complete
3453b1fadeb0: Pull complete
045b82da571f: Pull complete
36a634ed736d: Pull complete
3f77d3bb8ba0: Pull complete
b05d4f3850c9: Pull complete
b8acee35802d: Pull complete
4052e4377e74: Pull complete
872e29ba66ae: Pull complete
b63efc9f1ec6: Pull complete
Digest: sha256:2887407cb701236ad0ac2d581055ab58318f12d352ab25b76a0c516b191fab7a
Status: Downloaded newer image for weaveworks/scope:1.10.1
38b86ddf73daf460f473e5762f576058eee1ad3414b001bf237af4e24a54be27
Scope probe started
Weave Scope is listening at the following URL(s):
  * http://10.32.0.3:4040/
  * http://172.16.1.120:4040/
  * http://192.168.2.120:4040/

scope launch 将以容器方式启动 Weave Scope。

[[email protected] ~]# docker container ls
CONTAINER ID        IMAGE                         COMMAND                  CREATED              STATUS              PORTS               NAMES
38b86ddf73da        weaveworks/scope:1.10.1       "/home/weave/entrypo…"   About a minute ago   Up About a minute                       weavescope
b3c485a2e81a        busybox                       "sh"                     2 hours ago          Up 2 hours                              recursing_villani
17eccfdf171d        httpd                         "httpd-foreground"       2 hours ago          Up 2 hours                              web1
157cf44e2b18        busybox                       "sh"                     3 hours ago          Up 3 hours                              bbox3
6e3d4928bb05        busybox                       "sh"                     6 hours ago          Up 6 hours                              bbox1
79e3327cf198        quay.io/calico/node:v2.6.12   "start_runit"            6 hours ago          Up 6 hours                              calico-node
16a9df891e00        weaveworks/weave:2.5.0        "/home/weave/weaver …"   26 hours ago         Up 6 hours                              weave

根据提示,Weave Scope 的访问地址为 http://[Host_IP]:4040/

容器监控

Weave Scope 地图中间显示了 Host 当前运行的容器,不过少了几个 weave 相关的容器。

Weave Scope 将容器分为两类:Weave 自己的容器 System Container,和其他容器 Application Container,默认只显示后者。

Weave Scope 界面是一个可交互的地图,使用起来很方便。比如点击地图左下角选择开关 All

地图上会立刻会显示出所有的容器。

点击 CPU 选择器。

Weave Scope 将以高低水位方式显示容器 CPU 使用量。

如果此时我们将鼠标放到容器图标上,则会显示具体的 CPU%。

如果要查看容器的详细信息,比如 sysdig,可以点击该容器的图标。

详细信息包括这么几部分:

Status

CPU、内存的实时使用情况以及历史曲线。

INFO

容器 image、启动命令、状态、网络等信息。

以下几项需拉动滚动条查看。

详细信息包括这么几部分:

Status

CPU、内存的实时使用情况以及历史曲线。

INFO

容器 image、启动命令、状态、网络等信息。

在容器信息的上面还有一排操作按钮。

分别是:

attach 到容器启动进程,相当于执行 docker container attach

打开 shell,相当于执行 docker container exec

重启容器,相当于执行 docker container restart

暂停容器,相当于执行 docker container pause

关闭容器,相当于执行 docker container stop

这排按钮使我们能够远程控制容器,相当方便。最常用的可能就是 了。比如可以直接跳进 sysdig 容器,启动 csysdig 监控工具。

多主机监控
前面我们已经领略了 Weave Scope 的丰富功能和友好的操作界面。不过它还有一个重要功能:多主机监控。

真正的部署环境都不可能只有一个 host,如果能在一个界面上监控整个容器环境,那绝对是件非常有效率的事情。下面我们就来实践这个功能。

两个 Docker Host:

host1: 192.168.2.120
host2: 192.168.56.130

在两个 host 上都执行如下命令:

scope launch 192.168.2.120 192.168.2.130

这样,无论访问 http://192.168.2.130:4040 还是 http://192.168.2.120:4040,都能监控到两个 host。

Weave Scope 还支持逻辑条件查询,比如输入 cpu > 2,立刻回找出 CPU 利用率高于 2% 的容器。

4、cAdvisor

cAdvisor 是 google 开发的容器监控工具,我们来看看 cAdvisor 有什么能耐。

在 host 1中运行 cAdvisor 容器。

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

通过 http://[Host_IP]:8080 访问 cAdvisor。

监控 Docker Host

cAdvisor 会显示当前 host 的资源使用情况,包括 CPU、内存、网络、文件系统等。

以上就是 cAdvisor 的主要功能,总结起来主要两点:

  1. 展示 Host 和容器两个层次的监控数据。
  2. 展示历史变化数据。

由于 cAdvisor 提供的操作界面略显简陋,而且需要在不同页面之间跳转,并且只能监控一个 host,这不免会让人质疑它的实用性。但 cAdvisor 的一个亮点是它可以将监控到的数据导出给第三方工具,由这些工具进一步加工处理。

我们可以把 cAdvisor 定位为一个监控数据收集器,收集和导出数据是它的强项,而非展示数据。

5、Prometheus

Prometheus 是一个非常优秀的监控工具。准确的说,应该是监控方案。Prometheus 提供了监控数据搜集、存储、处理、可视化和告警一套完整的解决方案。

让我们先来看看 Prometheus 的架构。

Prometheus Server

Prometheus Server 负责从 Exporter 拉取和存储监控数据,并提供一套灵活的查询语言(PromQL)供用户使用。

Exporter

Exporter 负责收集目标对象(host, container…)的性能数据,并通过 HTTP 接口供 Prometheus Server 获取。

可视化组件

监控数据的可视化展现对于监控方案至关重要。以前 Prometheus 自己开发了一套工具,不过后来废弃了,因为开源社区出现了更为优秀的产品 Grafana。Grafana 能够与 Prometheus 无缝集成,提供完美的数据展示能力。

Alertmanager

用户可以定义基于监控数据的告警规则,规则会触发告警。一旦 Alermanager 收到告警,会通过预定义的方式发出告警通知。支持的方式包括 Email、PagerDuty、Webhook 等.

也许一些熟悉其他监控方案的同学看了 Prometheus 的架构会不以为然,“这些功能 Zabbix、Graphite、Nagios 这类监控系统也都有,没什么特别的啊!”。

Prometheus 最大的亮点和先进性是它的多维数据模型.

我们先来看一个例子。

比如要监控容器 webapp1 的内存使用情况,最传统和典型的方法是定义一个指标 container_memory_usage_bytes_webapp1 来记录 webapp1 的内存使用数据。假如每1分钟取一次样,那么在数据库里就会有记录。

好,现在需求发生了点变化,我们需要知道所有 webapp 容器的内存使用情况。如果还是采用前面的方法,就不得不增加新的指标 container_memory_usage_bytes_webapp2container_memory_usage_bytes_webapp3

像 Graphite 这类更高级的监控方案采用了更为优雅的层次化数据模型。为了满足上面的需求,Graphite 会定义指标 container.memory_usage_bytes.webapp1container.memory_usage_bytes.webapp2container.memory_usage_bytes.webapp3

然后就可以用 container.memory_usage_bytes.webapp* 获取所有的 webapp 的内存使用数据。

此外,Graphite 还支持 sum() 等函数对指标进行计算和处理,比如 sum(container.memory_usage_bytes.webapp*) 可以得到所有 webapp 容器占用的总内存量。

目前为止问题处理得都很好。但客户总是会提出更多的需求:现在不仅要按容器名字统计内存使用量,还要按镜像来统计;或者想对比一下某一组容器在生产环境和测试环境中对内存使用的不同情况。

当然你可以说:只要定义更多的指标就能满足这些需求。比如 container.memory_usage_bytes.image1.webapp1container.memory_usage_bytes.webapp1.prod等。

但问题在于我们没办法提前预知客户要用这些数据回答怎样的问题,所以我们没办法提前定义好所有的指标。

下面来看看 Prometheus 的解决方案。

Prometheus 只需要定义一个全局的指标 container_memory_usage_bytes,然后通过添加不同的维度数据来满足不同的业务需求。

比如对于前面 webapp1 的三条取样数据,转换成 Prometheus 多维数据将变成:

后面三列 container_nameimageenv 就是数据的三个维度。想象一下,如果不同 env(prod、test、dev),不同 image(mycom/webapp:1.2、mycom/webapp:1.3)的容器,它们的内存使用数据中标注了这三个维度信息,那么将能满足很多业务需求,比如:

  1. 计算 webapp2 的平均内存使用情况:avg(container_memory_usage_bytes{container_name=“webapp2”})
  2. 计算运行 mycom/webapp:1.3 镜像的所有容器内存使用总量:sum(container_memory_usage_bytes{image=“mycom/webapp:1.3”})
  3. 统计不同运行环境中 webapp 容器内存使用总量:sum(container_memory_usage_bytes{container_name=~“webapp”}) by (env)

这里只列了几个例子,不过已经能够说明 Prometheus 数据模型的优势了:

  1. 通过维度对数据进行说明,附加更多的业务信息,进而满足不同业务的需求。同时维度是可以动态添加的,比如再给数据加上一个 user 维度,就可以按用户来统计容器内存使用量了。
  2. Prometheus 丰富的查询语言能够灵活、充分地挖掘数据的价值。前面示例中的 avg、sum、by 只是查询语言中很小的一部分功能,已经为我们展现了 Prometheus 对多维数据进行分片、聚合的强大能力。

部署Promethues

我们将通过 Prometheus 监控两台 Docker Host:192.168.2.120 和 192.168.2.130,监控 host 和容器两个层次的数据。

按照架构图,我们需要运行如下组件:

Prometheus Server

Prometheus Server 本身也将以容器的方式运行在 host 192.168.2.130 上。

Exporter

Prometheus 有很多现成的 Exporter,完整列表请参考 https://prometheus.io/docs/instrumenting/exporters/

我们将使用:

  1. Node Exporter,负责收集 host 硬件和操作系统数据。它将以容器方式运行在所有 host 上。
  2. cAdvisor,负责收集容器数据。它将以容器方式运行在所有 host 上。

Grafana

显示多维数据,Grafana 本身也将以容器方式运行在 host 192.168.2.130 上。

运行 Node Exporter

在两个 host 上执行如下命令:

docker run -d -p 9100:9100   -v "/proc:/host/proc"   -v "/sys:/host/sys"   -v "/:/rootfs"   --net=host   prom/node-exporter   --path.procfs /host/proc   --path.sysfs /host/sys   --collector.filesystem.ignored-mount-points "^/(sys|proc|dev|host|etc)($|/)"
[[email protected] ~]# docker run -d -p 9100:9100 >   -v "/proc:/host/proc" >   -v "/sys:/host/sys" >   -v "/:/rootfs" >   --net=host >   prom/node-exporter >   --path.procfs /host/proc >   --path.sysfs /host/sys >   --collector.filesystem.ignored-mount-points "^/(sys|proc|dev|host|etc)($|/)"
Unable to find image ‘prom/node-exporter:latest‘ locally
latest: Pulling from prom/node-exporter
0de338cf4258: Pull complete
f508012419d8: Pull complete
d764f7880123: Pull complete
Digest: sha256:c390c8fea4cd362a28ad5070aedd6515aacdfdffd21de6db42ead05e332be5a9
Status: Downloaded newer image for prom/node-exporter:latest
WARNING: Published ports are discarded when using host network mode
b5c7f8e81a107e9f3e961b9b707b107434a63cd46cda30262244f93ca0cd353c

注意,这里我们使用了 --net=host,这样 Prometheus Server 可以直接与 Node Exporter 通信。

Node Exporter 启动后,将通过 9100 提供 host 的监控数据。在浏览器中通过 http://192.168.2.120:9100/metrics 测试一下。

运行 cAdvisor

在两个 host 上执行如下命令:

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   --net=host   google/cadvisor:latest
运行 Prometheus Server

在 host 192.168.2.130 上执行如下命令:

docker run -d -p 9090:9090   -v /root/prometheus.yml:/etc/prometheus/prometheus.yml   --name prometheus   --net=host   prom/prometheus

注意,这里我们使用了 --net=host,这样 Prometheus Server 可以直接与 Exporter 和 Grafana 通信。

prometheus.yml 是 Prometheus Server 的配置文件。

最重要的配置是:

static_configs:
  - targets: [‘localhost:9090‘,‘localhost:8080‘,‘localhost:9100‘,‘192.168.2.120:8080‘,‘192.168.2.120:9100‘]

指定从哪些 exporter 抓取数据。这里指定了两台 host 上的 Node Exporter 和 cAdvisor。

另外 localhost:9090 就是 Prometheus Server 自己,可见 Prometheus 本身也会收集自己的监控数据。同样地,我们也可以通过 http://192.168.2.130:9090/metrics 测试一下。

在浏览器中打开 http://192.168.2.130:9090 ,点击菜单 Status -> Targets

如下图所示:

所有 TargetState 都是 UP,说明 Prometheus Server 能够正常获取监控数据。

运行 Grafana

在 host 192.168.2.130上执行如下命令:

docker run -d -i -p 3000:3000   -e "GF_SERVER_ROOT_URL=http://grafana.server.name"    -e "GF_SECURITY_ADMIN_PASSWORD=secret"    --net=host   grafana/grafana

注意,这里我们使用了 --net=host,这样 Grafana 可以直接与 Prometheus Server 通信。

-e "GF_SECURITY_ADMIN_PASSWORD=secret 指定了 Grafana admin用户密码 secret

Grafana 启动后。在浏览器中打开 http://192.168.2.130:3000/

登录后,Grafana 将引导我们配置 Data Source。

Name 为 Data Source 命名,例如 prometheus

Type 选择 Prometheus

Url 输入 Prometheus Server 的地址 http://192.168.2.130:9090

其他保持默认值,点击 Add

如果一切顺利,Grafana 应该已经能够访问 Prometheus 中存放的监控数据了,那么如何展示呢?

Grafana 是通过 Dashboard 展示数据的,在 Dashboard 中需要定义:

  1. 展示 Prometheus 的哪些多维数据?需要给出具体的查询语言表达式。
  2. 用什么形式展示,比如二维线性图,仪表图,各种坐标的含义等。

可见,要做出一个 Dashboard 也不是件容易的事情。幸运的是,我们可以借助开源社区的力量,直接使用现成的 Dashboard。

访问 https://grafana.com/dashboards?dataSource=prometheus&search=docker,将会看到很多用于监控 Docker 的 Dashboard。

我们可以下载这些现成的 Dashboard,然后 import 到我们的 Grafana 中就可以直接使用了。

比如下载 Docker and system monitoring,得到一个 json 文件,然后点击 Grafana 左上角菜单 Dashboards -> Import

导入我们下载的 json 文件。

Dashboard 将立刻展示出漂亮的图表。

在这个 Dashboard 中,上部分是 host 的数据,我们可以通过 Node 切换不同的 host。

Dashboard 的下半部分展示的是所有的容器监控数据。Grafana 的 Dashboard 是可交互的,我们可以在图表上只显示指定的容器、选取指定的时间区间、重新组织和排列图表、调整刷新频率,功能非常强大。

6、各种方案对比

部署容易度

ps/top/stats 无疑是最容易使用的,它们是 Docker 自带的子命令,随时随地都可以用来快速了解容器的状态。其余几种也都能以容器的方式运行,总的来说都不算复杂。相对而言,Prometheus 涉及的组件比较多,搭建整个方案需要运行的容器数量也要多些,部署和管理的难道稍大。

数据详细度

ps/top/stats 和 cAdvisor 能够监控容器基本的资源使用情况,Sysdig、Weave Scope 和 Prometheus 则能提供更丰富的数据。

多 Host 监控

Weave Scope 和 Prometheus 可以监控整个集群,而其余的工具只提供单个 Host 的监控能力。

告警功能

只有 Prometheus 具备原生的告警功能。

监控非容器资源

Sysdig、Weave Scope 和 cAdvisor 可以监控到 Host 操作系统的状态, Prometheus 则可以通过 Exporter 支持应用级别的监控,比如监控 ceph、haproxy 等。

几点建议

  1. Docker ps/top/stats 最适合快速了解容器运行状态,从而判断是否需要进一步分析和排查。
  2. Sysdig 提供了的丰富的分析和挖掘功能,是 Troubleshooting 的神器。
  3. cAdvisor 一般不会单独使用,通常作为其他监控工具的数据收集器,比如 Prometheus。
  4. Weave Scope 流畅简洁的操控界面是其最大亮点,而且支持直接在 Web 界面上执行命令。
  5. Prometheus 的数据模型和架构决定了它几乎具有无限的可能性。Prometheus 和 Weave Scope 都是优秀的容器监控方案。除此之外,Prometheus 还可以监控其他应用和系统,更为综合和全面。
  6. 监控系统的选择,并不是一道单选题,应该根据需求和实际情况搭配组合,优势互补。除了这里介绍的 5 种工具和方案,监控领域还有很多选项,也都可以考虑。

原文地址:https://www.cnblogs.com/wlbl/p/10150471.html

时间: 2024-10-08 16:30:28

docker入门基础(五)的相关文章

docker入门基础(一)

目录 一.简介 1.docker架构 2.docker的概念 二.docker的安装和管理 1.docker安装 2.docker配置阿里云镜像加速 3.基础命令 一.简介 参考 https://www.cnblogs.com/linuxk/p/8984242.html 1.docker架构 Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器. Docker 容器通过 Docker 镜像来创建. 容器与镜像的关系类似于面向对象编程中的对象与类. D

docker入门基础(四)

目录 六.杂项 六.杂项 Docker组件: docker程序环境: 环境配置文件: /etc/sysconfig/docker-network /etc/sysconfig/docker-storage /etc/sysconfig/docker Unit File: /usr/lib/systemd/system/docker.service Docker Registry配置文件: /etc/containers/registries.conf docker-ce: 配置文件:/etc/d

docker入门基础(六)

目录 八.docker 日志 1. Docker 的日志功能. 对于一个运行的容器,Docker 会将日志发送到 容器的 标准输出设备(STDOUT)和标准错误设备(STDERR),STDOUT 和 STDERR 实际上就是容器的控制台终端. 举个例子,用下面的命令运行 httpd 容器: [email protected] ~]# docker run -p 80:80 httpd AH00558: httpd: Could not reliably determine the server'

Objective-C 快速入门--基础(五)

1.什么是属性?属性会帮我们做哪些事情?请详细说明. (1)①属性是Objective-C 2.0定义的语法,为实例变量提供了setter.getter方法的默认实现:②能在一定程度上简化程序代码,并且增强实例变量的访问安全性. (2)①属性会对于你声明的实例变量,它会默认帮你补齐你所需要的(你没有声明的,或者你没有实现的)getter,setter方法:②如果你不满意系统默认生成的getter,setter方法 需要同时重写一个实例变量的getter,setter方法,这时就需要注明 @syn

mybatis入门基础(五)----动态SQL

一:动态SQL 1.1.定义 mybatis核心对sql语句进行灵活操作,通过表达式进行判断,对sql进行灵活拼接.组装. 1.2.案例需求 用户信息综合查询列表这个statement的定义使用动态sql,对查询条件进行判断,如果输入参数不为空才进行查询拼接. 1.3.UserMapper.xml 1 <!-- 用户信息综合查询 2 #{userCustom.sex}:取出pojo包装对象中性别值 3 ${userCustom.username}:取出pojo对象中用户名称 4 --> 5 &

小白学 Python 爬虫(37):爬虫框架 Scrapy 入门基础(五) Spider Middleware

人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Linux基础入门 小白学 Python 爬虫(4):前置准备(三)Docker基础入门 小白学 Python 爬虫(5):前置准备(四)数据库基础 小白学 Python 爬虫(6):前置准备(五)爬虫框架的安装 小白学 Python 爬虫(7):HTTP 基础 小白学 Python 爬虫(8):网页基

Docker入门教程(五)Docker安全

Docker入门教程(五)Docker安全 [编者的话]DockOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第五篇,介绍了Docker的安全问题,依然是老话重谈,入门者可以通过阅读本文快速了解. 我们必须高度重视开源软件的安全问题,当开发者在使用Docker时,从本地构建应用程序到生产环境部署是没有任何差异的(译者注:作者的言外之意是更应该重视Docker的安全问题).当Docker被越来越多的平台使用的时候,我们需要严格保证Docker作为一个项目或者平台的安全性.

MyBatis基础入门《五》核心配置文件

MyBatis基础入门<五>核心配置文件 描述: 在前面的章节中,简单的学习使用了一下mybatis,对于配置文件没有过多详细说明. 这里先描述项目中的一个核心配置文件:mybatis-config.xml 文件. 资料参考:http://www.mybatis.org/mybatis-3/ 1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE configuration 3 PUB

8天入门docker系列 —— 第五天 使用aspnetcore小案例熟悉容器互联和docker-compose一键部署

原文:8天入门docker系列 -- 第五天 使用aspnetcore小案例熟悉容器互联和docker-compose一键部署 这一篇继续完善webnotebook,如果你读过上一篇的内容,你应该知道怎么去挂载webnotebook日志和容器的远程访问,但是这些还远不够,webnotebook 总要和一些数据库打交道吧,比如说mysql,mongodb,redis,通常情况下这些存储设备要么是以容器的方式承载,要么是由DBA在非容器环境下统一管理. 一:webnotebook连接容器redis