zoukankan      html  css  js  c++  java
  • 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 的特点如下:

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

    不过 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、启动命令、状态、网络等信息。

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

    https://image.ipaiban.com/upload-ueditor-image-20171012-1507775981554074196.png

    分别是:

    https://image.ipaiban.com/upload-ueditor-image-20171012-1507775981723005669.png attach 到容器启动进程,相当于执行 docker container attach

    https://image.ipaiban.com/upload-ueditor-image-20171012-1507775981731090672.png 打开 shell,相当于执行 docker container exec

    https://image.ipaiban.com/upload-ueditor-image-20171012-1507775981831005806.png 重启容器,相当于执行 docker container restart

    https://image.ipaiban.com/upload-ueditor-image-20171012-1507775981882080095.png 暂停容器,相当于执行 docker container pause

    https://image.ipaiban.com/upload-ueditor-image-20171012-1507775981974062342.png 关闭容器,相当于执行 docker container stop

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

    https://image.ipaiban.com/upload-ueditor-image-20171012-1507775982941044086.png

    多主机监控
    前面我们已经领略了 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分钟取一次样,那么在数据库里就会有记录。

    https://image.ipaiban.com/upload-ueditor-image-20171022-1508656915704001043.png

    好,现在需求发生了点变化,我们需要知道所有 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 多维数据将变成:

    https://image.ipaiban.com/upload-ueditor-image-20171022-1508656915752002917.png

    后面三列 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)($|/)"
    
    [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

    如下图所示:

    所有 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 种工具和方案,监控领域还有很多选项,也都可以考虑。
  • 相关阅读:
    junit所需要的jar包
    【SSH学习笔记】用Struts2实现简单的用户登录
    HIbernate 一对多 多对多
    Hibernate 干货2
    Hibernate 干货
    hibernate学习笔记
    Hibernate 框架学习
    Class的isAssignableFrom方法
    dubbo源码分析1——SPI机制的概要介绍
    Dubbo简介
  • 原文地址:https://www.cnblogs.com/wlbl/p/10150471.html
Copyright © 2011-2022 走看看