Cadvisor使用Go语言开发,利用linux的cgroups获取容器的资源使用信息,cadvisor不仅可以搜集一台机器上所有运行的容器信息,还提供基础查询界面和http接口,方便其他组件如Prometheus进行数据抓取。
本文介绍下 Cadvisor的安装,以及如何监控容器,最后去展示数据的。
[root@prometheus ~]# 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
google/cadvisor:latest
#如果启动docker 报错 ,cadvisor Failed to start container manager: inotify_add_watch /sys/fs/cgroup/cpuacct,cpu: nosuchfile
解决方法:
1、设置cgroup 为可读写文件, 不然的话会报:只读文件系统
2、建立软连接
[root@prometheus ~]# mount -o remount,rw '/sys/fs/cgroup'
[root@prometheus ~]# ln -s /sys/fs/cgroup/cpu,cpuacct /sys/fs/cgroup/cpuacct,cpu
再次启动容器 就OK 了
浏览器访问 http://192.168.31.250:8080
可以看到 一些容器的metrics 数据
修改配置文件(添加最下面的job_name: 'docker')
[root@prometheus to]# cat prometheus.yml
global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['192.168.31.250:9090']
- job_name: 'node'
static_configs:
- targets: ['192.168.31.30:9100','192.168.31.40:9100','192.168.31.41:9100','192.168.31.42:9100']
params:
collect[]:
- cpu
- meminfo
- diskstats
- job_name: 'docker'
static_configs:
- targets: ['192.168.31.250:8080']
#改完后记得重新加载下 prometheus 的配置文件
[root@prometheus ~]# ps -ef | grep prometheus | grep -v grep | awk '{print $2}' | xargs kill -HUP
可以看到cadvisor 采集器 已经添加到targets 列表中了
这里使用 grafana dashboard 官网中的模板 https://grafana.com/grafana/dashboards/193
登录grafana , http://192.168.31.250:3000
import 导入模板,ID 为 193
可以自定义监控名称,选择数据源为prometheus
最终效果
本篇只涉及到 使用Cadvisor监控容器并展示数据 ,并没有写到 触发器的配置告警,这个等后面再更新。