Prometheus原理以及Prometheus+Grafana部署

目录

一、Prometheus介绍

Ⅰ、特点

Ⅱ、工作原理

Ⅲ、Prometheus组件

二、进行安装

Ⅰ、Prometheus服务器部署

(1)Prometheus主配置文件

(2)配置系统服务

(3)浏览器访问Prometheus的web页面 

Ⅱ、agent/Prometheus服务器部署node_exporter

(1)启动node_exporter

(2)设置为系统服务开机自启

(3)Prometheus服务器添加被监控节点为target

Ⅲ、Grafana服务器部署

(1)部署Grafana

(2)浏览器访问Grafana

(3)定义数据源的数据展示

(4)Grafana模板


一、Prometheus介绍

Prometheus由Go语言编写而成,采用Pull方式获取监控信息,并提供了多维度的数据模型和灵活的查询接口。Prometheus不仅可以通过静态文件配置监控对象,还支持自动发现机制,能通过Kubernetes、Consl、DNS等多种方式动态获取监控对象。在数据采集方面,借助Go语音的高并发特性,单机Prometheus可以采取数百个节点的监控数据;在数据存储方面,随着本地时序数据库的不断优化,单机Prometheus每秒可以采集一千万个指标,如果需要存储大量的历史监控数据,则还支持远程存储。

Ⅰ、特点

提供多维度数据模型和灵活的查询方式,通过将监控指标关联多个tag,来将监控数据进行任意维度的组合,并且提供简单的PromQL查询方式,还提供HTTP查询接口,可以很方便地结合Grafana等GUI组件展示数据

在不依赖外部存储的情况下,支持服务器节点的本地存储,通过Prometheus自带的时序数据库,可以完成每秒千万级的数据存储;不仅如此,在保存大量历史数据的场景中,Prometheus可以对接第三方时序数据库和OpenTSDB等。

定义了开放指标数据标准,以基于HTTP的Pull方式采集时序数据,只有实现了Prometheus监控数据才可以被Prometheus采集、汇总、并支持Push方式向中间网关推送时序列数据,能更加灵活地应对多种监控场景

支持通过静态文件配置和动态发现机制发现监控对象,自动完成数据采集。Prometheus目前已经支持Kubernetes、etcd、Consul等多种服务发现机制

易于维护,可以通过二进制文件直接启动,并且提供了容器化部署镜像。

支持数据的分区采样和联邦部署,支持大规模集群监控

Ⅱ、工作原理

Prometheus Server负载定时在目标上抓取metrics(指标)数据,每个抓取目标都需要暴露一个HTTP服务接口用于Prometheus定时抓取。这种调用被监控对象获取监控数据的方式被称为Pull。Pull方式体现了Prometheus独特的设计哲学与大多数采用Push(推)方式的监控不同;

pull方式采集数据来源:

通过配置文件、文本等进行静态配置

支持Zookeeper、Consul、Kubernetes等方式进行动态发现,例如对Kuernetes的动态发现,Prometheus使用Kubernetes的API查询和监控容器信息的变化,动态更新监控对象,这样容器的创建和删除都可以被Prometheus感知

Storage通过一定的规则清理和整理数据,并把得到的结果从年初到新的时间序列中,这里存储的方式有两种:

1.本地存储。通过Prometheus自带的时序数据库将数据库数据保存在本地磁盘。但是本地存储的容量毕竟有限,建议不要保存超过一个月的数据

2.另一种是远程存储,适用于存储大量监控数据。通过中间层的适配器的转发,目前Prometheus支持OpenTsdb、InfluxDB、Elasticsearch等后端存储,通过适配器实现Prometheus存储的remote write和remote read接口,便可以接入Prometheus作为远程存储使用。

Prometheus通过PromQL和其他API可视化地展示收集的数据。Prometheus支持多种方式的图标可视化,例如Grafana、自带的PromDash及自身提供的模板引擎等。Prometheus还提供HTTP API查询方法,自定义所需要的输出

Prometheus通过Pull方式拉取数据,但某些现有系统是通过Push方式实现的,为了接入这些系统,Prometheus提供了对PushGateway的支持,这些系统主动推送metrics到PushGateway,而Prometheus只是定时去Gateway上抓取数据

Ⅲ、Prometheus组件

Prometheus由多个组件组成,但是其中许多组件是可选的;

Prometheus Server 用于抓取指标、存储时间序列数据
exporter 暴露指标让任务抓取
Pushgateway push的方式将指标数据推送到网关
alertmanager 处理报警的报警组件
adhoc 用于数据查询

说明:

(1)Prometheus server:服务核心组件,采用 pull 方式收集 apiserver、scheduler、controller-manager、kubelet 组件数据, 通过 http 协议传输。并存储时间序列数据。

(2)Exporters/Jobs:负责收集不支持Instrumentation的目标对象(host, container…)的性能数据,并通过 HTTP 接口供 Prometheus Server 获取。
●Node-Exporter:用于收集k8s集群中各node节点的物理指标状态数据,如平均负载、CPU、内存、磁盘、网络等资源信息的指标数据,需要部署到所有运算节点。

●Kube-State-Metrics:为prometheus采集k8s资源数据的exporter,通过监听APIServer收集kubernetes集群内资源对象的状态指标数据,例如pod、deployment、service等等。同时它也提供自己的数据,主要是资源采集个数和采集发生的异常次数统计。
需要注意的是kube-state-metrics只是简单的提供一个metrics数据,并不会存储这些指标数据,所以可以使用Prometheus来抓取这些数据然后存储,主要关注的是业务相关的一些元数据,比如Deployment、Pod、副本状态等;调度了多少个replicas?现在可用的有几个?多少个Pod是running/stopped/terminated状态?Pod重启了多少次?有多少job在运行中。

●cadvisor:用来监控容器内部使用资源的信息,比如 CPU、内存、网络I/O、磁盘I/O。

●blackbox-exporter:监控业务容器存活性。

(3)Service Discovery:服务发现,Prometheus支持多种服务发现机制:文件,DNS,Consul,Kubernetes,OpenStack,EC2等等。 基于服务发现的过程并不复杂,通过第三方提供的接口,Prometheus查询到需要监控的Target列表,然后轮训这些Target获取监控数据。

(4)Alertmanager:是一个独立的告警模块,从 Prometheus server 端接收到 alerts 后,会进行去重、分组, 并路由到相应的接收方,发出报警,常见的接收方式有:电子邮件,微信,钉钉等。

(5)Pushgateway:类似一个中转站,Prometheus 的 server 端只会使用 pull 方式拉取数据,但是某些节点因为某些原因只能使用 push 方式推送数据,那么它就是用来接收 push 而来的数据并暴露给 Prometheus 的 server 拉取的中转站。 可以理解成目标主机可以上报短期任务的数据到 Pushgateway,然后 Prometheus server 统一从 Pushgateway 拉取数据。

(6)Grafana:是一个跨平台的开源的度量分析和可视化工具,可以将采集的数据可视化的展示,并及时通知给告警接收方。其官方库中具有丰富的仪表盘插件。
 

二、进行安装

环境

IP 节点类型 所需组件
192.168.116.22 Prometheus服务器 Prometheus、node_exporter
192.168.116.23 agent服务器 nodex_exporter
192.168.116.25 grafana服务器 Grafana

Ⅰ、Prometheus服务器部署

Prometheus官方网址​​​​​​

Prometheus原理以及Prometheus+Grafana部署_第1张图片

进行下载Prometheus、node_exporter并将Prometheus压缩包丢入192.168.116.22(Prometheus服务器)进行解压缩

tar zxvf prometheus-2.37.0.linux-amd64.tar.gz -C /usr/local/
#解压
mv /usr/local/prometheus-2.37.0.linux-amd64/ /usr/local/prometheus
#改个名儿
cd /usr/local/prometheus
#进入目录
./prometheus --version
#查看版本信息

Prometheus原理以及Prometheus+Grafana部署_第2张图片

(1)Prometheus主配置文件

Prometheus配置文件位置

vim /usr/local/prometheus/prometheus.yml

Prometheus原理以及Prometheus+Grafana部署_第3张图片

当前环境主配置文件可不用更改

(2)配置系统服务

编辑Prometheus .service文件

vim /usr/lib/systemd/system/prometheus.service

[Unit]
Description=Prometheus Server
Documentation=https://prometheus.io
After=network.target
 
[Service]
Type=simple
ExecStart=/usr/local/prometheus/prometheus \
--config.file=/usr/local/prometheus/prometheus.yml \
--storage.tsdb.path=/usr/local/prometheus/data/ \
--storage.tsdb.retention=15d \
--web.enable-lifecycle
  
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
 
[Install]
WantedBy=multi-user.target

启动Prometheus

启动成功

(3)浏览器访问Prometheus的web页面 

访问Prometheus服务器IP:9090来访问Prometheus页面

Prometheus原理以及Prometheus+Grafana部署_第4张图片

 点击进入stats,点击TargetsPrometheus原理以及Prometheus+Grafana部署_第5张图片

 当前只监控了本机Prometheus原理以及Prometheus+Grafana部署_第6张图片

 访问http:// 服务器 IP:9090/metrics 可以查看到监控的数据

Prometheus原理以及Prometheus+Grafana部署_第7张图片

在主界面可以通过关键字查询监控项并以图标显示Prometheus原理以及Prometheus+Grafana部署_第8张图片

Ⅱ、agent/Prometheus服务器部署node_exporter

Exporter是Prometheus的指标数据收集组件。它负责从目标Jobs收集数据,并把收集到的数据转换为Prometheus支持的时序数据格式。 和传统的指标数据收集组件不同的是,他只负责收集,并不向Server端发送数据,而是等待Prometheus Server 主动抓取node-exporter 默认的抓取url地址:http://ip:9100/metrics 

解压缩node_exporter

tar zxvf node_exporter-1.4.0.linux-amd64.tar.gz -C /usr/local/bin/
#解压
mv /usr/local/bin/node_exporter-1.4.0.linux-amd64 /usr/local/bin/node_exporter
#改个名~

(1)启动node_exporter

nohup /usr/local/bin/node_exporter/node_exporter &

ss -natp | grep 9100

 访问本地IP:9100/metrics,显示如下表示开启成功 (被监控端的收集到的监控数据)

Prometheus原理以及Prometheus+Grafana部署_第9张图片

(2)设置为系统服务开机自启

vim /etc/systemd/system/node_exporter.service

[Unit]
Description=node_exporter Monitoring System
Documentation=node_exporter Monitoring System
 
[Service]
ExecStart=/usr/local/bin/node_exporter/node_exporter --web.listen-address=:9100
 
[Install]
WantedBy=multi-user.target

---wq

systemctl daemon-reload
systemctl enable --now node_exporter.service
systemctl status node_exporter.service

Prometheus原理以及Prometheus+Grafana部署_第10张图片

(3)Prometheus服务器添加被监控节点为target

Prometheus服务器(192.168.116.22)

进入Prometheus配置文件添加target

vim /usr/local/prometheus/prometheus.yml
#进入Prometheus安装目录下修改主配置文件

主要添加

#省略部分内容

scrape_configs:
#添加在该字段下

  - job_name: 'server'
    static_configs:
      - targets: ['localhost:9100']


  - job_name: 'agent'
    static_configs:
      - targets: ['192.168.116.23:9100']

--wq

systemctl restart prometheus.service

重启完Prometheus后对浏览器上的http://Prometheus服务器IP:9090进行刷新

Prometheus原理以及Prometheus+Grafana部署_第11张图片

 监控目标agent和server添加成功

Ⅲ、Grafana服务器部署

下载网址:

https://grafana.com/grafana/download/

Prometheus原理以及Prometheus+Grafana部署_第12张图片

(1)部署Grafana

安装命令:

wget https://dl.grafana.com/enterprise/release/grafana-enterprise-9.2.1-1.x86_64.rpm
sudo yum install grafana-enterprise-9.2.1-1.x86_64.rpm
systemctl enable --now grafana-server.service
ss -natp | grep grafana

(2)浏览器访问Grafana

浏览器访问http://Grafana服务器IP:3000进行访问,初始用户admin密码admin 

第一次登录进入后会让你设置新的密码,进入Grafana,点击DATA SOURCES添加数据源Prometheus原理以及Prometheus+Grafana部署_第13张图片

 选择PrometheusPrometheus原理以及Prometheus+Grafana部署_第14张图片

 

 

 添加成功的数据源查看

Prometheus原理以及Prometheus+Grafana部署_第15张图片

(3)定义数据源的数据展示

 

 定义显示内容

 给个名儿:agent(192.168.116.23服务器平均负载信息)

Prometheus原理以及Prometheus+Grafana部署_第16张图片

(4)Grafana模板

Grafana官方提供模板地址:Dashboards | Grafana Labs

可以点击这里import需要的模板,通过复制 ID

 通过复制的ID来部署使用模板到指定的数据源

Prometheus原理以及Prometheus+Grafana部署_第17张图片

你可能感兴趣的:(docker,运维,容器)