精华内容
下载资源
问答
  • 容器监控

    2019-06-19 10:08:36
    docker 自带的监控子命令 ps:docker ps | docker container ls top:docker container top $name...sysdig 是一个轻量级的系统监控工具,同时它原生还支持容器。 docker container run -it --rm --name=sysdig --p...

    docker 自带的监控子命令

    • ps:docker ps | docker container ls
    • top:docker container top $name
    • stats:docker container stats

    sysdig

    sysdig 是一个轻量级的系统监控工具,同时它原生还支持容器。

    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
    
    • 交互界面
    • 实时性
    • 命令行操作

    Weave Scope

    weave scope 的最大特点是会自动生成一张 docker host 地图,直观地理解、监控和控制容器。

    curl -L git.io/scope -o /usr/local/bin/scope
    chmod a+x /usr/local/bin/scope
    scope launch
    

    Weave Scope 的访问地址为http://[Host IP]:4040/
    在这里插入图片描述

    cAdvisor

    cAdvisor 是 google 开发的容器监控工具。
    安装:

    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。

    Prometheus

    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)($|/)"
    

    prometheus.yml配置文件

    global:
      scrape_interval:     15s # By default, scrape targets every 15 seconds.
      evaluation_interval: 15s # By default, scrape targets every 15 seconds.
      # scrape_timeout: 10s # is set to the global default (10s).
    
      # Attach these labels to any time series or alerts when communicating with
      # external systems (federation, remote storage, Alertmanager).
      external_labels:
        monitor: 'codelab-monitor'
    
    rule_files:
      # - "rules/node.rules"
      # - "rules2/*.rules"
      
    scrape_configs:
      - job_name: 'prometheus'
    
        static_configs:
          - targets: ['localhost:9090','localhost:8080','localhost:9100','192.168.24.136:8080','192.168.24.136:9100']
    

    运行 Grafana在 host 192.168.24.137 上执行如下命令:

    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
    
    展开全文
  • 容器监控系统

    2019-10-09 08:20:58
    随着线上服务的全面docker...为了更好的监控容器运行情况,更重要的是为了后续的容器动态调度算法需要的大量运行时数据的搜集,经过调研后,基于CAdvisor + InfluxDB + Grafana搭建了这套容器监控系统。 1 容器监控...

    随着线上服务的全面docker化,对docker容器的监控就很重要了。SA的监控系统是物理机的监控,在一个物理机跑多个容器的情况下,我们是没法从一个监控图表里面区分各个容器的资源占用情况的。

    为了更好的监控容器运行情况,更重要的是为了后续的容器动态调度算法需要的大量运行时数据的搜集,经过调研后,基于CAdvisor + InfluxDB + Grafana搭建了这套容器监控系统。

    1 容器监控方案选择

    在调研容器监控系统的时候,其实是有很多选择的,比如docker自带的docker stats命令,Scout,Data Dog,Sysdig Cloud,Sensu Monitoring Framework,CAdvisor等。

    通过docker stats命令可以很方便的看到当前宿主机上所有容器的CPU,内存以及网络流量等数据。但是docker stats命令的缺点就是统计的只是当前宿主机的所有容器,而获取的监控数据是实时的,没有地方存储,也没有报警功能。

    通过docker stats命令可以很方便的看到当前宿主机上所有容器的CPU,内存以及网络流量等数据。但是docker stats命令的缺点就是统计的只是当前宿主机的所有容器,而获取的监控数据是实时的,没有地方存储,也没有报警功能。

    而Scout(链接:https://scoutapp.com/)、Sysdig Cloud,Data Dog虽然都提供了较完善的服务,但是它们都是托管的服务而且都收费,于是也不在考虑范围之内。Sensu Monitoring Framework(链接:https://sensu.io/)集成度较高,也免费,但是部署过于复杂。最后,我们选择了CAdvisor做容器监控工具。

    CAdvisor谷歌出品,优点是开源产品,监控指标齐全,部署方便,而且有官方的docker镜像。缺点是集成度不高,默认只在本地保存2分钟数据。不过在调研之后发现可以加上InfluxDB存储数据,对接Grafana展示图表,比较便利地搭建好了容器监控系统,数据收集和图表展示效果良好,对系统性能也几乎没有什么影响。

    2 容器资源监控-CAdvisor

    2.1 部署与运行

    CAdvisor是一个容器资源监控工具,包括容器的内存,CPU,网络IO,磁盘IO等监控,同时提供了一个WEB页面用于查看容器的实时运行状态。CAdvisor默认存储2分钟的数据,而且只是针对单物理机。不过,CAdvisor提供了很多数据集成接口,支持InfluxDB,Redis,Kafka,Elasticsearch等集成,可以加上对应配置将监控数据发往这些数据库存储起来。

    由于CAdvisor已经容器化,部署和运行很简单,执行如下命令即可:

    运行之后,就可以在浏览器打开http://ip:8080查看宿主机的容器监控数据了。

    2.2 集成InfluxDB

    如前面说到,CAdvisor默认只在本机保存最近2分钟的数据,为了持久化存储数据和统一收集展示监控数据,需要将数据存储到InfluxDB中。InfluxDB是一个时序数据库,专门用于存储时序相关数据,很适合存储CAdvisor的数据。而且,CAdvisor本身已经提供了InfluxDB的集成方法,在启动容器时指定配置即可。

    我们使用了管理容器来管理CAdvisor,修改后的启动配置如下。主要指定了存储引擎为InfluxDB,以及指定InfluxDB的HTTP API的地址(这里用到了自建DNS的域名 influxdb.service.consul以避免暴露外部端口),还有对应的数据库和用户名密码。

    {
        "binds": [
              "/:/rootfs:ro",
              "/var/run:/var/run:rw",
              "/sys:/sys:ro",
              "/home/docker/var/lib/docker/:/var/lib/docker:ro"
        ],
        "image": "forum-cadvisor",
        "labels": {
            "type": "cadvisor"
        },
        "command": " -docker_only=true -storage_driver=influxdb  -storage_driver_db=cadvisor  -storage_driver_host=influxdb.service.consul:8086  -storage_driver_user=testuser  -storage_driver_password=testpwd",
        "tag": "latest",
        "hostname": "cadvisor-{{lan_ip}}"
    }

    注意到我们使用了一个自己的forum-cadvisor镜像来代替官方的cadvisor镜像,这是为了修复cadvisor一些问题以及基于管理方便性的考虑。

    2.3 CAdvisor存在的问题

    1)运行报错问题

    运行最新的CAdvisor容器的时候,发现容器有如下的错误日志:

    这个问题是因为没有安装 findutils 工具导致的。

    2)统计不到容器内存数据

    Debian默认没有开启 CGroup Memory的支持,CAdvisor默认情况下无法统计到容器内存数据,需要修改GRUB启动参数,修改文件/etc/default/grub,加入下面这行:

    GRUB_CMDLINE_LINUX=" cgroup_enable=memory"

    然后更新grub2重启即可。

    3)网络流量监控数据错误问题

    在CAdvisor上线一段时间后,顺安发现容器的网络数据跟实际情况不符,并查找资料后发现问题是因为CAdvisor默认只统计第一个网卡的流量,而在我们的容器中是有多个overlay网络的,需要统计容器中所有的网卡流量。于是我修改了CAdvisor统计网络流量部分的代码并重新编译了一个版本在线上使用,修改的代码在这里。

    最后,我们自定义的镜像文件 forum-cadvisor.Dockerfile 是这样的(src/cadvisor是修改后重新编译的cadvisor可执行文件):

    2.4 CAdvisor原理简介

    CAdvisor运行时挂载了宿主机根目录,docker根目录等多个目录,由此可以从中读取容器的运行时信息。docker基础技术有Linux namespace,Control Group(CGroup),AUFS等,其中CGroup用于系统资源限制和优先级控制的。

    宿主机的/sys/fs/cgroup/目录下面存储的就是CGroup的内容了,CGroup包括多个子系统,如对块设备的blkio,cpu,内存,网络IO等限制。Docker在CGroup里面的各个子系统中创建了docker目录,而CAdvisor运行时挂载了宿主机根目录和 /sys目录,从而CAdvisor可以读取到容器的资源使用记录。

    比如下面可以看到容器b1f257当前时刻的CPU的使用统计。CGroup详细介绍可以参见DOCKER基础技术:LINUX CGROUP(链接https://coolshell.cn/articles/17049.html)

    # cat /sys/fs/cgroup/cpu/docker/b1f25723c5c3a17df5026cb60e1d1e1600feb293911362328bd17f671802dd31/cpuacct.stat
    user 95191
    system 5028
    

    而容器网络流量CAdvisor是从/proc/PID/net/dev中读取的,如上面的容器b1f257进程在宿主机的PID为6748,可以看到容器所有网卡的接收和发送流量以及错误数等。CAdvisor定期读取对应目录下面的数据并定期发送到指定的存储引擎存储,而本地会默认存储最近2分钟的数据并提供UI界面查看。

    # cat /proc/6748/net/dev
    Inter-|   Receive                                                |  Transmit
     face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed
      eth0: 6266314     512    0    0    0     0          0         0    22787     292    0    0    0     0       0          0
      eth1:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
        lo: 5926805    5601    0    0    0     0          0         0  5926805    5601    0    0    0     0       0          0

    3 容器监控数据存储-InfluxDB

    InfluxDB(链接:https://docs.influxdata.com/influxdb/v1.3/)是一个开源的分布式时序数据库,使用GO语言开发。特别适合用于时序类型数据存储,CAdvisor搜集的容器监控数据用InfluxDB存储就很合适,而且CAdvisor本身就提供了InfluxDB的支持,集成起来非常方便。

    由于线上服务都docker化了,所以InfluxDB我们也是选择用容器来跑,通过容器管理系统统一管理。容器运行时的核心配置如下,主要挂载了数据库目录,以及配置了consul的服务注册,这样,CAdvisor由于和InfluxDB处于同一个overlay子网中,不需要再开放端口给外部访问,CAdvisor直接通过influxdb.service.consul:8086即可连接到InfluxDB。

    为了存储CAdvisor的数据,需要预先创建好数据库并配置用户名密码以及相关权限。InfluxDB提供了一套influx的CLI,跟mysql client很相似。另外,InfluxDB的数据库操作语言InfluxQL跟SQL语法也基本一致。进入InfluxDB容器,运行下面命令创建数据库和用户密码并授权。

    # influx
    Connected to http://localhost:8086 version 1.3.5
    InfluxDB shell version: 1.3.5
    > create database cadvisor  ## 创建数据库cadvisor
    > show databases
    name: databases
    name
    ----
    _internal
    cadvisor
    > CREATE USER testuser WITH PASSWORD 'testpwd' ## 创建用户和设置密码
    > GRANT ALL PRIVILEGES ON cadvisor TO testuser ## 授权数据库给指定用户
    > CREATE RETENTION POLICY "cadvisor_retention" ON "cadvisor" DURATION 30d REPLICATION 1 DEFAULT ## 创建默认的数据保留策略,设置保存时间30天,副本为1

    配置成功后,可以看到CAdvisor会通过InfluxDB的HTTP API自动创建好数据表,并将数据发送到InfluxDB存储起来。

    3.2 InfluxDB重要概念

    influxdb有一些重要概念:database,timestamp,field key, field value, field set,tag key,tag value,tag set,measurement, retention policy ,series,point,下面简要说明一下:

    • database:数据库,如之前创建的数据库 cadvisor。InfluxDB不是CRUD数据库,更像是一个CR-ud数据库,它优先考虑的是增加和读取数据而不是更新删除数据的性能。

    • timestamp:时间戳,因为InfluxDB是时序数据库,它的数据里面都有一列名为time的列,存储记录生成时间。如 rx_bytes 中的 time 列,存储的就是时间戳。

    • fields: 包括field key,field value和field set几个概念。field key是字段名,在rx_bytes表中,字段名为 value。field value是字段值,如 17858781633,1359398等。而field set是字段集合,由field key和field value构成,如rx_bytes中的字段集合如下:

    value = 17858781633
    value
    • tags:包括tag key, tag value, tag set几个概念。tag key是标签名,在rx_bytes表中container_name,game,machine,namespace,type都是标签。tag value就是标签的值了。tag set就是标签集合,由tag key和tag value构成。InfluxDB中标签是可选的,不过标签是有索引的。如果查询中经常用的字段,建议设置为标签而不是字段。标签相当于传统数据库中有索引的列。

    • retention policy: 数据保留策略,cadvisor的保留策略为cadvisor_retention,存储30天,副本为1。一个数据库可以有多个保留策略。

    • measurement:类似传统数据看的表,是字段,标签以及time列的集合。

    • series:共享同一个retention policy,measurement以及tag set的数据集合。

    3.3 InfluxDB的特色功能

    InfluxDB作为时序数据库,相比传统数据库它有很多特色功能,比如独有的一些特色函数和连续查询功能。关于InfluxDB的更多详细内容可以参见官方文档。

    1. 特色函数:有一些聚合类函数如FILL()用于填充数据, INTEGRAL()计算字段所覆盖的曲面面积,SPREAD()计算表中最大与最小值的差值, STDDEV()计算字段标准差,MEAN()计算平均值, MEDIAN()计算中位数,SAMPLE()函数用于随机取样以及DERIVATIVE()计算数据变化比等。

    2. 连续查询:InfluxDB独有的连续查询功能可以定期的缩小取样,就原数据库的数据缩小取样后存储到指定的新的数据库或者新的数据表中,在历史数据统计整理时特别有用。

    4 容器监控数据可视化-Grafana

    通过CAdvisor搜集容器的监控数据,存储到InfluxDB中,接下来就剩数据可视化的问题了。毕竟,一个可视化的图表可以很方便快速的看到容器的一些问题。图表展示我选择的是Grafana。

    Grafana是一个开源的数据监控分析可视化平台,支持多种数据源配置(支持的数据源包括InfluxDB,MySQL,Elasticsearch,OpenTSDB,Graphite等)和丰富的插件及模板功能,支持图表权限控制和报警。

    Grafana同样也是以容器方式运行,容器启动配置如下,主要是挂载了grafana的数据和日志目录,设置了管理员的密码,并开放了8888端口作为grafana的访问端口:

    启动之后就可以在http://IP:8888/页面去配置数据源了,一个示例如下:

    配置完数据源,就可以添加Panel来实现数据可视化了。Grafana的图表功能十分强大,在配置数据查询语句的时候也是十分智能,会对数据源,数据表,数据字段自动提示,而且对InfluxDB的所有函数都有分类可以直接选取配置。需要注意的一点就是在配置字节类数据(比如网卡接收流量 rx_bytes 和 内存使用量 memory_usage)的时候单位要选 data(IEC)这个类别。

    5 总结

    使用CAdvisor+InfluxDB+Grafana构建容器资源监控系统,是可行而且是较为简便的方式。这三个组件全部以容器的方式运行,也符合我们线上服务皆为容器的理念。目前已经全面上线该监控系统,运行正常,数据可视化效果良好。除了用于可视化监控之外,这些数据后续还会用于系统异常检测算法和容器智能调度算法中。

    展开全文
  • DOCKER容器监控

    2019-10-31 09:21:42
    容器监控 docker自有的监控命令 查看各个容器的信息 docker container ls 查看容器进程 docker container top 容器名称 查看各个容器硬件使用情况 docker container stats sysdig实时监控(仅支持原生容器) ...

    容器监控

    在这里插入图片描述

    docker自有的监控命令

    查看各个容器的信息

    docker container ls
    

    查看容器进程

    docker container top 容器名称
    

    查看各个容器硬件使用情况

    docker container stats
    
    sysdig实时监控(仅支持原生容器)

    安装内核包

    yum -y install kernel-devel
    

    复制3.10.0-327.el7.x86_64将/usr/src/kernels/下的内核包修改为如上的名称

    ls /lib/modules/3.10.0-327.el7.x86_64 -l
    

    下载镜像

    docker pull sysdig/sysdig
    

    使用sysdig开启dockers容器

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

    进入监控

    csysdig
    

    FN+F2是选项

    weave scope 图形化界面监控

    下载所需要的资源

    curl -L git.io/scope -o /usr/local/bin/scope
    

    给予权限

    chmod a+x /usr/local/bin/scope
    

    启动服务

    scope launch
    

    访问本机IP端口4040

    本机IP:4040
    
    cAdvisor/Heepster(谷歌)
    缺点是慢,因为他默认找谷歌服务器返回信息,但是国内访问不了Google,只能等到访问谷歌超时后才能看到本地的监控,可以看到运行周期以及峰谷值。

    下载cadvisor镜像

    docker pull google/cadvisor
    

    启动容器

    docker run -v /:/rootfs:ro -v /var/run:/var/run:rw -v /sys:/sys:ro -v /var/lib/docker:/var/lib/docker:ro -v /sys/fs/cgroup:/sys/fs/cgroup:ro -p 8080:8080 --detach=true --name cadisor google/cadvisor:latest
    

    访问本机IP

    本机IP:8080
    

    完活

    展开全文
  • 容器监控实践

    2020-09-22 11:55:52
    本篇是第四部分“架构篇”的第六篇,前面几篇我主要为你介绍了 Docker 核心组件及使用 Plugin 对其进行扩展。...当提到容器监控的时候,其实不只是包含对容器自身的监控,本篇我们分别从以下四个方...

    本篇是第四部分“架构篇”的第六篇,前面几篇我主要为你介绍了 Docker 核心组件及使用 Plugin 对其进行扩展。本篇,我来为你介绍 Docker 的监控实践。

    当我们在生产环境中使用 Docker 时,监控是非常重要的一环,通过监控告警我们可以及时了解到 Docker 及容器的运行状况,以便尽早进行应对。

    当提到容器监控的时候,其实不只是包含对容器自身的监控,本篇我们分别从以下四个方面来聊聊:

    • 主机基础监控
    • Docker Daemon 监控
    • 容器基础监控
    • 容器内应用程序监控

    监控方案的选择

    可选择的监控方案其实有很多,比如老牌的 Nagios 和 Zabbix 之类的,或是新一些的 Falcon 之类的,其他比较常见的监控方案可以在 CNCF 的监控全景图中查看,但我个人比较推荐使用 Prometheus

    稍微写写一点推荐 Prometheus 的理由吧:

    • CNCF 毕业项目,在云原生领域地位显著;
    • 使用 Pull 的模式,比较灵活;
    • prometheus metrics 已经被很多软件/社区接受,也都提供了良好支持;
    • 方便扩展。

    在使用 Prometheus 时,数据源是各类 exporter(或者说是各种暴露出来的 metrics),使用 Prometheus 去抓取这些 mtrics 即可。

    对于 Prometheus 更详细的介绍及其使用,请直接查看其官方文档了解,这不是本篇的重点,暂且跳过。

    作为示例,本篇使用 Docker 启动一个 Prometheus 实例:

    (MoeLove) ➜  mkdir prometheus 
    (MoeLove) ➜  cd prometheus 
    # 为 Prometheus 提供一个配置文件
    (MoeLove) ➜  prometheus cat prometheus.yml 
    global:
      scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
      evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
      # scrape_timeout is set to the global default (10s).
    
    scrape_configs:
      - job_name: 'prometheus'
        static_configs:
        - targets: ['localhost:9090']
    

    将上面的配置文件挂载至 Prometheus 的容器中,方便后续修改,这里为了方便演示直接使用了 host 模式的网络。

    (MoeLove) ➜  prometheus docker run --rm -d -v $PWD/prometheus.yml:/etc/prometheus/prometheus.yml --network host prom/prometheus --config.file=/etc/prometheus/prometheus.yml --storage.tsdb.path=/prometheus --web.console.libraries=/usr/share/prometheus/console_libraries --web.console.templates=/usr/share/prometheus/consoles --web.enable-lifecycle 
    045f200fe47d4ef6508245ee81b01fa62842928a105864b0d46e00ba04b2d319
    (MoeLove) ➜  prometheus docker ps -l
    CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS               NAMES
    045f200fe47d        prom/prometheus     "/bin/prometheus --c…"   About a minute ago   Up 59 seconds                           pedantic_mclean
    

    接下来,我们便可以在浏览器中打开 http://127.0.0.1:9090,看看 Prometheus 当前的状态。

    Prometheus target 的监控图

    主机基础监控

    使用 Prometheus 监控主机/系统的相关指标时,我们通常会使用一个 node_exporter 来完成。如果还需要监控其他硬件或者路由相关的指标,也可以在 Prometheus 的文档中找到其他可用的 exporter

    使用 node_exporter 时,你可以选择直接部署在主机上,也可以选择在容器内运行。例如,在物理机运行:

    (MoeLove) ➜  /tmp wget -q https://github.com/prometheus/node_exporter/releases/download/v0.18.1/node_exporter-0.18.1.linux-amd64.tar.gz
    (MoeLove) ➜  /tmp tar -zxf node_exporter-0.18.1.linux-amd64.tar.gz
    (MoeLove) ➜  /tmp cd node_exporter-0.18.1.linux-amd64
    # 启动 node_exporter
    (MoeLove) ➜  node_exporter-0.18.1.linux-amd64 ./node_exporter --log.level="warn"
    

    打开另一个窗口,使用 curl 可进行验证(node_exporter 默认监听 9100 端口):

    (MoeLove) ➜  node_exporter-0.18.1.linux-amd64 curl  -s 127.0.0.1:9100/metrics |grep node_load5
    # HELP node_load5 5m load average.
    # TYPE node_load5 gauge
    node_load5 1.12
    

    可以看到,通过 curl 可以得到对应的 metrics。我们将其添加至 Prometheus 的监控任务中,为 Prometheus 增加以下配置:

      - job_name: 'node_exporter'
        static_configs:
        - targets: ['localhost:9100']
    

    通过发送以下请求,可以让 Prometheus 重新加载配置:

    curl -X POST http://localhost:9090/-/reload
    

    Prometheus node 的监控图

    Docker Daemon 监控

    经过前面内容的学习,想必你已经发现,Docker 的大多数功能实际是由 Docker Daemon 完成的,所以对 Docker Daemon 的监控是极其关键的。

    Docker Daemon 提供了一个实现性的特性,用于暴露出当前 Docker Daemon 的 metrics。你只需要在启动 Docker Daemon 的时候,同时增加 --experimental--metrics-addr 配置即可。或者是在 /etc/docker/daemon.json 文件中添加以下配置,并重启 Docker Daemon 即可。

    {
      "experimental": true,
      "metrics-addr" : "0.0.0.0:9323"
    }
    

    注意,metrics-addr 中的配置,我这里的示例是监听了 0.0.0.0,你可以选择监听自己的内网 IP 或者全部。

    在 Prometheus 为 Docker Daemon 添加监控任务:

      - job_name: 'docker'
        static_configs:
        - targets: ['localhost:9323']
    

    再次发送请求,让 Prometheus 重新加载配置:

    curl -X POST http://localhost:9090/-/reload
    

    Prometheus docker 容器运行状态

    查询 engine_daemon_container_states_containers 这个指标,它代表当前 Docker Daemon 中容器的状态,可以看到这里有几种不同状态的容器的数量。

    Prometheus docker 的监控图

    至于其他指标及其含义,可直接请求 http://127.0.0.1:9323/metrics,指标名称都比较清晰。

    容器基础监控

    对容器监控时,我推荐你可以直接使用 cAdvisor 来完成。当使用 cAdvisor 时,你可以直接下载二进制进行部署:

    (MoeLove) ➜  /tmp wget -q https://github.com/google/cadvisor/releases/download/v0.34.0/cadvisor
    (MoeLove) ➜  /tmp chmod +x cadvisor
    (MoeLove) ➜  /tmp sudo ./cadvisor
    

    这样就启动 cAdvisor 了,默认它将会监听 8080 端口,同时它也提供了一个 Web UI,你可以直接在浏览器打开 http://127.0.0.1:8080 查看。

    Prometheus cAdvisor

    我们将其与 Prometheus 进行集成,为 Prometheus 添加以下任务,并让 Prometheus 重新加载配置。

      - job_name: 'cadvisor'
        static_configs:
        - targets: ['localhost:8080']
    

    现在在 Prometheus 上便可以看到 cAdvisor 暴露出来的相关 metrics 了。

    如果你是想要使用容器来运行 cAdvisor 的话,在运行之前请先看完 其官方文档,注意需要挂载必要的目录,否则将导致 cAdvisor 不能正常识别待监控的资源。

    容器内应用程序监控

    对于容器内应用程序的监控,除去正常的健康检查(你可以在构建镜像时,通过 HEALTHCHECK 配置)外,更多的是偏向于业务检查的,这部分的监控,我一般建议是采用与未容器化时,原本使用的监控保持一致。

    或者如果是提供 HTTP 服务之类的应用,也可采用 Prometheus 的 blackbox_exporter 来完成。这里不做太多展开了。

    总结

    本篇,我为你介绍了 Docker 容器监控相关的内容,其中重点的内容是对 Docker Daemon 的监控,和对容器资源的监控。

    这里我主要是介绍相应的技术栈,在实际应用时,需要综合考虑已有的基础设施。

    当然在使用 cAdvisor 监控容器资源时,尤其需要注意权限相关的问题,cAdvisor 需要访问 Docker 的数据目录,以及系统的 /sys 及 cgroups 相关的目录,这些内容在之前容器资源管理相关的内容中都已经介绍过了。

    下一篇,我将为你介绍 Docker 日志收集相关的内容。

    展开全文
  • 容器管理与容器监控

    2020-02-13 17:30:22
    本篇文章介绍4个关于容器管理和容器监控的工具,Rancher、influxDB、cAdvisor、Grafana。 Rancher:一个管理容器的工具,可以发布微服务(相当于 docker 的 run 命令,只不过 Rancher 是通过可视化界面来操作),还...
  • Docker容器监控

    2019-12-19 19:28:42
    利用docker compose组合应用并利用scale可以快速对容器进行扩充,而docker compose启动的服务容器都在同一台宿主机上,对于一个宿主...容器监控方案选择 对于容器的监控方案可谓多种多样,除了docker本身自带的 dock...
  • PROMETHEUS容器监控

    2021-02-02 16:49:13
    但是对容器监控显得力不从心。为解决监控容器的问题,引入了prometheus技术。prometheus号称是下一代监控。接下来的文章打算围绕prometheus做一个系列的介绍,顺便帮自己理清知识点。 一、简介  prometheus是由...
  • 一、适用于容器监控-Prometheus 起源 曾几何时,kubernetes 监控体系繁杂,社区也很多方案。现在已经演变成以Prometheus为重要体系的方案。 与kubernetes 同源 kubernetes源自于Borg系统,Prometheus也是同时开发...
  • 目前Docker的使用越来越离不开对容器的监控,阿里云最近...阿里云容器服务在用户创建集群的时候就默认开启了几个容器服务,其中就包括一个容器监控服务,其监控大概就是使用这个服务来采集数据的。 容器监控的对象...
  • 容器管理与容器监控-cAdvisor什么是cAdvisorcAdvisor安装(1)下载镜像(2)创建容器1)-storage_driver_db和-storage_driver_host2)--link(3)浏览访问性能指标含义参照如下地址 什么是cAdvisor Google开源的用于...
  • 容器管理与容器监控-容器管理工具Rancher-微服务容器部署Eureka微服务容器化部署 Eureka微服务容器化部署 (1)在用户应用界面中点击“添加服务” (2)填写名称、描述、镜像和端口映射,点击创建按钮 名称eureka ...
  • 容器监控解决方案对比 容器监控解决方案有很多,有些开源有些商用。本文主要从high-level对比几款容器监控的解决方案,希望能够在选择解决方案时缩小范围。 本文非原创,主要翻译自Comparing 10 Container ...
  • prometheus docker 容器监控 k8s kubernetes 好东西 岗岗的
  • 容器管理与容器监控-influxDB什么是influxDBinfluxDB安装(1)下载镜像(2)创建容器(3)浏览访问influxDB常用操作创建数据库查看数据库创建用户并授权创建用户查看用户用户授权查看采集的数据 什么是influxDB ...
  • 所以今天我就和你分享关于容器监控的知识(原理及工具 cAdvisor)。 虽然传统的物理机和虚拟机监控已经有了比较成熟的监控方案,但是容器的监控面临着更大的挑战,因为容器的行为和本质与传统的虚拟机是不一样的,总...
  • docker 容器监控cAdvisor

    2020-09-01 16:06:55
    docker 容器监控cAdvisor准备工作测试 准备工作 # 拉取cadvisor镜像 docker pull google/cadvisor # 运行 # --detach 是 -d 全拼 # --volume 是 -v 全拼 并且我们这次设置了权限 docker run --volume=/:/rootfd:ro ...
  • 容器管理与容器监控-容器管理工具Rancher-Rancher安装什么是RancherRancher安装(1)下载Rancher 镜像(2)创建Rancher容器(3)浏览器访问(4)切换至中文界面 什么是Rancher ​ Rancher是一个开源的企业级全栈化...
  • 主要介绍了Docker容器监控及日志管理实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 容器监控与排错

    2018-09-25 18:59:58
    容器监控与排错 sysdig 系统发掘工具的集大成者。 常见的系统挖掘工具有: 网络 netstat/tcpdump/iftop/nload/traceroute 跟踪 strace/lsof 容器 docker stat Disk stat/iostat 进程/CPU ps -auxf/pstree/top/htop/...
  • 08 | 容器监控容器监控原理及 cAdvisor 的安装与使用 生产环境中监控容器的运行状况十分重要,通过监控我们可以随时掌握容器的运行状态,做到线上隐患和问题早发现,早解决。所以今天我就和你分享关于容器监控的...
  • 容器监控实践—开篇

    2019-01-07 19:29:49
    随着越来越多的线上服务docker化,对容器的监控、报警变得越来越重要,容器监控有多种形态,有些是开源的(如promethues),而另一些则是商业性质的(如Weave),有些是集成在云厂商一键部署的(Rancher、谷歌云),...
  • 容器管理与容器监控-容器管理工具Rancher-应用部署MySQL部署RabbitMQ部署Redis部署MongoDB部署ElasticSearch部署 MySQL部署 镜像:centos/mysql-57-centos7 增加数据库服务 注意:添加环境变量 MYSQL_ROOT_...
  • 容器监控工具WeaveScope

    2020-02-26 15:00:17
    最近一段时间整了一些docker容器,弄了一些基于...这里就介绍下我最近用的容器监控工具WeaveScope。这个工具不仅可以 有基础性能的数据监控,同时还可以在线cli的操作,除了Docker外,这个工具还可以监控Kubernet...
  • 0x1 容器监控工具介绍 Docker是目前使用最广泛的容器之一,但它并不总是像物理硬件一样可见。而使用docker容器监控工具有助于消除这种透明度的缺失。以下介绍8种最佳Docker容器监控工具。 1.SolarWinds Server&...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,928
精华内容 2,371
关键字:

容器监控