上一节介绍了 Prometheus 的核心,多维数据模型。本节演示如何快速搭建 Prometheus 监控系统。

环境说明

我们将通过 Prometheus 监控两台 Docker Host:192.168.56.102 和 192.168.56.103,监控 host 和容器两个层次的数据。

按照架构图,我们需要运行如下组件:

Prometheus Server

Prometheus Server 本身也将以容器的方式运行在 host 192.168.56.103 上。

Exporter

Prometheus 有很多现成的 Exporter,完整列表请参考 https://prometheus.io/docs/instrumenting/exporters/

我们将使用:

  1. Node Exporter,负责收集 host 硬件和操作系统数据。它将以容器方式运行在所有 host 上。

  2. cAdvisor,负责收集容器数据。它将以容器方式运行在所有 host 上。

Grafana

显示多维数据,Grafana 本身也将以容器方式运行在 host 192.168.56.103 上。

运行 Node Exporter

在两个 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 测试一下。

运行 cAdvisor

在两个 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 测试一下。

运行 Prometheus Server

在 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 能够正常获取监控数据。

运行 Grafana

在 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 中需要定义:

  1. 展示 Prometheus 的哪些多维数据?需要给出具体的查询语言表达式。

  2. 用什么形式展示,比如二维线性图,仪表图,各种坐标的含义等。

可见,要做出一个 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

如何快速部署 Prometheus?- 每天5分钟玩转 Docker 容器技术(85)的更多相关文章

  1. 部署 Helm - 每天5分钟玩转 Docker 容器技术(162)

    本节我们将安装和部署 Helm 客户端和 Tiller 服务器. Helm 客户端 通常,我们将 Helm 客户端安装在能够执行 kubectl 命令的节点上,只需要下面一条命令: curl http ...

  2. 部署 Prometheus Operator - 每天5分钟玩转 Docker 容器技术(179)

    本节在实践时使用的是 Prometheus Operator 版本 v0.14.0.由于项目开发迭代速度很快,部署方法可能会更新,必要时请参考官方文档. 下载最新源码 git clone https: ...

  3. 部署 Graylog 日志系统 - 每天5分钟玩转 Docker 容器技术(92)

    Graylog 是与 ELK 可以相提并论的一款集中式日志管理方案,支持数据收集.检索.可视化 Dashboard.本节将实践用 Graylog 来管理 Docker 日志. Graylog 架构 G ...

  4. Prometheus Operator 架构 - 每天5分钟玩转 Docker 容器技术(178)

    本节讨论 Prometheus Operator 的架构.因为 Prometheus Operator 是基于 Prometheus 的,我们需要先了解一下 Prometheus. Prometheu ...

  5. Prometheus 架构 - 每天5分钟玩转 Docker 容器技术(83)

    Prometheus 是一个非常优秀的监控工具.准确的说,应该是监控方案.Prometheus 提供了监控数据搜集.存储.处理.可视化和告警一套完整的解决方案. 让我们先来看看 Prometheus ...

  6. Prometheus 到底 NB 在哪里?- 每天5分钟玩转 Docker 容器技术(84)

    本节讨论 Prometheus 的核心,多维数据模型.我们先来看一个例子. 比如要监控容器 webapp1 的内存使用情况,最传统和典型的方法是定义一个指标 container_memory_usag ...

  7. ELK 完整部署和使用 - 每天5分钟玩转 Docker 容器技术(90)

    上一节已经部署了容器化的 ELK,本节讨论如何将日志导入 ELK 并进行图形化展示. 几乎所有的软件和应用都有自己的日志文件,容器也不例外.前面我们已经知道 Docker 会将容器日志记录到 /var ...

  8. 部署 k8s Cluster(上)- 每天5分钟玩转 Docker 容器技术(118)

    我们将部署三个节点的 Kubernetes Cluster. k8s-master 是 Master,k8s-node1 和 k8s-node2 是 Node. 所有节点的操作系统均为 Ubuntu ...

  9. 部署 k8s Cluster(下)- 每天5分钟玩转 Docker 容器技术(119)

    上节我们通过 kubeadm 在 k8s-master 上部署了 Kubernetes,本节安装 Pod 网络并添加 k8s-node1 和 k8s-node2,完成集群部署. 安装 Pod 网络 要 ...

随机推荐

  1. 201521123105 《Java程序设计》第1周学习总结

    1.学习总结      简单学习jave 了解并区分JVM JRE JDK 了解JAVA语言的发展史 2.书面作业        Q:为什么java程序可以跨平台运行?执行java程序的步骤是什么?( ...

  2. 201521123056 《Java程序设计》第10周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 2. 书面作业 本次PTA作业题集异常.多线程 1. finally 题目4-2 1.1 截图你的提交结果( ...

  3. 201521123025<<java程序设计>>第9周学习总结

    1. 本周学习总结 2.书面作业 Q1.常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己以前编写的代码中经常出现什么异常.需要捕获吗(为什么)?应如何避免? 经常出现Array ...

  4. MySQL数据库引擎介绍、区别

    数据库引擎介绍 MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的.要添加一个新的引擎,就必须重新编译MYSQL.在缺省情况下,MYSQL支持三个引擎:ISAM.MYISAM和HEAP.另 ...

  5. day2_操作系统

    一.为什么要有操作系统       因为计算机系统主要是由一个或者多个处理器,主存,硬盘,键盘,鼠标,显示器,打印机,网络接口及其他输入输出设备组成.现代计算机系统复杂 每位计算机程序员不可能全部的掌 ...

  6. 简单CSS 布局

    CSS Layout CSS Layout 是对上下左右布局的一个简单封装,主要针对自己项目里面方便使用. 坚持组合大于继承的原则,复杂的布局也是由简单布局组成的. 所以不习惯margin/paddi ...

  7. springboot+swagger2

    springboot+swagger2 小序 新公司的第二个项目,是一个配置管理终端机(比如:自动售卖机,银行取款机)的web项目,之前写过一个分模块的springboot框架,就在那个框架基础上进行 ...

  8. Linux 更改ssh 端口

    部署了一个测试服务器之后,在查看linux日志的时候,发现莫名的IP一直在访问服务器,感觉像是某种恶意扫描,来攻击服务器的.因此更改ssh端口. 输入: vim /etc/ssh/sshd_confi ...

  9. SQLServer总结

    基础 nvarchar 和 varchar等的区别 1.nvarchar多了一个N,n表示使用的unicode编码,不用N开头的是用的utf-8编码. 2.所以中文在varchar中占两个字符长度,在 ...

  10. 对python编程的初步理解

    一直以来零零散散有听过python,这周终于下定决心学python了.在网上了买个套视频教程,内容分周次学习,有详细的讲解.本人觉得非常好.这里谈谈一下第一周的学习的笔记.望路过的大神给予指正,不胜感 ...