概述

为了解决docker stats的问题(存储、展示),谷歌开源的cadvisor诞生了,cadvisor不仅可以搜集一台机器上所有运行的容器信息,还提供基础查询界面和http接口,方便其他组件如Prometheus进行数据抓取,或者cadvisor + influxdb + grafna搭配使用。

cAdvisor可以对节点机器上的资源及容器进行实时监控和性能数据采集,包括CPU使用情况、内存使用情况、网络吞吐量及文件系统使用情况

Cadvisor使用Go语言开发,利用Linux的cgroups获取容器的资源使用信息,在K8S中集成在Kubelet里作为默认启动项,官方标配。

安装

  • 1.使用二进制部署
下载二进制:https://github.com/google/cadvisor/releases/latest
本地运行:./cadvisor  -port=8080 &>>/var/log/cadvisor.log
  • 2.使用docker部署
docker run \--volume=/:/rootfs:ro \--volume=/var/run:/var/run:rw \--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 \google/cadvisor:latest
注意:在Ret Hat,CentOS, Fedora 等发行版上需要传递如下参数,因为 SELinux 加强了安全策略:--privileged=true启动后访问:http://127.0.0.1:8080查看页面,/metric查看指标

* 常见指标:http://yjph83.iteye.com/blog/2394091
* 指标分析:https://luoji.live/cadvisor/cadvisor-source-code-metrics-20160927.html`
  • 3.kubernetes中使用
* Daemonset部署: https://github.com/google/cadvisor/tree/master/deploy/kubernetes
* kubelet自带cadvisor监控所有节点,可以设置--cadvisor-port=8080指定端口(默认为4194)
* kubernetes 在2015-03-10 这个提交(Run cAdvisor inside the Kubelet. Victor Marmol 2015/3/10 13:39)中cAdvisor开始集成在kubelet中,目前的1.6及以后均存在

注意:

从 v1.7 开始,Kubelet metrics API 不再包含 cadvisor metrics,而是提供了一个独立的 API 接口:* Kubelet metrics: http://127.0.0.1:8001/api/v1/proxy/nodes/<node-name>/metrics* Cadvisor metrics: http://127.0.0.1:8001/api/v1/proxy/nodes/<node-name>/metrics/cadvisorcadvisor 监听的端口将在 v1.12 中删除,建议所有外部工具使用 Kubelet Metrics API 替代。

常用搭配

1.cAdvisor+Heapster+influxdb

Heapster:在k8s集群中获取metrics和事件数据,写入InfluxDB,heapster收集的数据比cadvisor多,却全,而且存储在influxdb的也少。

Heapster将每个Node上的cAdvisor的数据进行汇总,然后导到InfluxDB。Heapster的前提是使用cAdvisor采集每个node上主机和容器资源的使用情况,
再将所有node上的数据进行聚合。这样不仅可以看到Kubernetes集群的资源情况,
还可以分别查看每个node/namespace及每个node/namespace下pod的资源情况。
可以从cluster,node,pod的各个层面提供详细的资源使用情况。
  • InfluxDB:时序数据库,提供数据的存储,存储在指定的目录下。

  • Grafana:提供了WEB控制台,自定义查询指标,从InfluxDB查询数据并展示。

cAdvisor+Prometheus+Grafana

访问http://localhost:8080/metrics,可以拿到cAdvisor暴露给 Prometheus的数据

其他内容参考后续的prometheus文章

深入解析

cAdvisor结构图

cadvisor地址:https://github.com/google/cadvisor

主函数逻辑:(cadvisor/cadvisor.go)

通过new出来的memoryStorage以及sysfs实例,创建一个manager实例,manager的interface中定义了许多用于获取容器和machine信息的函数

核心函数:

生成manager实例的时候,还需要传递两个额外的参数,分别是

  • maxHousekeepingInterval:存在内存的时间,默认60s
  • allowDynamicHousekeeping:是否允许动态配置housekeeping,也就是下一次开始搜集容器信息的时间,默认true
    因为需要暴露服务,所以在handler文件中,将上面生成的containerManager注册进去(cadvisor/http/handler.go),之后就是启动manager,运行其Start方法,开始搜集信息,存储信息的循环操作。

以memory采集为例:

具体的信息还是通过runc/libcontainer获得,libcontainer是对cgroup的封装。在/sys/fs/cgroup/memory中包含大量的了memory相关的信息(参考docker原生监控文章)

Prometheus的收集器(cadvisor/metrics/prometheus.go)


更多源码参考文章:https://luoji.live/categories/cadvisor/

总结

优缺点:

优点:谷歌开源产品,监控指标齐全,部署方便,而且有官方的docker镜像。
缺点:是集成度不高,默认只在本地保存1分钟数据,但可以集成InfluxDB等存储

备注:

爱奇艺参照cadvisor开发的dadvisor,数据写入graphite,
等同于cadvisor+influxdb,但dadvisor并没有开源

容器监控实践—CAdvisor相关推荐

  1. 你必须知道的容器监控 (2) cAdvisor

    # 实验环境:阿里云ECS主机(两台),CentOS 7.4 01 - cAdvisor简介 为了解决容器的监控问题,Google开发了一款容器监控工具cAdvisor(Container Advis ...

  2. 容器监控实践—Heapster

    概述 该项目将被废弃(RETIRED) Heapster是Kubernetes旗下的一个项目,Heapster是一个收集者,并不是采集 1.Heapster可以收集Node节点上的cAdvisor数据 ...

  3. 容器监控之cadvisor介绍

    1.docker stats 对 cadvisor dokcer stats 可以查看运行的 Docker 镜像的运行状态,例如:这种方式比较原始,因为你无法通过 http 的方式来获取数据,而且没有 ...

  4. Docker 容器监控原理及 cAdvisor 的安装与使用

    生产环境中监控容器的运行状况十分重要,通过监控我们可以随时掌握容器的运行状态,做到线上隐患和问题早发现,早解决.所以今天我就和你分享关于容器监控的知识(原理及工具 cAdvisor). 虽然传统的物理 ...

  5. Docker进阶-容器监控cAdvisor+InfluxDB+Granfana

    概述 前面文章介绍使用docker compose组合应用并利用scale快速对容器进行扩容. 由于docker compose启动的服务都在同一台宿主机上,对于一个宿主机上运行多个容器应用时,容器的 ...

  6. cadvisor实现容器监控

    随着docker容器云的广泛应用,大量的业务软件运行在容器中,这使得对docker容器的监控越来越重要,具体监控指标总结如下: 首先是容器本身资源使用情况:cpu,内存,网络,磁盘 然后物理机的资源使 ...

  7. 基于 Prometheus 的边缘计算监控实践

    监控作为边缘计算基础设施的重要组成部分,是边缘稳定性的基本保障.本文主要介绍火山引擎边缘计算的监控实践,分享火山引擎如何进行监控技术选型以及构建监控服务体系.主要内容如下: 边缘计算监控初衷 基于 P ...

  8. 爱奇艺号基于Prometheus的微服务应用监控实践

    前 言 微服务架构是目前各大互联网公司普遍采用的软件架构方式.在微服务架构中,系统被拆分为多个小的.相互独立的服务,这些服务运行在自己的进程中,可以独立的开发和部署.在业务快速变化时,微服务单一职责. ...

  9. 日均请求量百亿级数据处理平台的容器云实践

    from: http://geek.csdn.net/news/detail/97887 声明:本文为CSDN原创投稿文章,未经许可,禁止任何形式的转载.  作者:袁晓沛,目前在七牛云的主要工作是基于 ...

  10. 第 10 章 容器监控 - 085 - 如何快速部署 Prometheus?

    快速搭建 Prometheus 监控系统 环境说明 通过 Prometheus 监控两台 Docker Host:10.12.31.22 和 10.12.31.23,监控 host 和容器两个层次的数 ...

最新文章

  1. 锐捷2126G部分基础配置(升级系统固件、telnet、vlan)
  2. IT规划宜分步走 忌盲目好大喜功(载)
  3. 红帽论坛北京站召开 设立亚太开放创新实验室
  4. Qt5.9使用QWebEngineView加载网页速度非常慢,问题解决
  5. 【原】相煎何太急——input的blur事件与button的click事件
  6. MATLAB离散傅里叶变换实验结果分析,Matlab离散傅里叶变换实验报告
  7. 连接服务器框架协议,想要实现:设备通过tcp连接服务器,框架用的是worker或者gateway...
  8. android获取电池是否充电,Android 判断电池是否为充电状态的方法
  9. [C++11] enable_shared_from_this
  10. 防火墙放开oracle远程,oracleMTS模式下防火墙如何开通
  11. ISIS协议(华为面试)
  12. 807. 区间求和(acwing水题记)
  13. html 给表格添加背景,HTML中新建表格怎么加背景
  14. 计算机硕士伊利诺伊大学排名,伊利诺伊香槟计算机工程专业研究生排名
  15. Excel技巧 - 办公提效
  16. 微信浏览器、手机版浏览器、pc版浏览器网站的缓存怎么清理? 比较好的三点解决方案
  17. Java 8新特性探究(四)深入解析日期和时间-JSR310
  18. Python 在 excel 中画 饼状图 折线图
  19. lua attempt to index field ? a nil
  20. mysql8.0.20安装教程mac_mac安装mysql 8.0.20

热门文章

  1. 中学计算机基础授课ppt,高中信息技术说课课件.ppt
  2. 在图书馆使用计算机管理属于,图书馆计算机使用管理规定
  3. Minecraft在安卓手机上搭建java服务器
  4. java合并2个txt文本,Java实现多个文档合并输出到一个文档
  5. 无损音乐播放器,有软件与硬件之分
  6. 宾馆客房管理系统——前后端分离
  7. 宾馆酒店客房管理系统java源码
  8. 游戏中MD5加密的一些作用
  9. js中进行字符串替换的方法
  10. 怎么看python帮助手册常见问题商家认证_问题:使用help命令可以查看python模块的帮助文档。...