使用cAdvisor进行Docker容器监控的彻底解释

5dbbec94968400786f78e48f_Untitled (1).png

为什么需要监视Docker容器?

通過監視,開發團隊能夠收集與軟件狀態相關的重要信息,從而找到改進產品的方法。由於每個容器都是自包含的系統,因此監視變得更加不可或缺。

监视容器包括记录每个容器的使用情况的测量值,并向监控系统报告。通过这种方式,可以确保检测错误和改善应用程序,以提高综合性能和稳定性。

使用cAdvisor来监控容器的方法。

cAdvisor(容器指导员)是由Google提供和管理的开源容器监控工具。它原生支持Docker容器和几乎所有其他容器。cAdvisor由单个容器守护进程组成,收集有关运行中容器的信息,处理数据然后导出。该信息可以发送到专用的Web界面,或者第三方应用程序,如Big Query、ElasticSearch、InfluxDB、Kafka、Prometheus、Redis、StatsD。您还可以通过设置-storage_driver标志为stdout来将数据写入标准输出。

cAdvisor会记录整个机器上每个容器的资源使用历史、资源分离参数和网络统计。

马上开始:运行cAdvisor。

由于cAdvisor本身是一个单一的Docker镜像,因此设置和运行cAdvisor非常简单。因此,您可以使用docker run命令启动和运行它。通过在终端上运行以下命令,您可以运行cAdvisor并监视本地机器上的容器。

以本地的中文進行重述,只需要一個選項:
以sudo docker run命令启动

–volume=/(卷):/rootfs:只读 \

–volume=/var/run:/var/run:ro 的含义是将主机的/var/run目录挂载到容器的/var/run目录,并设置为只读。

–volume=/sys:/sys:ro
–卷=/系统:/系统:只读

– 使用中文将以下内容重新表达,只需要一种选项:
— volume=/var/lib/docker/:/var/lib/docker:ro

– –卷=/var/lib/docker/:/var/lib/docker:ro

– –volume=/dev/disk/:/dev/disk:ro -> –挂载点=/dev/disk/:/dev/disk:ro

发布=8080:8080 \

–分离=true

— 名称为cadvisor。

谷歌/容器监视器:最新版本

非常简单!cAdvisor已在后台开始运行。它会连接到正在本地运行的Docker守护程序,并收集容器使用情况的指标,并在http://localhost:8080/上显示一个Web用户界面,可以访问。在用户界面中,您可以查看容器的实时使用情况指标,例如CPU和内存的使用情况,以及所有运行中进程的详细概述。

5dbbe7bd9684002f9e78bced_EGKb3J3tAaZB1nLeV3kpjVe332VmAxSZbufzvsMqftXcUp5LHLXu4ACw4oBokn1zdMNzUqSvegl59fEJyTMTba7AiP_8V5AV2d758mppbyTze8h3luTLBIJIOSEDAXHYarCobl35.png

<注解>

如果Docker守护进程启用了用户命名空间,则需要添加-userns=host选项,以便cAdvisor可以监视Docker容器。否则,cAdvisor将无法连接到Docker守护进程。

如果在CentOS、Fedora或RHEL之一上运行,可能需要将容器以–privileged=true和–volume=/cgroup:/cgroup:ro的方式运行,以便cAdvisor可以访问和监视Docker容器。这是因为在访问容器方面,RHEL和CentOS会更加复杂。由于cAdvisor需要通过套接字访问Docker守护进程,因此需要设置-privileged=true。此外,由于某些版本的RHEL和CentOS将cgroup层次结构挂载到/cgroup目录下,因此运行cAdvisor还需要额外的Docker选项-volume=/cgroup:/cgroup:ro。

使用cAdvisor来收集应用程序的度量数据。

除了容器使用情况度量标准之外,cAdvisor还可以收集应用程序度量标准,比如活动连接数、读取连接数以及应用程序是否分配了适当的CPU和内存等。(请注意,编写此文本时,cAdvisor对应用程序度量标准的支持处于开发阶段,请注意。)容器可以通过状态页面或用于统计目的的其他API来公开应用程序度量标准。cAdvisor提供了以通用方式收集这些度量标准的方法。

要使 cAdvisor 能够收集应用程序的度量指标,需要完成以下两个步骤。

    • 設定ファイルを作成すること

 

    その設定ファイルをcAdvisorに渡すこと

创建配置文件

在应用程序度量配置文件中,需要指定cAdvisor搜索应用程序指标的位置,并指定其他参数以将指标从cAdvisor导出到用户界面和后端。指标配置包括以下内容。

端点(收集指标的位置)
类型(测量表、计数器等)
指标的名称
数据类型(浮点数、整数)
轮询频率
单位(秒、kbps、计数)
正则表达式(指定收集指标以及它们的解析和处理方法的正则表达式)

以下是一个一般度量收集器未考虑结构化信息的例子。

{

"endpoint" : "http://localhost:8000/nginx_status",

  "metrics_config" : [

    {

      "name" : "activeConnections",

      "metric_type" : "gauge",

      "units" : "number of active connections",

      "data_type" : "int",

      "polling_frequency" : 10,

      "regex" : "Active connections: ([0-9]+)"

    },

    {

      "name" : "reading",

      "metric_type" : "gauge",

      "units" : "number of reading connections",

      "data_type" : "int",

      "polling_frequency" : 10,

      "regex" : "Reading: ([0-9]+) .*"

    }

  ]

}

举例来说,如果要将结构化指标导出到Prometheus中,您只需将配置文件缩小到仅包含端点(其他信息可从配置文件中获取)。以下是一个示例的Prometheus配置,用于从端点收集所有指标。

{

 "endpoint" : "http://localhost:9100/metrics"

}

Here’s another sample configuration that collects only selected metrics:

{

  "endpoint" : "http://localhost:8000/metrics",

  "metrics_config" : [

    "scheduler_binding_latency",

    "scheduler_e2e_scheduling_latency",

    "scheduling_algorithm_latency"

  ]

}

将配置文件传递给cAdvisor。

cAdvisor使用Docker容器的标签来获取每个Docker容器的配置。以io.cadvisor.metric开头的标签将被解析为cAdvisor应用程序指标标签。cAdvisor将该标签的值用作配置找到位置的指示器。例如,以io.cadvisor.metric.prometheus-xyz的形式的标签表示配置指向Prometheus指标端点。

設定文件可以成为容器镜像的一部分,也可以在后期(运行时)通过使用卷进行添加。这样可以确保容器与托管宿主机和应用程序的度量配置之间没有连接。容器的度量信息是自包含的,因此Redis的配置示例如下所示。

Dockerfile(或运行时):
从 redis 开始
将 redis_config.json 添加至 /var/cadvisor/redis_config.json
标签 io.cadvisor.metric.redis=”/var/cadvisor/redis_config.json”

这里,redis_config.json是一个包含上述JSON配置的设置文件。接下来,cAdvisor在运行时会访问容器镜像,并处理配置文件,开始收集和公开应用程序的指标。

作为需要了解的事情,cAdvisor特别检查容器标签并提取此信息。在Docker 1.8中,容器不会从镜像继承标签,因此需要在运行时指定标签。

直接访问特定应用程序的指标API

您可以使用以下端点来访问特定容器应用程序的指标:http:// localhost:8080 / api / v2.0 / appmetrics / containerName

可以从容器规格中检测到一系列被收集的应用程序度量。http:// localhost:8080 / api / v2.0 / spec / containerName

通常的统计API中还包含了应用程序指标。http:// localhost:8080 / api / v2.0 / stats / containerName。

注释:应用程序度量指标位于容器页面之后的资源度量指标。

然而,cAdvisor有一些限制。它无法向用户发送警报并提供重要信息。例如,如果测量的某个指标达到关键水平,cAdvisor不会通知用户。在使用时请考虑这一点。

无论如何,cAdvisor仍然是一个卓越的容器监控工具,拥有非常简单的设置和无缝对接的Docker支持。如果需要集成报警机制,您可以选择各种选项,如Prometheus或StatsD。下面是一个Prometheus的简单示例介绍。

使用 Prometheus 对 cAdvisor 进行度量监控和导出。

cAdvisor能够立即将容器的统计数据发布到Prometheus。默认情况下,这些度量指标是通过/metrics HTTP端点提供的。您可以通过将-prometheus_endpoint命令行标志设置为所需的值来自定义此端点。

要在Prometheus中监视cAdvisor,您需要在其指标端点上配置一个或多个任务来从相关的cAdvisor进程中抓取数据。

然而,首先需要构建Prometheus,这可以通过使用prometheus.yml文件来完成。创建prometheus.yml文件,并将以下代码粘贴到其中(代码可以在GitHub页面找到)。

global:
  scrape_interval: 5s
  evaluation_interval: 5s
  scrape_timeout: 10s
rule_files:  
- '/etc/prometeus/alert.rules'  
alerting:
  alertmanagers:
  - static_configs:
    - targets:
    # whatever you want
scrape_configs:
  - job_name: 'prometheus'
    static_configs:
    - targets: ['prometheus:9090']
      labels:
        alias: 'prometheus'
  - job_name: 'cadvisor'
    static_configs:
    - targets: ['cadvisor:8080']
      labels:
        alias: 'cadvisor'

以下是对全局变量的解释:

scrape_interval:指定指标被抓取的频率(默认为1分钟)
scrape_timeout:抓取请求的超时时间(默认为10秒)
rule_files:规则文件的路径,指定当发生警报时如何处理警报的警告规则文件
Evaluation_interval:规则评估的频率(默认为1分钟)

在创建了prometheus.yml文件的相同文件夹中,创建docker-compose.yml文件并在其中添加Docker Compose配置。

version: '3.2'
services:
  prometheus:
    image: 'prom/prometheus:latest'
    container_name: prometheus
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
    commands:
      - '--config.file=/etc/prometheus/prometheus.yml'
    ports:
      - '9090:9090'
  cadvisor:
    image: 'google/cadvisor:latest'
    container_name: cadvisor
    volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:ro
      - /sys:/sys:ro
      - /var/lib/docker/:/var/lib/docker:ro
      - /dev/disk:/dev/disk/:ro
    ports:
    - '8080:8080'

接下来,我们需要创建一个名为 alert.rules 的文件,用于指定特定警报的处理方法。以下是一个简单的 alert.rules 文件示例,你可以在 GitHub 页面上找到它。

ALERT containerAlert
    IF absent(((time() - container_last_seen{name="your-container-name"}) < 5)) FOR 5s
    LABELS { severity="page" }
    ANNOTATIONS {
        SUMMARY = "Instance {{$labels.instance}} down",
        DESCRIPTION = "Instance= {{$labels.instance}}, Service/Job ={{$labels.job}} is down for more than 2 sec."
    }

当特定容器(“容器名称”)停止并且不存在超过5秒时,将触发此警报。 Prometheus警报将使用Prometheus Alert Manager进行处理。 Prometheus Alert Manager非常灵活,可以将警报即时连接到选择的应用程序,例如电子邮件或Slack工作区。要进行设置,请查看警报管理器的配置文档。

然后,实际上您已经拥有它!您可以使用cAdvisor来正确监控Docker容器,并检查其使用情况和主机指标,并在满足指定条件时接收警报。

如果您想要亲自尝试,请注册Hosted Prometheus by MetricFire的免费试用。或者您也可以预约演示,我们可以讨论最适合的监控工具。

那么,我们下一篇文章再见面吧!

bannerAds