Exporter.png

本文已经收录在 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 结合最紧密。