监控容器的运行状态我们需要使用下面三个组件:
cAdvisor (Container Advisor) : 用于收集正在运行的容器资源使用和性能信息。 https://github.com/google/cadvisor
Prometheus(普罗米修斯): 容器监控系统。 https://prometheus.io https://github.com/prometheus
Grafana: 是一个开源的度量分析和可视化系统。 https://grafana.com/grafana
如果要通过上面三个组件对容器进行监控,我们需要先执行下面三个步骤:
第一步:安装cAdvisor 容器镜像
docker run -d \
--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 \
google/cadvisor:latest
第二步:安装grafana 容器镜像
docker run -d --name=grafana -p 3000:3000 grafana/grafana
第三步:安装promethous 容器镜像
docker run -d --name=prometheus -p 9090:9090 prom/prometheus
第四步: 查看三个容器是否运行正常。
Copy liuyang@liuyangdeiMac ~ % docker ps -f name=prometheus -f name=grafana -f name=cadvisor --format="table {{.Names}}\t{{.Status}}\t{{.Ports}}"
NAMES STATUS PORTS
prometheus Up About an hour 0.0.0.0:9090->9090/tcp
grafana Up 3 hours 0.0.0.0:3000->3000/tcp
cadvisor Up 4 hours (healthy) 0.0.0.0:8080->8080/tcp 第五步: 通过浏览器访问http://localhost:8080, http://localhost:9090, http://localhost:3000 分别可以看到图片中显示的内容:
上面的页面表示cAdvisor 运行正常,并正确采集到了数据。cAdvisor 在采集数据时,除了采集docker 容器的数据,也会采集运行docker 的主机的数据。这里我们点击/docker 来进入到docker 的数据页面:
上面罗列出来的就是我们运行在我们主机上的容器。
上图为prometheus 的图形界面。
上图为grafana 的图形监控界面。
如果能正常访问上面三个页面,表明我们的容器运行正常。接下来进行第六步。
第六步:通过下面的docker 指令进入prometheus 的容器内部,修改它的配置文件:
进入容器以后,修改/etc/prometheus/prometheus.yml配置文件。
在文件中,我们在指定位置添加一个新的任务,如上所示。添加完毕以后退出容器,执行下面的命令来重启容器:
重启以后,通过之前相同的检查手段来确保容器重启成功,防止配置文件语法错误等导致容器异常退出。
Note:在修改prometheus配置文件时,主机targets中的ip地址必须填主机的ip地址,而不是localhost,否则会导致prometheus无法从cAdvisor获取到数据,因为使用localhost或者127.0.0.1都是去访问普罗米修斯容器的本身;我们要使用宿主机ip+端口。
当上图中的targets 状态都为up 时,表明prometheus 能够正常与目标服务器进行通信并在指定的ip地址和端口 上获取它的数据。
第七步:确保数据能够成功抓取以后,我们就可以开始使用grafana 来图形化的显示抓取到的数据。
根据图中所示对grafana 进行配置,将prometheus作为它的数据源。
在上图中相应的位置填好数据并保存。
配置好以后创建一个Dashboard。
在图中Metrics 空格中填入相应的promql语句来获取想要现实的数据。上图显示了cpu 的相关数据。除了自己创建Dashboard ,我们也可以从grafana 官网来导入别人已经配置好的Dashboard 。具体参考grafana 官方网站。
通过上面的步骤我们完整的演示了如何通过grafana+prometheus+cAdvisor 来监控容器的运行指标。
在这里我们通过启动三个容器来配置这些服务。为了减少麻烦,我们也可以将三个容器的配置信息直接写入docker-compose.yaml 文件中,通过Compose 来对容器进行管理。