Prometheus监控实战之Docker容器监控

这篇具有很好参考价值的文章主要介绍了Prometheus监控实战之Docker容器监控。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 概述

容器的使用已经非常普及,将服务迁移到容器上正成为了越来越多公司的选择。而对于运维人员而言,熟悉容器的使用与监控,也已成为一项必不可少的专业技能。

关于容器的开源产品,目前知名的有Docker、Containerd、CoreOS rkt、LXC 等,在这其中Docker占据了绝对的统治地位,也是当前使用最广泛的容器产品。以下是docker应用常用的两种监控方式:

  • Docker原生监控常用的方式有:docker ps/top/logs、docker stats、Docker Remote API、Docker伪文件系统。
  • 但是原生的dockr命令监控的方式存在一点的局限性,针对这个问题,Google开源的容器度量收集工具cAdvisor可实现对容器的监控。

2 原生监控

2.1 docker stats

  • 该命令默认以流式方式输出,如果想打印出最新的数据并立即退出,可以使用no-stream=true参数。可以指定一个已停止的容器,但是停止的容器不返回任何数据。
  • 监控容器性能度量指标有多种方法,简单的如通过Docker的CPU、内存、网络及磁盘的使用情况进行监测,示例如下:
#  docker stats
CONTAINER ID    NAME         CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS
db9ee91008fc    cadvisor     1.95%               100.3MiB / 1.777GiB   5.51%               3.06MB / 718MB      229kB / 0B          13

2.2 伪文件系统

  • docker stats的数据来自/sys/fs/cgroup下的文件:
    • mem usage那一列的值,来自于/sys/fs/cgroup/memory/docker/[containerId]/memory.usage_in_bytes。
    • 如果没限制内存,Limit=machine_mem,否则来自于/sys/fs/cgroup/memory/docker/[id]/memory.limit_in_bytes。
    • 内存使用率=memory.usage_in_bytes/memory.limit_in_bytes。
  • 一般情况下,cgroup文件夹下的内容包括CPU、内存、磁盘、网络等信息,下面列出常用的指标说明。
    • devices:设备权限控制。
    • cpuset:分配指定的CPU和内存节点。
    • cpu:控制CPU占用率。
    • cpuacct:统计CPU使用情况。
    • memory:限制内存的使用上限。
    • freezer:冻结(暂停)cgroup中的进程。
    • net_cls:配合tc(traffic controller)限制网络带宽。
    • net_prio:设置进程的网络流量优先级。
    • huge_tlb:限制HugeTLB的使用。
    • perf_event:允许Perf工具基于cgroup分组做性能监测。
  • 在memory中常用的指标说明如下:
    • memory.usage_in_bytes:已使用的内存量(包含cache和buffer),相当于used_mem。
    • memory.limit_in_bytes:限制的内存总量(字节),相当于Linux的total_mem。
    • memory.failcnt:申请内存失败次数计数。
    • memory.memsw.usage_in_bytes:已使用的内存和swap容量(字节)。
    • memory.memsw.limit_in_bytes:限制的内存和swap容量(字节)。
    • memory.memsw.failcnt:申请内存和swap失效次数计数。
    • memory.stat:内存相关状态。
  • 随着Docker容器云的广泛应用,大量的业务软件运行在容器中,这使得对Docker容器的监控越来越重要。对容器集群系统进行监控,一般采用物理机监控+容器本身监控的方式(如图10-2所示),具体监控指标总结如下:
    • 容器本身资源使用情况:CPU、内存、网络、磁盘。
    • 物理机的资源使用情况:CPU、内存、网络、磁盘。
    • 物理机上容器镜像情况:名字、大小、版本。
  • 目前较为流行的容器监控工具有DockerStats、cAdvisor、Scout、Data Dog以及Sensu。应用场景不同,各监控工具的优缺点体现得也有所不同。
    • DockerStats是Docker本身提供的,用于监控容器资源使用情况,直接输入命令行即可查看,还可提供远程API接口,易于操作,但没有图形界面。
    • cAdvisor可提供数据的可视化界面,并且可监控容器所在宿主机中的资源使用情况,只监控单一主机。
    • Scout可聚合多主机容器的监控,并且提供告警,但无法显示容器的详细信息,更多的是偏向于主机资源的监控,为收费项目。
    • Data Dog监控功能较为强大,可以获得运行和停止的容器计数以及镜像数量等,可整合集群主机数据和容器数据,但使用成本较高。
    • Sensu监控部署较为复杂。

3 cAdvisor

3.1 cAdvisor概述

  • 在容器集群的环境中,通过Docker stats命令对一台台机器收集容器的度量指标显然是不现实的。在Kubenetes(有时简称k8s)设计之初就考虑到了这一点,因此它将Google开源的容器度量收集工具cAdvisor集成到了Kubelet中。在集群中,Kubelet会驻留在集群的每一个节点上,因此cAdvisor也将随之运行在所有节点上。
  • cAdvisor为容器用户提供了对其运行容器的资源使用和性能特征的理解。它是一个运行守护程序,用于收集、聚合、处理和导出有关正在运行的容器的信息,同时它消耗的资源也比较少。cAdvisor不仅可以搜集一台机器上所有运行的容器的信息,还提供基础查询界面和http接口,方便其他组件(如Prometheus)进行数据抓取,或者cAdvisor+Influxdb+Grafna搭配使用。可以导出资源使用情况和完整历史资源使用的直方图,通过快速预览压力表(pressuregauge)可了解集群是否需要额外的资源。
  • cAdvisor可以对节点机器上的资源及容器进行实时监控和性能数据采集,包括CPU使用情况、内存使用情况、网络吞吐量及文件系统使用情况。
  • cAdvisor也有一定的局限性,即只能监控一个Docker主机。对于多节点的场景,就需要在所有的主机上都各安装一个cAdvisor。另外,在图表中的数据仅仅显示时长为2分钟,并没有查看长期数据趋势的方法。它也没有生成告警的机制,如果资源使用率较高则可能存在风险。

3.2 cAdvisor架构

  • 只需在宿主机上部署cAdvisor容器,用户就可通过Web界面或REST服务访问当前节点和容器的详尽性能数据(CPU、内存、网络、磁盘、文件系统等)。
  • cAdvisor支持一下指标:
    • 容器基础指标。
    • 容器内进程查看。
    • 容器状态实践。
    • 监控数据push到第三方存储介质。
    • 通过Prometheus采集自定义指标。
    • 通过容器标签采集应用自定义指标。
    • Collector可扩展开发其他标准类型,如数据库、Kafka、Redis等,当前只支持http方式采集应用自定义指标。
    • Storage可扩展开发其他介质。
  • cAdvisor软件架构如图10-3所示。

Prometheus监控实战之Docker容器监控

  • cAdvisor主要包括API层、Handler、Manager、Collector,具体说明如下:
    • API层:提供节点信息、容器运行状态信息、自定义指标信息、容器spec信息、事件信息、容器进程列表、文件系统信息的查询API。
    • Handler:提供rkt、Docker的容器spec以及Storage栈信息。内置有rkt、Docker的适配器被Manager调用。
    • Manager:总控,实例化Storage,为周期任务,通过Handler获取容器列表,自动发现容器的增/删等。
    • Collector:内置两种采集器,即Prometheus和自定义指标采集器。

3.3 部署cAdvisor

//下载镜像
docker pull google/cadvisor:latest
 
//运行容器
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
  • cAdvisor提供一些运行时参数供用户配置使用:
    • 4个--volume挂载操作不能省略,如果不挂载,将无法连接到Docker deamon,ro表示只读。
    • --detach操作是为了在创建后不进入容器内部,让其自动完成监视功能。
    • 在Ret Hat/CentOS/Fedora等发行版上需要传递privileged参数,因为SELinux加强了安全策略:--privileged=true。
    • --storage_duration保存在内存中的数据时间段长度,默认为2min,即保存2分钟的数据。
    • --allow_dynamic_housekeeping依据容器的活跃程度,动态调整读取容器监控数据的时间间隔。
    • --global_housekeeping_interval检测是否有新增容器的时间周期。
    • --housekeeping_interval统计每个容器数据的时间周期,默认每秒取1次数据,取统计到的最近的60个数据。
  • 启动后cAdvisor立即开始监控,可以浏览主机上的端口8080查看cAdvisor的Web接口,确认它是可操作的。可以访问/metric页面查看监控指标。
    • http://10.1.1.13:8080/containers/
    • http://10.1.1.13:8080/metrics
  • cAdvisor支持的Prometheus的指标主要有五大类(62个),包括CPU(10个)、内存(9个)、文件(18个)、网络(12个)、其他容器状态(13个),具体指标说明可以参考:https://github.com/google/cadvisor/blob/master/docs/storage/prometheus.md。
  • cAdvisor通过存储插件(cAdvisor Storage Plugins)把状态信息输出到InfluxDB数据库进行存储、读取或KAfka等,通过-storage_driver来配置,具体支持的存储项有:BigQuery、ElasticSearch、InfluxDB、Kafka、Prometheus、Redis、StatsD以及stdout标准输出等。详见官网文档:https://github.com/google/cadvisor/tree/master/docs/storage。

3.4 集成到Prometheus

  • cAdvisor采集的监控数据通过http://localhost:8080/metrics展现给Prometheus。
  • 修改/etc/prometheus/prometheus.yml,将cAdvisor添加到监控数据采集任务目标当中:
global:

  scrape_interval: 15s

  evaluation_interval: 15s

scrape_configs:

- job_name: 'cadvisor'

  static_configs:

  - targets: ['cadvisor:8080']
  • PromQL表达式示例:

1

2

3

4

5

6

7

8

9

10

11

12

//当正常采集到cAdvisor的样本数据后,可以通过以下表达式计算容器的CPU使用率

sum(irate(container_cpu_usage_seconds_total{image!=""}[1m])) without(cpu)

//使用类似的方法还可以查询容器内存使用量(单位为字节)

container_memory_usage_bytes{image!=""}

//查询容器网络接收量速率(单位为字节/秒)

sum(rate(container_network_receive_bytes_total{image!=""}[1m])) without(interface)

//查询容器网络传输量速率(单位为字节/秒)

sum(rate(container_network_transmit_bytes_total{image!=""}[1m])) without(interface)

//查询容器文件系统读取速率(单位为字节/秒)

sum(rate(container_fs_reads_bytes_total{image!=""}[1m])) without(device)

//查询容器文件系统写入速率(单位为字节/秒)

sum(rate(container_fs_writes_bytes_total{image!=""}[1m])) without(device)

4 容器指标

4.1 CPU指标

  • container_cpu_load_average_10s       #最近10秒容器的CPU平均负载情况
  • container_cpu_usage_seconds_total    #容器的CPU累积占用时间

4.2 内存指标

  • container_memory_max_usage_bytes     #容器的最大内存使用量(单位:字节)
  • container_memory_usage_bytes        #容器的当前内存使用量(单位:字节)
  • container_spec_memory_limit_bytes    #容器的可使用最大内存数量(单位:字节)

4.3 网络指标

  • container_network_receive_bytes_total   #容器网络累积接收字节数据总量(单位:字节)
  • container_network_transmit_bytes_total  #容器网络累积传输数据总量(单位:字节)

4.4 存储指标文章来源地址https://www.toymoban.com/news/detail-456914.html

  • container_fs_usage_bytes    #容器中的文件系统存储使用量(单位:字节)
  • container_fs_limit_bytes    #容器中的文件系统存储总量(单位:字节)

到了这里,关于Prometheus监控实战之Docker容器监控的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • docker容器监控:Cadvisor +Prometheus+Grafana的安装部署

    目录 Cadvisor +Prometheus+Grafana的安装部署 一、安装docker: 1、安装docker-ce 2、阿里云镜像加速器 3、下载组件镜像 4、创建自定义网络 二、部署Cadvisor 1、被监控主机上部署Cadvisor容器 2、访问cAdvisor页面 三、安装prometheus 1、部署Prometheus  2、先准备配置 3、访问prometheus页面 四、部

    2024年02月14日
    浏览(33)
  • 构建Docker容器监控系统(Cadvisor +Prometheus+Grafana)

            Cadvisor是Google开源的一款用于展示和分析容器运行状态的可视化工具。通过在主机上运行Cadvisor用户可以轻松的获取到当前主机上容器的运行统计信息,并以图表的形式向用户展示。 阿里云镜像加速器 阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台 欢

    2024年02月14日
    浏览(40)
  • 构建Docker容器监控系统(2)(Cadvisor +Prometheus+Grafana)

    Cadvisor产品简介 Cadvisor是Google开源的一款用于展示和分析容器运行状态的可视化工具。通过在主机上运行Cadvisor用户可以轻松的获取到当前主机上容器的运行统计信息,并以图表的形式向用户展示。 被监控主机上部署Cadvisor容器 清空原来的 [root@agent ~]# docker rm -f $(docker ps -aq)

    2024年02月14日
    浏览(35)
  • Ubantu docker学习笔记(九)容器监控 自带的监控+sysdig+scope+cAdvisor+prometheus

    监控,这一个词对于我们开发人员已经习以为常,我们通过对于内存、IO、CPU等性能的监控去判断当前运行状态的情况,容器作为一个已经打包好的虚拟环境亦是如此,特别是多个容器运行,需要收集docker各容器的运行状态和运行信息,本章将进行容器监控,第三方容器监控

    2024年02月06日
    浏览(42)
  • 【监控】Prometheus(普罗米修斯)监控概述

    监控系统在这里特指对数据中心的监控,主要针对数据中心内的硬件和软件进行监控和告警。企业的 IT 架构逐步从传统的物理服务器,迁移到以虚拟机为主导的 IaaS 云。无论基础架构如何调整,都离不开监控系统的支持。 不仅如此。越来越复杂的数据中心环境对监控系统提

    2024年02月07日
    浏览(29)
  • 云原生系列之使用prometheus监控redis集群实战

    本次实战使用prometheus监控redis集群,如果你只想监控redis的某一个单机服务,可以参考: 超级实用,解密云原生监控技术,使用prometheus轻松搞定redis监控 本文中的是prometheus已经安装好,如果你还未安装,可以参考上一篇文章:prometheus安装及使用入门 若你想监控其他服务可以

    2023年04月14日
    浏览(30)
  • Prometheus详解(十)——Prometheus容器监控

    今天继续给大家介绍Linux运维相关知识,本文主要内容是Prometheus容器监控。 我们有时需要使用Prometheus监控Kubernetes集群中的容器,包括容器的内存、CPU、网络I/O等资源。在Kubernetes中,有内置的cAdvisor组件,用于Prometheus的容器监控设置。 接下来,我们就开始Prometheus利用cAdvis

    2024年02月06日
    浏览(48)
  • Prometheus监控Tongweb容器

    JMX Exporter 主要是利用 Java 的 JMX 机制来读取 JVM 运行时的一些数据,然后转化为 Prometheus 可读取的 metrics 格式的数据。 JMX Exporter 有两种用法: 启动独立进程。通过 RMI 读取 JVM 数据,但是单独进程监控也存在问题。 JVM 进程内启动( agent )。 JVM 启动时指定参数,以 javaagent 形式

    2024年02月15日
    浏览(46)
  • Prometheus 监控容器

    Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux/Windows/Mac机器上。容器镜像正成为一个新的标准化软件交付方式。 例如,可以通过以下命令快速在本地启动一个Nginx服务: 为了能够获取到Docker容器

    2024年01月20日
    浏览(28)
  • Prometheus服务器、Prometheus被监控端、Grafana、监控MySQL数据库、自动发现概述、配置自动发现、Alertmanager

    目录 Prometheus概述 部署Prometheus服务器 环境说明: 配置时间 安装Prometheus服务器 添加被监控端 部署通用的监控exporter Grafana 概述 部署Grafana 展示node1的监控信息 监控MySQL数据库 配置MySQL 配置mysql exporter 配置mysql exporter 配置prometheus监控mysql 自动发现机制 概述 基于文件自动发现

    2024年02月21日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包