基于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)及其一些生态系统组件的整体架构:
基于docker 搭建Prometheus+Grafana

它的服务过程是这样的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/

基于docker 搭建Prometheus+Grafana

基于docker 搭建Prometheus+Grafana

部署安装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

基于docker 搭建Prometheus+Grafana

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

基于docker 搭建Prometheus+Grafana

ps:这里能够查看到我们各个监控项。

如果现在挂起一台虚拟机(测试完之后继续运行)

基于docker 搭建Prometheus+Grafana

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)

基于docker 搭建Prometheus+Grafana

添加数据源

基于docker 搭建Prometheus+Grafana

基于docker 搭建Prometheus+Grafana

基于docker 搭建Prometheus+Grafana
基于docker 搭建Prometheus+Grafana
基于docker 搭建Prometheus+Grafana
PS:看到这个提示, 说明prometheus和grafana服务的是 正常连接的。

此时,虽然grafana收集到了数据,但怎么显示它,仍然是个问题,grafana支持自定 义显示信息,不过要自定义起来非常麻烦,不过好在,grafana官方为我们提供了- -些模板,来供我们使用。

grafana官网:https://grafana.com/docs/grafana/latest/

基于docker 搭建Prometheus+Grafana
基于docker 搭建Prometheus+Grafana
基于docker 搭建Prometheus+Grafana
基于docker 搭建Prometheus+Grafana

选中一款模板,然后,我们有2种方式可以套用这个模板。

第一种方式:通过JSON文件使用模板。

基于docker 搭建Prometheus+Grafana

下载完成之后,来到grafana控制台

基于docker 搭建Prometheus+Grafana

基于docker 搭建Prometheus+Grafana

基于docker 搭建Prometheus+Grafana
基于docker 搭建Prometheus+Grafana

第二种导入模板的方式:**

可以直接通过模板的ID号。

基于docker 搭建Prometheus+Grafana
//这个id不好用换成8321了

基于docker 搭建Prometheus+Grafana
复制模板id之后,来到grafana控制台

基于docker 搭建Prometheus+Grafana

排错思路

防火墙是否关闭,selinux是否禁用
主机名称是否更改
镜像是否正常
各服务启动时挂载目录是否正确
grafana服务,是否创建所需目录,目录是否有权限
Prometheus服务是否修改配置文件

总结

恭喜!您已经设置了Prometheus服务器,Node Exporter和Grafana 等所有这些都可以使用的Docker。尽管这些目前都在同一台机器上运行,但这仅用于演示目的。在生产设置中,通常会在每台受监控的计算机上运行节点导出器,多个Prometheus服务器(根据组织的需要),以及单个Grafana服务器来绘制来自这些服务器的数据。

参考:https://www.cnblogs.com/xiao987334176/p/9930517.html

猜你喜欢

转载自blog.51cto.com/14320361/2461277