docker入门基础(五)
八、Docker 最常用的监控方案
1、Docker 自带的监控子命令
1)ps
docker container ps
是我们早已熟悉的命令了,方便我们查看当前运行的容器。
[root@host1 ~]# 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
更准确,所以更推荐使用。
[root@host1 ~]# 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]
命令。
[root@host1 ~]# 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
。
[root@host1 ~]# 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
用于显示每个容器各种资源的使用情况。
[root@host1 ~]# 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
。
[root@host1 ~]# 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。
root@94ff839eabc1:/# 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 的特点如下:
- 监控信息全,包括 Linux 操作系统和容器。
- 界面交互性强。
不过 sysdig 显示的是实时数据,看不到变化和趋势。而且是命令行操作方式,需要 ssh 到 Host 上执行,会带来一些不便。
3、scope
Weave Scope 的最大特点是会自动生成一张 Docker 容器地图,让我们能够直观地理解、监控和控制容器。
安装运行 weave scope
[root@host1 ~]# 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
[root@host1 ~]# chmod a+x /usr/local/bin/scope
[root@host1 ~]# 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。
[root@host1 ~]# 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 的主要功能,总结起来主要两点:
- 展示 Host 和容器两个层次的监控数据。
- 展示历史变化数据。
由于 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_webapp2
、container_memory_usage_bytes_webapp3
…
像 Graphite 这类更高级的监控方案采用了更为优雅的层次化数据模型。为了满足上面的需求,Graphite 会定义指标 container.memory_usage_bytes.webapp1
、container.memory_usage_bytes.webapp2
、container.memory_usage_bytes.webapp3
…
然后就可以用 container.memory_usage_bytes.webapp*
获取所有的 webapp 的内存使用数据。
此外,Graphite 还支持 sum()
等函数对指标进行计算和处理,比如 sum(container.memory_usage_bytes.webapp*)
可以得到所有 webapp 容器占用的总内存量。
目前为止问题处理得都很好。但客户总是会提出更多的需求:现在不仅要按容器名字统计内存使用量,还要按镜像来统计;或者想对比一下某一组容器在生产环境和测试环境中对内存使用的不同情况。
当然你可以说:只要定义更多的指标就能满足这些需求。比如 container.memory_usage_bytes.image1.webapp1
、container.memory_usage_bytes.webapp1.prod
等。
但问题在于我们没办法提前预知客户要用这些数据回答怎样的问题,所以我们没办法提前定义好所有的指标。
下面来看看 Prometheus 的解决方案。
Prometheus 只需要定义一个全局的指标 container_memory_usage_bytes
,然后通过添加不同的维度数据来满足不同的业务需求。
比如对于前面 webapp1 的三条取样数据,转换成 Prometheus 多维数据将变成:
后面三列 container_name
、image
、env
就是数据的三个维度。想象一下,如果不同 env
(prod、test、dev),不同 image
(mycom/webapp:1.2、mycom/webapp:1.3)的容器,它们的内存使用数据中标注了这三个维度信息,那么将能满足很多业务需求,比如:
- 计算 webapp2 的平均内存使用情况:avg(container_memory_usage_bytes{container_name=“webapp2”})
- 计算运行 mycom/webapp:1.3 镜像的所有容器内存使用总量:sum(container_memory_usage_bytes{image=“mycom/webapp:1.3”})
- 统计不同运行环境中 webapp 容器内存使用总量:sum(container_memory_usage_bytes{container_name=~“webapp”}) by (env)
这里只列了几个例子,不过已经能够说明 Prometheus 数据模型的优势了:
- 通过维度对数据进行说明,附加更多的业务信息,进而满足不同业务的需求。同时维度是可以动态添加的,比如再给数据加上一个
user
维度,就可以按用户来统计容器内存使用量了。 - 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/
我们将使用:
- Node Exporter,负责收集 host 硬件和操作系统数据。它将以容器方式运行在所有 host 上。
- 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)($|/)"
[root@host1 ~]# 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
。
如下图所示:
所有 Target
的 State
都是 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 中需要定义:
- 展示 Prometheus 的哪些多维数据?需要给出具体的查询语言表达式。
- 用什么形式展示,比如二维线性图,仪表图,各种坐标的含义等。
可见,要做出一个 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 等。
几点建议
- Docker ps/top/stats 最适合快速了解容器运行状态,从而判断是否需要进一步分析和排查。
- Sysdig 提供了的丰富的分析和挖掘功能,是 Troubleshooting 的神器。
- cAdvisor 一般不会单独使用,通常作为其他监控工具的数据收集器,比如 Prometheus。
- Weave Scope 流畅简洁的操控界面是其最大亮点,而且支持直接在 Web 界面上执行命令。
- Prometheus 的数据模型和架构决定了它几乎具有无限的可能性。Prometheus 和 Weave Scope 都是优秀的容器监控方案。除此之外,Prometheus 还可以监控其他应用和系统,更为综合和全面。
- 监控系统的选择,并不是一道单选题,应该根据需求和实际情况搭配组合,优势互补。除了这里介绍的 5 种工具和方案,监控领域还有很多选项,也都可以考虑。