写点什么

Prometheus Exporter (三)容器信息监控

作者:耳东@Erdong
  • 2021 年 11 月 19 日
  • 本文字数:2426 字

    阅读完需:约 8 分钟

本文已经收录在 Prometheus 合集 Prometheus 都可以采集那些指标?-- 常用 Exporter 合集 中。


容器已经发展了很久,最开始的时候还争论容器监控使用什么方式,现在基本已经形成了事实标准,容器监控使用 Google 出品的 cAdvisor 。


cAdvisor 的官方地址是 https://github.com/google/cadvisor , cAdvisor 是 Container Advisor 的缩写。


cAdvisor 为容器用户提供了对其运行容器的资源使用情况和性能特征的指标。它是一个正在运行的守护进程,收集、聚合、处理和导出有关正在运行的容器的信息。具体来说,对于每个容器,它保持资源隔离参数、历史资源使用情况、完整的历史资源使用情况直方图和网络统计信息。这些数据会从容器角度和机器角度导出 。


cAdvisor 有对 Docker 容器的原生支持,并且应该支持任何其他容器类型的开箱即用。cAdvisor 的容器抽象是基于 lmctfy 的,所以容器本质上是分层嵌套的。

安装

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 \  gcr.io/cadvisor/cadvisor:v0.38.0
复制代码


cAdvisor 现在正在 http://localhost:8080 上运行(在后台)。这个设置包括了 cAdvisor 需要观察的 Docker 状态目录


cAdvisor 也可以在容器之外以二进制的方式运行。


关于 cAdvisor 如何在 CentOS/RHEL/Fedora 或者 Debian 系的操作系统上运行起来,可以参考 https://github.com/google/cadvisor/blob/master/docs/running.md 。文章除了解决在这两大类系统上如何运行,还包括 如何监控硬件加速器,比如 GPU 或者 NVML 。


对于 cAdvisor 在 Debian 系统上无法获取内存数据,请参考这个 Issues https://github.com/google/cadvisor/issues/432


关于 cAdvisor 的启动参数可以参考 https://github.com/google/cadvisor/blob/master/docs/runtime_options.md ,详细讲解了各种启动参数。


对于 Kubernetes 用户,cAdvisor 可以作为 Daemonset 类型去运行。如何部署 可以参考 https://github.com/google/cadvisor/tree/master/deploy/kubernetes

Web UI

cAdvisor 是有一个独立的 Web UI 界面的,这一点和其他的 Exporter 有很大的不同。或者说 Google 并不是为 Prometheus 写了一个导出容器监控数据的 Exporter ,cAdvisor 是可以脱离 Prometheus 单独使用的 ,所以它有独立的 UI 界面。


cAdvisor 提供的 UI 地址是 http://<hostname>:<port>/


这个 UI 在 /containers 上有一个主要资源,它导出关于机器上所有容器的实时信息。


cAdvisor Web UI 支持身份认证,支持 HTTP basic 和 HTTP Digest 。

HTTP basic 身份认证

要启用 HTTP basic 身份认证需要添加一个 http_auth_file 参数来打开这个功能,并且指定 账号密码的存储文件,。默认情况下,认证域设置为 localhost。


./cadvisor --http_auth_file test.htpasswd --http_auth_realm localhost
复制代码


test.htpasswd 文件的内容如下:


admin:$apr1$WVO0Bsre$VrmWGDbcBV1fdAkvgQwdk0
复制代码


这段内容的意思是 账号是 admin ,密码是 paasword1 ,密码是经过处理的。

HTTP Digest 身份认证

要启用 HTTP Digest 身份认证需要添加一个 http_digest_file 参数来打开这个功能,并且指定 账号密码的存储文件,。默认情况下,认证域设置为 localhost。


./cadvisor --http_digest_file test.htdigest --http_digest_realm localhost
复制代码


test.htdigest 文件的内容如下:


admin:localhost:70f2631dded4ce5ad0ebbea5faa6ad6e
复制代码


这段内容的意思是 账号是 admin ,密码是 paasword1 ,密码是经过处理的。


这两种身份验证可以使用任何一种,但是如果在参数中同时使用两个文件,则只启用 HTTP basic 身份验证。

数据导出

上边说道 cAdvisor 和其他的 Prometheus Exporter 不太一样,其他的 Exporter 只能将数据导出到 Prometheus ,而 cAdvisor 不是只能将数据导出到 Prometheus 。


根据 Google 的文档,cAdvisor 可以将采集到的 数据导出到 BigQuery 、ElasticSearch 、InfluxDB、Kafka 、Prometheus、Redis、StatsD、stdout(标准输出) 。


cAdvisor 支持将统计数据导出到各种存储插件,启用存储插件需要使用 -storage_driver 参数。


我们主要来看 cAdvisor 如何将数据存储到 Prometheus ,其他存储没有用过,有需要的可以参考 https://github.com/google/cadvisor/blob/master/docs/storage/README.md


cAdvisor 将容器和硬件统计信息公开为 Prometheus Metric 的标准格式。默认情况下,这些指标在 /metrics 的 HTTP 接口下提供。这个接口可以通过设置 -prometheus_endpoint-disable_metrics-enable_metrics 这些参数来自定义。


Prometheus 在启动以后配置 Job 来获取对应的 cAdvisor 指标就可以。


通过 cAdvisor 可以采集到两大类指标,分别是容器指标和机器的指标。


容器的指标有 CPU、内存、文件系统、网络流量、启动时间等等参数,详细参考如下链接。


https://github.com/google/cadvisor/blob/master/docs/storage/prometheus.md#prometheus-container-metrics


机器的硬件指标有宿主机的 CPU 核数、内存容量、hugepage 、NVM 等等指标,如果用参数打开了 GPU 的采集,估计也能有一些,当然这些指标不能和 Node Exporter 以及 GPU Exporter 去比较,会少很多,详细的可以参考这个链接


https://github.com/google/cadvisor/blob/master/docs/storage/prometheus.md#prometheus-hardware-metrics


这些列表里的 指标都可以通过 -disable_metrics-enable_metrics 参数来打开采集或者关闭采集。

总结

cAdvisor 是 Google 出品的一个用来采集容器指标的一个很好的组件,Google 最初的规划并不是一个 Prometheus 的容器指标 Exporter ,但是现在反而是容器指标的事实标准,并且和 Prometheus 结合最紧密。

发布于: 3 小时前阅读数: 9
用户头像

耳东@Erdong

关注

还未添加个人签名 2020.05.24 加入

主要研究分享运维技术,专注于监控、CICD、操作系统、云原生领域,公众号【耳东学堂】,知识星球同名,坚持原创,希望能和大家在运维路上结伴而行 邮箱:erdong@mail.erdong.site

评论 (1 条评论)

发布
用户头像
有人对容器的 CPU 使用率计算或者内存使用率该使用哪个指标这些有疑惑吗?有的话评论区见,遇到的多的话我会整理文档出来。
3 小时前
回复
没有更多了
Prometheus Exporter (三)容器信息监控