zoukankan      html  css  js  c++  java
  • docker容器监控

    容器具有以下特性:

    容器是短期存活的,并且可以动态调度;
    
    容器的本质是进程,而不是一个完整操作系统;
    
    由于容器非常轻量,容器的创建和销毁也会比传统虚拟机更加频繁。
    

    Docker 容器的监控方案有很多,除了 Docker 自带的docker stats命令,还有很多开源的解决方案,例如 sysdig、cAdvisor、Prometheus 等,都是非常优秀的监控工具。
    docker stats命令确实可以获取并显示 Docker 容器运行状态。但是它的缺点也很明显,因为它只能获取本机数据,无法查看历史监控数据,没有可视化展示面板。

    因此,生产环境中我们通常使用另一种容器监控解决方案 cAdvisor。
    cAdvisor 的安装与使用

    首先使用以下命令启动 cAdvisor:

    $ docker run 
      --volume=/:/rootfs:ro 
      --volume=/var/run:/var/run:ro 
      --volume=/sys:/sys:ro 
      --volume=/var/lib/docker/:/var/lib/docker:ro 
      --volume=/dev/disk/:/dev/disk:ro 
      --publish=8080:8080 
      --detach=true 
      --name=cadvisor 
      --privileged 
      --device=/dev/kmsg 
      lagoudocker/cadvisor:v0.37.0
    

    此时,cAdvisor 已经成功启动,我们可以通过访问 http://localhost:8080 访问到 cAdvisor 的 Web 界面
    使用 cAdvisor 查看主机监控

    访问 http://localhost:8080/containers/

    使用 cAdvisor 查看容器监控

    访问 http://localhost:8080/docker/

    监控原理

    我们知道 Docker 是基于 Namespace、Cgroups 和联合文件系统实现的。其中 Cgroups 不仅可以用于容器资源的限制,还可以提供容器的资源使用率。无论何种监控方案的实现,底层数据都来源于 Cgroups。

    Cgroups 的工作目录为/sys/fs/cgroup,/sys/fs/cgroup目录下包含了 Cgroups 的所有内容。Cgroups包含很多子系统,可以用来对不同的资源进行限制。例如对CPU、内存、PID、磁盘 IO等资源进行限制和监控。

    为了更详细的了解 Cgroups 的子系统,我们通过 ls -l 命令查看/sys/fs/cgroup文件夹,可以看到很多目录:

    $ sudo ls -l /sys/fs/cgroup/
    total 0
    dr-xr-xr-x 5 root root  0 Jul  9 19:32 blkio
    lrwxrwxrwx 1 root root 11 Jul  9 19:32 cpu -> cpu,cpuacct
    dr-xr-xr-x 5 root root  0 Jul  9 19:32 cpu,cpuacct
    lrwxrwxrwx 1 root root 11 Jul  9 19:32 cpuacct -> cpu,cpuacct
    dr-xr-xr-x 3 root root  0 Jul  9 19:32 cpuset
    dr-xr-xr-x 5 root root  0 Jul  9 19:32 devices
    dr-xr-xr-x 3 root root  0 Jul  9 19:32 freezer
    dr-xr-xr-x 3 root root  0 Jul  9 19:32 hugetlb
    dr-xr-xr-x 5 root root  0 Jul  9 19:32 memory
    lrwxrwxrwx 1 root root 16 Jul  9 19:32 net_cls -> net_cls,net_prio
    dr-xr-xr-x 3 root root  0 Jul  9 19:32 net_cls,net_prio
    lrwxrwxrwx 1 root root 16 Jul  9 19:32 net_prio -> net_cls,net_prio
    dr-xr-xr-x 3 root root  0 Jul  9 19:32 perf_event
    dr-xr-xr-x 5 root root  0 Jul  9 19:32 pids
    dr-xr-xr-x 5 root root  0 Jul  9 19:32 systemd
    

    总结一下,容器的监控原理其实就是定时读取 Linux 主机上相关的文件并展示给用户。

    现在学习还不晚;
  • 相关阅读:
    HDU 1828 Picture (线段树:扫描线周长)
    [USACO18OPEN] Multiplayer Moo (并查集+维护并查集技巧)
    NOIP2016 天天爱跑步 (树上差分+dfs)
    NOIP2013 华容道 (棋盘建图+spfa最短路)
    NOIP2015 运输计划 (树上差分+二分答案)
    NOIP2018 前流水账
    luogu P2331 [SCOI2005]最大子矩阵
    luogu P2627 修剪草坪
    CF101D Castle
    luogu P2473 [SCOI2008]奖励关
  • 原文地址:https://www.cnblogs.com/ainimore/p/14414392.html
Copyright © 2011-2022 走看看