基于docker搭建Prometheus+Grafana
一、介绍Prometheus
Prometheus(普罗米修斯)是一套开源的监控&报警&时间序列数据库的组合,起始是由SoundCloud公司开发的。随着发展,越来越多公司和组织接受采用Prometheus,社会也十分活跃,他们便将它独立成开源项目,并且有公司来运作。Google SRE的书内也曾提到跟他们BorgMon监控系统相似的实现是Prometheus。现在最常见的Kubernetes容器管理系统中,通常会搭配Prometheus进行监控。
公司主营业务:成都网站建设、网站设计、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联建站是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联建站推出石峰免费做网站回馈大家。
Prometheus基本原理是通过HTTP协议周期性抓取被监控组件的状态,这样做的好处是任意组件只要提供HTTP接口就可以接入监控系统,不需要任何SDK或者其他的集成过程。这样做非常适合虚拟化环境比如VM或者Docker 。
Prometheus应该是为数不多的适合Docker、Mesos、Kubernetes环境的监控系统之一。
与其他监控系统相比,Prometheus的主要特点是:
一个多维数据模型(时间序列由指标名称定义和设置键/值尺寸)。
非常高效的存储,平均一个采样数据占~3.5bytes左右,320万的时间序列,每30秒采样,保持60天,消耗磁盘大概228G。
一种灵活的查询语言。
不依赖分布式存储,单个服务器节点。
时间集合通过HTTP上的PULL模型进行。
通过中间网关支持推送时间。
通过服务发现或静态配置发现目标。
多种模式的图形和仪表板支持。
二、Prometheus架构概览
该图说明了普罗米修斯(Prometheus)及其一些生态系统组件的整体架构:
它的服务过程是这样的Prometheus daemon负责定时去目标上抓取metrics(指标) 数据,每个抓取目标需要暴露一个http服务的接口给它定时抓取。
Prometheus:支持通过配置文件、文本文件、zookeeper、Consul、DNS SRV lookup等方式指定抓取目标。支持很多方式的图表可视化,例如十分精美的Grafana,自带的Promdash,以及自身提供的模版引擎等等,还提供HTTP API的查询方式,自定义所需要的输出。
Alertmanager:是独立于Prometheus的一个组件,可以支持Prometheus的查询语句,提供十分灵活的报警方式。
PushGateway:这个组件是支持Client主动推送metrics到PushGateway,而Prometheus只是定时去Gateway上抓取数据。
如果有使用过statsd的用户,则会觉得这十分相似,只是statsd是直接发送给服务器端,而Prometheus主要还是靠进程主动去抓取。
大多数Prometheus组件都是用Go编写的,它们可以轻松地构建和部署为静态二进制文件。访问prometheus.io以获取完整的文档,示例和指南。
三、Prometheus四种数据类型
Counter
Counter用于累计值,例如记录请求次数、任务完成数、错误发生次数。一直增加,不会减少。重启进程后,会被重置。
例如:http_response_total{method=”GET”,endpoint=”/api/tracks”} 100,10秒后抓取http_response_total{method=”GET”,endpoint=”/api/tracks”} 100。
Gauge
Gauge常规数值,例如 温度变化、内存使用变化。可变大,可变小。重启进程后,会被重置。
例如: memory_usage_bytes{host=”master-01″} 100 < 抓取值、memory_usage_bytes{host=”master-01″} 30、memory_usage_bytes{host=”master-01″} 50、memory_usage_bytes{host=”master-01″} 80 < 抓取值。
Histogram
Histogram(直方图)可以理解为柱状图的意思,常用于跟踪事件发生的规模,例如:请求耗时、响应大小。它特别之处是可以对记录的内容进行分组,提供count和sum全部值的功能。
例如:{小于10=5次,小于20=1次,小于30=2次},count=7次,sum=7次的求和值。
Summary
Summary和Histogram十分相似,常用于跟踪事件发生的规模,例如:请求耗时、响应大小。同样提供 count 和 sum 全部值的功能。
例如:count=7次,sum=7次的值求值。
它提供一个quantiles的功能,可以按%比划分跟踪的结果。例如:quantile取值0.95,表示取采样值里面的95%数据。
五、实验环境
docker01 | docker02 | docker03 |
---|---|---|
192.168.1.11 | 192.168.1.13 | 192.168.1.20 |
NodeEXporter | NodeEXporter | NodeEXporter |
cAdvisor | cAdvisor | cAdvisor |
Prometheus Server | 空 | 空 |
Grafana | 空 | 空 |
全部关闭防火墙,禁用selinux
需要部署的组件:
Prometheus Server:普罗米修斯的主服务器。
Prometheus是一个开源的服务监控系统,它通过HTTP协议从远程的机器收集数据并存储在本地的时序数据库上。
- 多维数据模型(时序列数据由metric名和一组key/value组成)
- 在多维度上灵活的查询语言(PromQl)
- 不依赖分布式存储,单主节点工作.
- 通过基于HTTP的pull方式采集时序数据
- 可以通过push gateway进行时序列数据推送(pushing)
- 可以通过服务发现或者静态配置去获取要采集的目标服务器
- 多种可视化图表及仪表盘支持
- Prometheus通过安装在远程机器上的exporter来收集监控数据,后面我们将使用到node_exporter收集系统数据。
[NodeEXporter]():负责收集Host硬件信息和操作系统信息。
[cAdvisor]():负责收集Host.上运行的容器信息。
Grafana:负责展示普罗米修斯监控界面。
Grafana 是一个开箱即用的可视化工具,具有功能齐全的度量仪表盘和图形编辑器,有灵活丰富的图形化选项,可以混合多种风格,支持多个数据源特点。
这些可以直接docker pull下载镜像(现在是本地导入镜像)
本地上传镜像
docker01
[09:05:42][docker01$ docker load -i node-exporter.tar && docker load -i mycadvisor.tar && docker load -i prometheus.tar && docker load -i grafana.tar
docker02和docker03
[09:05:22]docker03]$ docker load -i node-exporter.tar && docker load -i mycadvisor.tar
六、各主机部署
1) 3个节点,全部部署node-EXporter,和cAdvisor.
部署安装node-EXporter收集节点硬件和操作系统信息。
[09:21:03[docker01]$ 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)($|/)"
//部署node-EXporter,收集硬件和系统信息。
PS: 注意,这里使用了--net=host, 这样Prometheus Server可以直接与Node-
EXporter通信。
验证:打开浏览器验证结果。http://192.168.1.11:9100/,http://192.168.1.13:9100/,http://192.168.1.20:9100/
部署安装cAdvisor,收集节点容器信息。
[09:39:10[docker01]$ docker run -v /:/rootfs:ro -v /var/run:/var/run/:rw -v /sys:/sys:ro -v /var/lib/docker:/var/lib/docker:ro --detach=true --name=cadvisor --net=host google/cadvisor
验证:打开浏览器验证结果。http://192.168.1.11:8080,http://192.168.1.13:8080,http://192.168.1.20:8080
2)在docker01上部署Prometheus Server服务。
在部署prometheus之前,我们需要对它的配置文件进行修改,所以我们先运行一个容器,先将其配置文件拷贝出来。
09:51:22][docker01]$ docker run -d -p 9090:9090 --name prometheus --net=host prom/prometheus
//打开一台Prometheus
[09:51:00[docker01]$ docker cp prometheus:/etc/prometheus/prometheus.yml ./
//拷贝Prometheus的配置文件到本地
修改Prometheus的配置文件,添加监听端口(29行)
[09:55:53][docker01][~]$ vim prometheus.yml
//修改配置文件这里指定了prometheus的监控项,包括它也会监控自己手机到的数据。
- targets: ['localhost:9090','localhost:8080','localhost:9100','192.168.1.13:8080','192.168.1.13:9100','192.168.1.20:8080','192.168.1.20:9100']
重新运行prometheus容器
[10:00:27][docker01][~]$ docker rm -f prometheus
//删除 prometheus容器
[10:02:45][docker01][~]$ docker run -d -p 9090:9090 --name prometheus --net=host -v /root/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
//运行一台新的 prometheus容器
浏览器访问,验证:http://192.168.1.11:9090/graph
ps:这里能够查看到我们各个监控项。
如果现在挂起一台虚拟机(测试完之后继续运行)
3)在docker01.上,部署grafana服务,用来展示prometheus收集到的数据。
[root@docker01 ~]# mkdir grafana-storage
//创建收集信息的目录
[root@docker01 ~]# chmod 777 grafana-storage/
//给予777权限
[root@docker01 ~]# docker run -d -p 3000:3000 --name grafana -v /root/grafana-storage:/var/lib/grafana -e "GF_SECURITY_ADMIN_PASSWORD=123.com" grafana/grafana
浏览器访问验证:
(<默认>用户名:admin,密码:123.com)
添加数据源
PS:看到这个提示, 说明prometheus和grafana服务的是 正常连接的。
此时,虽然grafana收集到了数据,但怎么显示它,仍然是个问题,grafana支持自定 义显示信息,不过要自定义起来非常麻烦,不过好在,grafana官方为我们提供了- -些模板,来供我们使用。
grafana官网:https://grafana.com/docs/grafana/latest/
选中一款模板,然后,我们有2种方式可以套用这个模板。
第一种方式:通过JSON文件使用模板。
下载完成之后,来到grafana控制台
第二种导入模板的方式:**
可以直接通过模板的ID号。
//这个id不好用换成8321了
复制模板id之后,来到grafana控制台
排错思路
防火墙是否关闭,selinux是否禁用
主机名称是否更改
镜像是否正常
各服务启动时挂载目录是否正确
grafana服务,是否创建所需目录,目录是否有权限
Prometheus服务是否修改配置文件
总结
恭喜!您已经设置了Prometheus服务器,Node Exporter和Grafana 等所有这些都可以使用的Docker。尽管这些目前都在同一台机器上运行,但这仅用于演示目的。在生产设置中,通常会在每台受监控的计算机上运行节点导出器,多个Prometheus服务器(根据组织的需要),以及单个Grafana服务器来绘制来自这些服务器的数据。
参考:https://www.cnblogs.com/xiao987334176/p/9930517.html
网站标题:基于docker搭建Prometheus+Grafana
本文地址:http://ybzwz.com/article/pgpoch.html