0. 简介
现如今,容器越来越普及,将服务迁移到容器成为越来越多公司的选择,所以对于容器的监控,也就变成必不可少的技能了。
目前常见的容器产品中,Docker占据了绝对的统治地位,所以这篇博客简单介绍一下通过Prometheus搭建容器监控的方案。
1. CAdvisor工具
CAdvisor是Google开源的一款用于监控和展示容器运行状态的可视化工具。其可以搜集到机器上所有运行的容器信息,还提供查询界面和http接口,方便如Prometheus等监控系统进行数据的获取。
CAdvisor可以直接安装,也可以通过Docker安装,下面我们通过Docker安装的方式进行安装。
直接通过sudo docker pull google/cadvisor:latest
指令可以拉取最新的CAdvisor镜像。
$ sudo 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=18080:8080
--detach=true
--name=cadvisor
--privileged=true
google/cadvisor:latest
然后通过以上指令安装镜像,注意以上命令在容器中挂载了几个目录,ro代表只读,CAdvisor将从其中收集数据。 rw代表可读写,此处指定/var/run目录,用于Docker套接字的挂载; --detach将以守护进程的方式运行; --name对生成的容器进行命名; 在Ret Hat,CentOS, Fedora 等发行版上需要传递如下参数--privileged=true。
因为本机的8080端口被占了,所以映射了18080端口。这时候访问http://$ip:18080
端口即可发现程序运行正常。
2. Prometheus集成
从上面的页面也可以看出,CAdvisor是一个简单易用的工具,它除了有详细的监控指标,也提供了可供查看的WEB图表界面。但CAdvisor本身的数据保存时间只有2分钟,而且在多主机的情况下,要单独去登录每台机器查看docker数据也是一件麻烦的事情。
对此,更好的方法是与Prometheus集成,实现Docker容器数据的收集与保存。由于CAdvisor提供了支持Prometheus的metrics格式接口,所以Prometheus只需要按照获取Exporter指标的方式,创建相关的Job即可。
scrape_configs:
- job_name: cadvisor
honor_timestamps: true
scrape_interval: 15s
scrape_timeout: 10s
metrics_path: /metrics
scheme: http
follow_redirects: true
static_configs:
- targets:
- x.x.x.x:18080
修改挂载的Prometheus挂载文件并重启文件后,我们可以在其页面中搜索到对应的数据。
3. Grafana可视化
经过对比,我们选择Docker monitoring
作为仪表盘,复制其ID(193)到Grafana中。
最后可以得到如下图所示的监控仪表盘。
4. 参考资料
16.Docker容器监控