容器信息监控
容器已经发展了很久,最开始的时候还争论容器监控使用什么方式,现在基本已经形成了事实标准,容器监控使用 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、内存、文件系统、网络流量、启动时间等等参数,详细参考如下链接。
机器的硬件指标有宿主机的 CPU 核数、内存容量、hugepage 、NVM 等等指标,如果用参数打开了 GPU 的采集,估计也能有一些,当然这些指标不能和 Node Exporter 以及 GPU Exporter 去比较,会少很多,详细的可以参考这个链接
这些列表里的 指标都可以通过 -disable_metrics
或 -enable_metrics
参数来打开采集或者关闭采集。
总结
cAdvisor 是 Google 出品的一个用来采集容器指标的一个很好的组件,Google 最初的规划并不是一个 Prometheus 的容器指标 Exporter ,但是现在反而是容器指标的事实标准,并且和 Prometheus 结合最紧密。