cAdvisor + Prometheus收集本机和docker容器数据
在这个万物结可容器化的时代,监控显的尤为重要,在本篇文章,我们将对服务器的相关容器和本机数据利用 Cadvisor
进行收集,通过 Prometheus
作为数据源,利用 Grafana
进行展示。
docker
或 kubernetes
集群的监控有多种,比如:
- docker:
cAdvisor
收集本机以及容器的监控数据 - kubernetes:
cAdvisor+InfluxDB+Grafana
- kubernetes:
Heapster+InfluxDB+Grafana
下面简单说一下谷歌 cAdvisor
和 普罗米修斯
结合的监控,在 grafana
展示,各个文档请看官方介绍
https://prometheus.io/ https://github.com/google/cadvisor
部署Cadvisor
具体操作是在每台运行 docker
服务的主机上都跑一个 cAdvisor
容器, 博主这边是采用 docker-compose
的方式进行部署,然后我先给大家贴一下 yml
cadvisor: image: google/cadvisor restart: always ports: - "8080:8080" volumes: - /:/rootfs:ro - /var/run:/var/run:rw - /sys:/sys:ro - /var/lib/docker/:/var/lib/docker:ro
当容器的 STATUS
为 UP
的时候就成功启动了, cAdvisor
为我们提供主机的信息的相关 API
:
http://IP:8080/metrics http://IP:8080/containers http://IP:8080/docker
默认访问的的话,大概就是这个样子,也有相关数据的可视化图表,但是这远远不够,我们还是统一采用 grafana
,进行集中式展示,方便查看各个主机的信息,在使用 grafana
之前,我们还需要将这些数据用 Prometheus
进行收集
注意
有可能启动会出现这个问题:
W1112 08:18:11.930612 1 manager.go:349] Could not configure a source for OOM detection, disabling OOM events: open /dev/kmsg: no such file or directory E1112 08:18:58.568289 1 static.go:75] Failed to write response: write tcp 172.19.0.6:8080->61.140.208.205:53633: write: broken pipe W1112 08:48:55.102473 1 container.go:409] Failed to create summary reader for "/docker/42ef2fbef15ce20a5fc2caaebaccc7712b179855ce8384f34cbdae1f7d30920f": none of the resources are being tracked. I1114 02:36:19.568227 1 manager.go:1212] Exiting thread watching subcontainers I1114 02:36:19.568254 1 manager.go:432] Exiting global housekeeping thread I1114 02:36:19.568269 1 cadvisor.go:212] Exiting given signal: terminated W1114 02:36:20.574582 1 manager.go:349] Could not configure a source for OOM detection, disabling OOM events: open /dev/kmsg: no such file or directory I1114 02:37:41.416194 1 manager.go:1212] Exiting thread watching subcontainers I1114 02:37:41.416215 1 manager.go:432] Exiting global housekeeping thread I1114 02:37:41.416227 1 cadvisor.go:212] Exiting given signal: terminated W1114 02:37:42.407178 1 manager.go:349] Could not configure a source for OOM detection, disabling OOM events: open /dev/kmsg: no such file or directory
之后处理方法如下:
sudo mount -o remount,rw '/sys/fs/cgroup' sudo ln -s /sys/fs/cgroup/cpu,cpuacct /sys/fs/cgroup/cpuacct,cpu
部署Prometheus
这个我们也采用 docker-compose
进行部署,统一方便
prometheus: image: prom/prometheus:latest restart: always ports: - "9090:9090" volumes: - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml - type: volume source: prometheus target: /prometheus volumes: prometheus: driver: local driver_opts: type: none o: bind device: /var/www/ghost-docker-compose/prometheus/data
- prometheus.yml
global: scrape_interval: 15s evaluation_interval: 15s scrape_configs: - job_name: 'prometheus' static_configs: - targets: ['prometheus:9090'] - job_name: 'cadvisor' static_configs: - targets: ['cadvisor:8080']
成功后方问 ip:9090
, 就能看到界面了,然后我们配置一下 Prometheus
让他能看到 Cadvisor
这个服务,Status -> Targets
看到 UP
状态就是成功了
在 Status-Configuration
里面可以看到配置文件,Targets
里面查看已经建立的节点。普罗米修斯 Graph
搜索查看条件语法见 https://prometheus.io/docs/querying/basics/
我们可以在 Graph
栏目选择一条指令测试一下,是否可以成功获取到信息
部署Grafana
grafana
是从 prometheus
获取数据并展示,第一步添加 prometheus
数据库,第二步用网上的模板画图,这边直接 docker
一条龙
grafana: image: grafana/grafana:latest volumes: - type: volume source: grafana target: /var/lib/grafana ports: - "3000:3000" volumes: prometheus: driver: local driver_opts: type: none o: bind device: /var/www/ghost-docker-compose/prometheus/data grafana: driver: local driver_opts: type: none o: bind device: /var/www/ghost-docker-compose/grafana
添加DataSource
我们先进行 data Source
的添加
关于 Access 的选择
访问模式控制如何处理对数据源的请求。如果没有其他说明,则 Server 应该是首选方式。
服务器访问模式(默认):
所有请求都将从浏览器发出到Grafana后端/服务器,后者再将请求转发到数据源,从而避免可能的跨域资源共享(CORS)要求。 如果选择此访问方式,则需要可以从grafana后端/服务器访问该URL。
浏览器访问模式:
所有请求都将从浏览器直接向数据源发出,并且可能会受到跨域资源共享(CORS)的要求。 如果选择此访问方式,则需要可以从浏览器访问URL。
导入图表-可视化查看
然后我们需要 import
一个图表对数据进行可视化,但是图表从哪里来呢?官方已经有很多图表,所以我们需要找到合适自己的图表,并记录下他们的图表 ID
这样我们就可以远程加载了。
这边给大家找了一个 ID: 11600
选择我们上个步骤添加的数据源,这样就可以看到 Cadvisor
收集的信息啦