上一节介绍了 Prometheus 的核心,多维数据模型。本节演示如何快速搭建 Prometheus 监控系统。html
咱们将经过 Prometheus 监控两台 Docker Host:192.168.56.102 和 192.168.56.103,监控 host 和容器两个层次的数据。node
按照架构图,咱们须要运行以下组件:docker
Prometheus Serverjson
Prometheus Server 自己也将以容器的方式运行在 host 192.168.56.103 上。浏览器
Exporter架构
Prometheus 有不少现成的 Exporter,完整列表请参考 https://prometheus.io/docs/instrumenting/exporters/ide
咱们将使用:学习
Node Exporter,负责收集 host 硬件和操做系统数据。它将以容器方式运行在全部 host 上。测试
cAdvisor,负责收集容器数据。它将以容器方式运行在全部 host 上。ui
Grafana
显示多维数据,Grafana 自己也将以容器方式运行在 host 192.168.56.103 上。
在两个 host 上执行以下命令:
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)($|/)"
注意,这里咱们使用了 --net=host
,这样 Prometheus Server 能够直接与 Node Exporter 通讯。
Node Exporter 启动后,将经过 9100 提供 host 的监控数据。在浏览器中经过 http://192.168.56.102:9100/metrics 测试一下。
在两个 host 上执行以下命令:
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
注意,这里咱们使用了 --net=host
,这样 Prometheus Server 能够直接与 cAdvisor 通讯。
cAdvisor 启动后,将经过 8080 提供 host 的监控数据。在浏览器中经过 http://192.168.56.102:8080/metrics 测试一下。
在 host 192.168.56.103 上执行以下命令:
docker run -d -p 9090:9090 \
-v /root/prometheus.yml:/etc/prometheus/prometheus.yml \
--name prometheus \
--net=host \
prom/prometheus
注意,这里咱们使用了 --net=host
,这样 Prometheus Server 能够直接与 Exporter 和 Grafana 通讯。
prometheus.yml 是 Prometheus Server 的配置文件。
最重要的配置是:
static_configs:
- targets: ['localhost:9090','localhost:8080','localhost:9100','192.168.56.102:8080','192.168.56.102:9100']
指定从哪些 exporter 抓取数据。这里指定了两台 host 上的 Node Exporter 和 cAdvisor。
另外 localhost:9090
就是 Prometheus Server 本身,可见 Prometheus 自己也会收集本身的监控数据。一样地,咱们也能够经过 http://192.168.56.103:9090/metrics 测试一下。
在浏览器中打开 http://192.168.56.103:9090 ,点击菜单 Status -> Targets
。
以下图所示:
全部 Target
的 State
都是 UP
,说明 Prometheus Server 可以正常获取监控数据。
在 host 192.168.56.103 上执行以下命令:
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_SECURITY_ADMIN_PASSWORD=secret
指定了 Grafana admin
用户密码 secret
。
Grafana 启动后。在浏览器中打开 http://192.168.56.103:3000/
登陆后,Grafana 将引导咱们配置 Data Source。
Name
为 Data Source 命名,例如 prometheus
。
Type
选择 Prometheus
。
Url
输入 Prometheus Server 的地址 http://192.168.56.103:9090
其余保持默认值,点击 Add
。
若是一切顺利,Grafana 应该已经可以访问 Prometheus 中存放的监控数据了,那么如何展现呢?
Grafana 是经过 Dashboard 展现数据的,在 Dashboard 中须要定义:
展现 Prometheus 的哪些多维数据?须要给出具体的查询语言表达式。
用什么形式展现,好比二维线性图,仪表图,各类坐标的含义等。
可见,要作出一个 Dashboard 也不是件容易的事情。幸运的是,咱们能够借助开源社区的力量,直接使用现成的 Dashboard。
访问 https://grafana.com/dashboards?dataSource=prometheus&search=docker,将会看到不少用于监控 Docker 的 Dashboard。
咱们能够下载这些现成的 Dashboard,而后 import 到咱们的 Grafana 中就能够直接使用了。
好比下载 Docker and system monitoring
,获得一个 json 文件,而后点击 Grafana 左上角菜单 Dashboards -> Import
。
导入咱们下载的 json 文件。
Dashboard 将马上展现出漂亮的图表。
在这个 Dashboard 中,上部分是 host 的数据,咱们能够经过 Node
切换不一样的 host。
Dashboard 的下半部分展现的是全部的容器监控数据。Grafana 的 Dashboard 是可交互的,咱们能够在图表上只显示指定的容器、选取指定的时间区间、从新组织和排列图表、调整刷新频率,功能很是强大。
好了,以上就完成了 Prometheus 监控系统的部署,更多功能你们能够自行探索。到这里咱们已经学习了多种 Docker 监控方案,是时候对它们作个比较了,下一节见。
书籍:
1.《天天5分钟玩转Docker容器技术》
https://item.jd.com/16936307278.html
2.《天天5分钟玩转OpenStack》
https://item.jd.com/12086376.html