一、数据接收器 cAdvisor
cAdvisor 是google开发的容器监控工具,在host中运行cadvisor容器
1.下载并启动cadisor
docker pull google/cadvisor (下载软件)
docker run --volume=/:/rootfs:ro \
--volume=/var/run:/var/run:rw \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker:/var/lib/docker:ro \
--publish=8080:8080 \
--detach=true \
--name=cadvisor \
google/cadvisor:latest
2.监控容器
点击docker containers链接
显示容器列表
点击某个容器,比如sysdig ,进入该容器的监控页面。
以上就是cadvisor的主要功能,总结起来主要两点:
1.展示host和容器两个层次的监控数据。
2.展示历史变化数据。
cadvisor的一个亮点就是他可以将监控的数据导出给第三方工具,由这些工具进一步加工处理。我们可以把cadvisor定位为一个监控数据收集器,手机和导出数据是他的强项,而非展示数据。
二、prometheus架构
prometheus是一个非常优秀的监控工具。准确的来说,应该是监控方案。prometheus提供了监控数据搜集、存储 处理 可视化和告警一套完整的解决方案。
1.prometheus server
prometheus server 负责从exporter拉取和存储监控数据,并提供一套灵活的查询语言(promql)供用户使用。
2.exporter
exporter负责收集目标对象的性能数据,并通过http接口供prometheus server获取。
3.可视化组件
监控数据的可视化展现对监控方案至关重要。以前prometheus自己开发了一套工具,不过后来费弃了,因为开源社区出现了更为优秀的产品grafana。 grafana能够与prometheus无缝集成,提供完美的数据展示能力。
4.altertmanager
用户可以定义基于监控数据的告警规则,规则会处罚告警。一旦alermanager收到告警,会通过预定义的方案发出告警通知,支持的方式包括email pagerduty webhook等。
三、prometheus部署
环境说明:
服务器 | ip |
prometheus server | 192.174.1.40 |
监控端 | 192.174.1.5 |
1.运行node-exporter
docker search node-exporter
docker pull node-exporter (两台都需要下载)
(两台都运行)
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)($$|/)"
由于用到主机 所以会有一个警告,所以需要:
firewall-cmd --add-port=9100/tcp --permanent
2.运行cadvisor(两台都需要安装)
docker run \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:rw \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--publish=8080:8080 \
--detach=true \
--name=cadvisor \
--net=host \
google/cadvisor:latest
firew-cmd --add-port=8080/tcp --permanent
这个查看到的是容器的信息
3.运行prometheus server
docker search prometheus
docker pull prom/prometheus
docker run -d -p 9090:9090 -v /root/prometheus.yml:/etc/prometheus/prometheus.yml --name promentheus --net=host prom/prometheus (运行的前提是写好yml文件)
firewall-cmd --add-port=9090/tcp --permanent
由于使用了--net=host 这样prometheus server 可以直接与exporter和grafana通信。prometheus.yml是prometheus server 的配置文件
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=<job_name>` 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.174.1.5:8080','192.174.1.5:9100']
4.运行grafana
docker search grafana
docker pull grafana/grafana
docker run -d -i -p 3000:3000 \
-e "GF_SERVER_rOOT_URL=http://grafana.server.name" \
-e "GF_SECURITY_ADMIN_PASSWORD=SECRET" \
--net=host \
grafana/grafana
使用了 --net=host 这样grafana可以直接与prometheus server 通信。 -e "GF_SERVER_rOOT_URL=http://grafana.server.name"指定了grafana admin用户密码secret。 grafana启动后,在浏览器中打开http://192.174.1.40:3000/
登录后,grafana将引导我们配置data source。
结果:
现在可以访问prometheus中存放的监控数据,但是如何展示:
grafana是通过dashboard展示数据的,在dashboard中需要定义:
1.展示prometheus的那些多为数据?需要给出具体的查询语言表达式。
2.用什么形式展示,比如二维线性图,仪表盘,各种坐标的含义。
可以借助开源社区,直接使用线程的dashboard 访问 https://grafana.com/dashboards?dataSource=prometheus&search=docker 将会看到许多监控docker的dashboard
导入下载的json文件
或者导入Docker and system monitoring 的j son文件
五、各种docker监控方案总结
1.部署容易度
ps/top/stats/无疑石咀容易使用的,他们是docker自带的子命令,随时随地都可以用来快速了解容器状态。其余几种也都能以容器的方式运行。总的来说都不算复杂。相对而言,prometheus涉及的组件比较多,搭建整个方案需要运行的容器数量也要多鞋,部署和管理的难度稍大。
2.数据详细度
ps/top/stats/和cadvisor能够监控容器基本的资料使用情况,sysdig weave scope 和prometheus则能提供更丰富的数据。
3.多host监控
weave scope和prometheus可以监控整个集群,而其余的工具只提供单个host的监控能力。
4.告警功能
只有prometheus具备源生的告警功能。
5.监控非容器资源
sysdig weave scope 和 cadvisor可以监控到host操作系统的状态,prometheus则可以通过exporter支持应用级别的监控,比如监控和ceph 、haproxy等。
六、四个方面的比较结果: