cadvisor是Google开发的容器监控工具:
[root@host1 ~]# docker pull google/cadvisor
[root@host1 ~]# docker run -v /:/rootfs:ro \
> -v /var/run:/var/run:rw \
> -v /sys:/sys:ro \
> -v /var/lib/docker/:/var/lib/docker:ro \
> -p 8080:8080 --detach=true --name=cadvisor google/cadvisor
0b8167eeb03f12688a3cd269aca4237a286f4f7e365c82fba4a4067cd624efb5
[root@host1 ~]# firewall-cmd --add-port=8080/tcp
通过 http://IP:8080/访问 cadvisor
cadvisor会显示当前host 的资源使用情况,包括CPU,内存,网络,文件系统等。
点击 Docker Containers 显示容器列表。
主要功能:
1:展示Host和容器两个层次的监控数据。
2:展示历史变化数据。
Prometheus是一个非常优秀的监控工具,提供了监控数据搜集,存储,处理,可视化和告警一套完整的解决方案。
Prometheus Server负责从Exporter拉取和存储监控数据,并提供套灵活的通询语言(PromQL) 供用户使用。
Exporter负责收集目标对象(host, contaier…的性能数据,并通过HTTP接口供Prometheus Server获取。
监控数据的可视化展现对于监控方案至关重要。以前Prometheus自己开发了-套工具,不过后来废弃了,因为开源社区出现了更为优秀的产品Grafana. Grafana 能够与Prometheus无缝集成,提供完美的数据展示能力。
用户可以定义基于监控数据的告警规则,规则会触发告警。一旦Alermanager收到告警,会通过预定义的方式发出告警通知。支持的方式包括Email、PagerDuty. Webhook 等。
也许一些熟悉其他监控方案的同学看了 Prometheus的架构会不以为然,"这些功能 Zabbix、Graphite、 Nagios 这类监控系统也都有,没什么特别的啊! ". Prometheus 最大的亮点和先进性是它的多维数据模型。
环境:
192.168.0.100 Prometheus Server ,Export , Grafana
192.168.0.110 Export
Export
1.Node Export:负责收集 host 硬件和操作系统数据
2.cadvisor: 负责收集容器数据
Grafana
显示多维数据
在两台host 上执行:
[root@host1 ~]# docker pull prom/node-exporter
[root@host1 ~]# docker run -d -p 9100:9100 -v "/proc:/host/proc" -v "/sys:/host/sys" -v "/:/rootfs" --net=host prom/node-exporter --path.procfs /host/proc --path.sysfs /host/sys --collector.filesystem.ignored-mount-points "^/(sys|proc|dev|host|etc|rootfs/var/lib/docker/containers|rootfs/var/lib/docker/overlay2|rootfs/run/docker/netns|rootfs/var/lib/docker/devicemapper|rootfs/var/lib/docker/aufs)($$|/)"
[root@host1 ~]# firewall-cmd --add-port=9100/tcp
这里我们使用了 - -net=host,这样 Prometheus 可以直接与 Node Export 通信。Node Export 启动后,通过 9100 提供 host 的监控数据。在浏览器通过 http://192.168.0.100:9100/metrics 测试一下。
在两台host 上执行:
[root@host1 ~]# docker pull google/cadvisor
[root@host1 ~]# docker run -v /:/rootfs:ro -v /var/run:/var/run:rw -v /sys:/sys:ro -v /var/lib/docker/:/var/lib/docker:ro -p 8080:8080 --detach=true --name=cadvisor --net=host google/cadvisor
[root@host1 ~]# firewall-cmd --add-port=8080/tcp
这里我们使用了 - -net=host,这样 Prometheus 可以直接与 cadvisor 通信,cadvisor启动后,将通过 8080 提供 host的监控数据,在浏览器通过 http://192.168.0.100:8080/metrics 测试一下。
在 host 192.168.0.100 执行:
编写Prometheus Server 的配置文件:
[root@host1 ~]# vi prometheus.yml
# my global config
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.
# scrape_timeout is set to the global default (10s).
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=` to any timeseries scraped from this config.
- job_name: 'prometheus'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090','localhost:8080','localhost:9100','192.168.0.110:8080','192.168.0.110:9100']
运行Prometheus Server
[root@host1 ~]# docker pull prom/prometheus
[root@host1 ~]# docker run -d -p 9090:9090 -v /root/prometheus.yml:/etc/prometheus/prometheus.yml --name prometheus --net=host prom/prometheus
这里我们使用了 - -net=host,这样 Prometheus 可以直接与Exporter和Grafana通信。
指定从哪些exporter抓取数据。这里指定了两台host上的Node Exporter和cAdvisor.另外localhost:9090就是Prometheus Server自己,可见Prometheus本身也会收集自己的监控数据。同样地,我们也可以通过
http://192.168.0.100:9090/metrics测试下。
在浏览器中打开http://192.168.0.100:9090,点击菜单Status -> Targets.
所有Target的State都是UP,说明Prometheus Server能够正常获取监控数据。
在 host 192.168.0.100 执行:
[root@host1 ~]# docker pull grafana/grafana
[root@host1 ~]# docker run -di -p 3000:3000 -e "GF_SERVER_ROOT_URL=http://grafana.server.name" -e "GF_SECURITY_ADMIN_PASSWORD=123.com" --net=host grafana/grafana
[root@host1 ~]# firewall-cmd --add-port=3000/tcp
注意,这里我们使用了- -net=host,这样Grafana可以直接与Prometheus Server通信。-e “GF_ SECURITY ADMIN PASSWORD=123.com” 指定了Grafana admin用户密码123.com, Grafana启动后。在浏览器中打开
http://192.168.0.100:3000/
登录后,Grafana将引导我们配置Data Source.
Name为Data Source命名,例如prometheus,Type 选择Prometheus。
URL输入Prometheus Server的地址ht://192.168.0.100:9090其他保持默认值,点击Add.如果-切顺利,Grafana 应该已经能够访问Prometheus中存放的监控数据了
那么如何展示呢? Grafana 是通过Dashboard展示数据的,在Dashboard中需要定义:
1.展示Prometheus的哪些多维数据?需要给出具体的询语言表达式。
2.用什么形式展示,比如维线性图, 仪表网,各种坐标的含义等。
可见,要做出一个Dashboard也不是件容易的事情。幸运的是,
我们可以借助开源社区的力量,直接使用现成的Dashboard.访问,
https://grafana.com/dashboardsdataSource=prometheus&search=docker
将会看到很多用于监控Docker的Dashboard
Dashboard 将立刻展示出图表
在这个Dashboard中,上部分是host的数据,我们可以通过Node切换不同的host.
Dashboard的下半部分展示的是所有的容器监控数据。Grafana 的Dashboard是可交互的,我们可以在图表上只显示指定的容器、选取指定的时间区间、重新组织和排列图表、调整刷新频率,功能非常强大。