一、Prometheus简介

WeChat6fffdd59c4d1742e3bfa7b22e12cb3dc.png
Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB)。Prometheus使用Go语言开发,是Google BorgMon监控系统的开源版本。2016年由Google发起Linux基金会旗下的原生云基金会(Cloud Native Computing Foundation), 将Prometheus纳入其下第二大开源项目。Prometheus目前在开源社区相当活跃。Prometheus和Heapster(Heapster是K8S的一个子项目,用于获取集群的性能数据。)相比功能更完善、更全面。Prometheus性能也足够支撑上万台规模的集群。

二、Prometheus基本原理

Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口就可以接入监控。不需要任何SDK或者其他的集成过程。这样做非常适合做虚拟化环境监控系统,比如VM、Docker、Kubernetes等。输出被监控组件信息的HTTP接口被叫做exporter 。目前互联网公司常用的组件大部分都有exporter可以直接使用,比如Varnish、Haproxy、Nginx、MySQL、Linux系统信息(包括磁盘、内存、CPU、网络等等)。
其大概的工作流程是:
1、Prometheus server 定期从配置好的 jobs 或者 exporters 中拉 metrics,或者接收来自 Pushgateway 发过来的 metrics,或者从其他的 Prometheus server 中拉 metrics。
2、Prometheus server 在本地存储收集到的 metrics,并运行已定义好的 alert.rules,记录新的时间序列或者向 Alertmanager 推送警报。
3、Alertmanager 根据配置文件,对接收到的警报进行处理,发出告警。
4、在Grafana图形界面中,可视化查看采集数据。

三、Prometheus架构图

WeChat8963be19745cbcb9d768b3e88fe6f58a.png

四、Prometheus特性

1、多维度数据模型。

2、灵活的查询语言。

3、不依赖分布式存储,单个服务器节点是自主的。

4、通过基于HTTP的pull方式采集时序数据。

5、可以通过中间网关进行时序列数据推送。

6、通过服务发现或者静态配置来发现目标服务对象。

7、支持多种多样的图表和界面展示,比如Grafana等。

五、Prometheus组件

1、Prometheus Server 主要负责数据采集和存储,提供PromQL查询语言的支持。

2、Alertmanager 警告管理器,用来进行报警。

3、Push Gateway 支持临时性Job主动推送指标的中间网关。

4、Exporters 输出被监控组件信息的HTTP接口。

5、Grafana 监控数据展示Web UI。

六、Prometheus服务发现

由于 Prometheus 是通过 Pull 的方式主动获取监控数据,也就是每隔几秒钟去各个target采集一次metric。所以需要手工指定监控节点的列表,当监控的节点增多之后,每次增加节点都需要更改配置文件,尽管可以使用接口去热更新配置文件,但仍然非常麻烦,这个时候就需要通过服务发现(service discovery,SD)机制去解决。
Prometheus 支持多种服务发现机制,可以自动获取要收集的 targets,包含的服务发现机制包括:azure、consul、dns、ec2、openstack、file、gce、kubernetes、marathon、triton、zookeeper(nerve、serverset),配置方法可以参考手册的配置页面。可以说 SD 机制是非常丰富的,但目前由于开发资源有限,已经不再开发新的 SD 机制,只对基于文件的 SD 机制进行维护。针对我们现有的系统情况,我们选择了静态配置方式。

七、Prometheus四种数据类型

1、Counter

Counter用于累计值,例如记录请求次数、任务完成数、错误发生次数。一直增加,不会减少。重启进程后,会被重置。
例如:http_response_total{method=”GET”,endpoint=”/api/tracks”} 100,10秒后抓取http_response_total{method=”GET”,endpoint=”/api/tracks”} 100。

2、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 < 抓取值。

3、Histogram

Histogram(直方图)可以理解为柱状图的意思,常用于跟踪事件发生的规模,例如:请求耗时、响应大小。它特别之处是可以对记录的内容进行分组,提供count和sum全部值的功能。例如:{小于10=5次,小于20=1次,小于30=2次},count=7次,sum=7次的求和值。

4、Summary

Summary和Histogram十分相似,常用于跟踪事件发生的规模,例如:请求耗时、响应大小。同样提供 count 和 sum 全部值的功能。例如:count=7次,sum=7次的值求值。
它提供一个quantiles的功能,可以按%比划分跟踪的结果。例如:quantile取值0.95,表示取采样值里面的95%数据。

八、部署环境

系统版本:CentOS Linux release 7.6.1810 (Core)
docker版本:Docker version 1.13.1
关闭防火墙 systemctl stop firewalld.service
禁止防火墙开机自启 systemctl disable firewalld.service
关闭selinux
sed -i ‘s/SELINUX=enforcing /SELINUX=disabled/g’ /etc/selinux/config
重启系统即可 reboot

九、部署主机

监控主机:192.168.189.2(Prometheus+Grafana)
被监控主机:192.168.189.5(node-exporter)

十、部署方式

方式一:使用docker镜像部署
方式二:使用二进制源码部署
==注:本文使用docker镜像部署。==

十一、部署Prometheus

1、下载镜像包

docker pull prom/node-exporter
docker pull prom/prometheus
docker pull grafana/grafana

2、创建prometheus挂载目录

mkdir /opt/prometheus

3、创建prometheus配置文件

vi /opt/prometheus/prometheus.yml
 global:
   scrape_interval:    15s
   evaluation_interval: 15s
 scrape_configs:
   - job_name: prometheus
    static_configs:
      - targets: ['localhost:9090']
        labels:
          instance: centos7
   - job_name: grafana
    static_configs:
      - targets: ['192.168.189.2:9100']
        labels:
        instance: centos7

==注:这里的IP:189.2就是本地localhost本地IP,因为为了实验方便,将prometheus和grafana搭建在同一个服务器上了。==

4、安装docker

yum -y install docker

5、启动docker并设置开机自启

systemctl start docker
systemctl enable docker

6、启动prometheus

docker run  -d \
-p 9090:9090 \
-v /opt/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml  \
prom/prometheus

WeChat91e98054b11e893687208fece84d8f0a.png

7、查看端口状态

netstat -antupl |grep 9090
WeChatf9462c370e0641f7a2136e87d1c6dc43.png

8、访问地址

http://192.168.189.2:9090/
WeChatf00ad774079f9f6307731f9adacf02e0.png

十二、部署grafana

1、创建挂载数据目录

mkdir /opt/grafana-storage

2、设置权限

chmod 777 -R /opt/grafana-storage
==注:因为这个文件需要写入所以要给一定的权限,这里为了方便测试给777,具体权限要根据具体实际情况而定。==

3、启动grafana

docker run -d \
-p 3000:3000 \
--name=grafana \
-v /opt/grafana-storage:/var/lib/grafana \
grafana/grafana

4、查看端口状态

netstat -antupl | grep 3000

5、访问地址

http://192.168.189.2:3000/login
WeChate4c566352f47156374438e044fad2e6b.png
==注:默认账号密码都是admin==

十三、部署node-exporter

1、启动node-exporter

docker run -d -p 9100:9100 \
-v "/proc:/host/proc:ro" \
-v "/sys:/host/sys:ro" \
-v "/:/rootfs:ro" \
--net="host" \
prom/node-exporter

2、查看端口状态

netstat -antupl | grep 9100

3、访问网址

http://192.168.189.2:9100/
WeChat781e759d706285f28306277852ce6d32.png

十四、添加监控节点

主机IP192.168.189.5

1、安装docker

yum -y install docker

2、启动docker并设置开机自启

systemctl start docker
systemctl enable docker

3、被监控主机安装node-exporter

//下载镜像

docker pull prom/node-exporter

//安装并启动镜像
docker run -d -p 9100:9100 \
-v "/proc:/host/proc:ro" \
-v "/sys:/host/sys:ro" \
-v "/:/rootfs:ro" \
--net="host" \
prom/node-exporter

5、修改prometheus配置文件

主机IP:192.168.189.2


cat /opt/prometheus/prometheus.yml
global:
  scrape_interval:     15s
  evaluation_interval: 15s
scrape_configs:
  - job_name: prometheus
    static_configs:
      - targets: ['localhost:9090']
        labels:
          instance: centos7
  - job_name: grafana
    static_configs:
      - targets: ['192.168.189.2:9100']
        labels:
          instance: centos7
  - job_name: harbor
    static_configs:
      - targets: ['192.168.189.5:9100']
        labels:
          instance: centos7

6、重启prometheus

docker restart aee4834494e
WeChatd7aa2c5603f1c5878a5f8ff47bc067d5.png

7、测试

//网页登录prometheus
WeChat3cf0dbf7ecf2715a6110d0a9b5a85d72.png
//点击Status下拉选项,选择Targets。
WeChat5dae0d6bddc2f5f8ba05df7b3f0e347e.png
//如下图说明添加监控节点已完成
WeChatc1cd23c2dabee731aa79449d666f52cb.png

十五、添加监控模版

1、添加数据源

//网页登陆grafana

WeChata32fb38ce84b672005aef330c4577907.png

//点击左侧中间设置键添加数据源

WeChat5ee3a90385bc3425afdb26b453841928.png

//点击Add data source

WeChat34262e515aab4b191e259f10bf8c342b.png

//点击prometheus

WeChat61a0f2499fd9a7b23c79870de4961e85.png

//设置名字和IP地址

WeChatec885367a12fd46416a55d863dbedf19.png
WeChat5cf5ac7ccab79d61381ed119613f82fb.png
==注:如上图点击Save & Test,如果出现绿色的,说明ok了。==

2、添加模版

//点击左上角+号

WeChat673fa3742f0e316013bd1b4412ebc2ea.png

//点击Import

WeChatc8fd8d1f7cae26b1066cfbba44c13ee2.png

//点击输入ID号或者上传json文件(二选一即可)

WeChat7e7268e79b0d63ea39f53623df3afd54.png

//点击右侧load

WeChat345fd40012d6a47c532d64ad9d18be67.png

//选择数据源点击Import导入模版

WeChat04968c0a6a9b0772172704824b179643.png

//最终显示成果

WeChatb896e5dad8dbc0edb93e2ab5c031c88d.png

++推荐参考博客:https://blog.csdn.net/qq_45392321/article/details/122762420++