目录
1.4 prometheusQL(数据查询语言也是时序数据库使用语言)
一、prometheus数据模型
1.1 概述
- prometheus仅用键值方式存储时序式的聚合数据,他不支持文本信息
- 从每个target中会采集出很多指标,那么每个指标会暴露很多样本数据点,而这些数据点pro都需要存储而这些指标会以固定时间间隔生成很多样本数据点,而如何标示这些样本数据点,则是数据模型学习的意义
①时序列标识:key+lables
②当前时间序列的样本值value
③这些标签可以作为过滤器进行指标过滤及聚合运算,如何从上万的数据过滤出关键有限的时间序列,同时从有限的时间序列在特定范围的样本那就需要手动编写出时间序列的样本表达式来过滤出我们需求的样本数据
1.2 指标类型
- 默认都是以双精度浮点型数据(服务端无数据量类型数据–类型是对客户端有意义的)
①counter : 计数器单调递增
②gauge:仪表盘:有起伏特征的
③histogram:直方图(统计的概念,做分位数统计):
在一段时间范围内对数据采样的相关结果,并记入配置的bucket中,他可以存储更多的数据,包括样本值分布在每个bucket的数量,从而iprometheus就可以使用内置函数进行计算:
计算样本平均值:以值得综合除以值的数量
计算样本分位值:分位数有助于了解符合特定标准的数据个数,例如评估响应时间超过1秒的请求比例,若超过20%则进行告警等
④summary(统计数据),摘要,histogram的扩展类型,它是直接由监控端自行聚合计算出分位数,同时将计算结果响应给prometheus server的样本采集请求,因而,其分位数计算是由监控端完成
计数器:单调递增 仪表盘:起伏特征 直方图:平均数或分位值 sumamary(统计数据)
1.3 作业job和实例targets/instance
- job:能够接收prometheus server数据scrape ;两种job:“mysql_nodes" “mysql_master_slave”,每一种job会分开进行拉取数据以及展示数据
- targets:每一个可以被监控的系统,成为targets多个相同的targets的集合(类)称为job
- instance:实例与targets(类似)
与target相比,instance更趋近于一个具体可以提供监控数据的实例,而targets则更像一个对象、目标性质
targets 与 instance区别:都代表了被监控端可以吐出监控数据的被监控端这个对象,tagers更倾向于是一个集合,instance更倾向于具体的被监控端
1.4 prometheusQL(数据查询语言也是时序数据库使用语言)
- 支持两种向量,同时内置提供了一组用于数据处理的函数,来对样本数据进行基础的分析(Ai算法、机器学习、深度学习来分析、预测系统之后的运行走势)
①即时向量:最近以此时间戳上跟踪的数据指标(一个时间点上的所有数据)
即时向量选择器:返回0个1个或者多个时间序列上在给定时间戳上的各自的一个样本,该样本成为即时样本
②时间范围向量:指定时间范围内所有时间戳上的数据指标
范围向量选择器:返回0个1个或多个时间序列上在给定时间范围内的各自的一组样本(范围向量选择器无法用于绘图)
二、prometheus数据模块
global:全局配置
altermanager configuration:告警模块(通过prometheusQL+布尔值表达式产生告警信息)
rules
scrape
三、表达式浏览器(promQL过滤使用)
表达式浏览器常规使用
在prometheusUI控制台上可以进行数据过滤
简单的用法:
- CPU使用总量
node_cpu_seconds_total
- 计算过去5分钟内的CPU使用速率
PromQL: irate(node_cpu_seconds_total{cpu="0",mode="idle"}[5m])
irate:速率计算函数(灵敏度非常高)
node_cpu_seconds_total:node节点CPU使用总量(指标)
modd="idle"空闲指标
5m:过去的5分钟内,所有CPU空闲数的样本值,每个数值做速率运算
{ mode=“idle”}:整体称为标签过滤器
- 每台主机CPU在5分钟内的平均使用率
PromQL:(1-avg(irate(node_cpu_seconds_total{cpu="0",mode="idle"}[5m]))by(instance))*100
avg:平均值
avg (irate (node_cpu_seconds_total{fmode=‘idle’ } [5m]):可以理解为CPU空闲量的百分比
by (instance):表示的是所有节点
- 查询1分钟平均负载超过主机CPU数量两倍的时间序列
node_load1 > on (instance) 2 * count (node_cpu_seconds_total{mode='idle'})by (instance)
node_load5
node_load15
1、5、15分钟的cpu负载
一般来说以上的值不能长时间大于CPU核心数量
- 内存使用率
node_memory_MemTotal_bytes
node_memory_MemFree_bytes
node_memory_Buffers_bytes
node_memory_Cached_ bytes
计算使用率:
可用空间:以上后三个指标之和
己用空间:总空间减去可用空间
使用率:己用空间除以总空间
四、部署service discovery服务发现
4.1 Prometheus指标抓取的生命周期
-
隐藏敏感数据 整合多个标签,来进行单个自定义指标数据的输出
-
发现——> 配置 ——> relabel(配置定义/服务自身执行)——> 指标数据抓取——> metrics relabel(自定义)
Prometheus的服务发现(基于文件、DNS、consul、k8s等各种主流的服务发现总线)
#默认:static_config : 静态配置形式的服务发现
①基于文件的服务发现;
(定义一组资源"子"配置文件yaml格式 里面只存方需要采集的targets 信息,此种方式可以被pro动态获取到,而不需要重启)
②基于DNS的服务发现;
③基于API的服务发现:Kubernetes、Consul、Azure、重新标记
-
target重新打标
-
metric重新打标
④基于K8s的服务发现
4.2 prometheus 服务发现机制
- Prometheus Server的数据抓取工作于Pull模型,因而,它必需要事先知道各Target的位置,然后才能从相应的Exporter或Instrumentation中抓取数据
- 对于小型的系统环境来说,通过static_dpnfigs指定各Target便能解决问题,这也是最简单的配置方法;每个Targets用一个网络端点(ip:port)进行标识;
- 对于中大型的系统环境或具有较强动态性的云计算环境来说,静态配置显然难以适用;因此,Prometheus为此专门设计了一组服务发现机制,以便于能够基于服务注册中心(服务总线)自动发现、检测、分类可被监控的各Target,以及更新发生了变动的Target指标抓取的生命周期
- 在每个scrape_interval期间,Prometheus都会检查执行的作业(Job);这些作业首先会根据Job上指定的发现配置生成target列表,此即服务发现过程;服务发现会返回一个Target列表,其中包含一组称为元数据的标签,这些标签都以" meta_"为前缀;
- 服务发现还会根据目标配置来设置其它标签,这些标签带有"“前缀和后缀,b包括"scheme”、 " address"和" metrics path_",分别保存有target支持使用协议(http或https,默认为http) 、 target的地址及指标的URI路径(默认为/metrics) ;
- 若URI路径中存在任何参数,则它们的前缀会设置为" param"这些目标列表和标签会返回给Prometheus,其中的一些标签也可以配置中被覆盖;
- 配置标签会在抓取的生命周期中被重复利用以生成其他标签,例如,指标上的instance标签的默认值就来自于address标签的值;
- 对于发现的各目标,Prometheus提供了可以重新标记(relabel)目标的机会,它定义在job配置段的relabel_config配置中,常用于实现如下功能
-
以上的8条——>详细版的prometheus工作生命周期
-
将来自服务发现的元数据标签中的信息附加到指标的标签上
-
过滤目标(会利用于重打标签机制上):
之后便是数据抓取,以及指标返回的过程,抓取而来的指标在保存之前,还允许用户对指标重新打标过滤的方式
它定义在job配置段的metric_relabel_configs配置中,常用于实现如下功能#册删除不必要的指标
从指标中册删除敏感或者不需要的标签
添加、编辑或者修改指标的标签值或标签格式
4.3 静态配置发现
- 修改prometheus服务器上的配置为文件,指定targets的端口上面配置过
- job_name: 'nodes'
static_config:
- targets:
-192.168.80.2:9100
-192.168.80.3:9100
-192.168.80.4:9100
4.4 动态发现
①基于文件服务发现
192.168.80.1
基于文件的服务发现仅仅略优于静态配置的服务发现方式,它不依赖于任何平台或第三方服务,因而也是最为简单和通用的实现方式。prometheus server定期从文件中加载target信息(pro-server pull指标发现机制-job_name
获取我要pull的对象target)文件可以只用json和yaml格式,它含有定义的target列表,以及可选的标签信息,以下第一配置,能够将prometheus默认的静态配置转换为基于文件的服务发现时所需的配置;(rometheus会周期性的读取、重载此文件中的配置,从而达到动态发现、更新的操作)
[root@prometheus files_sd]# cat prometheus.yml
# my global config
# Author: MageEdu <mage@magedu.com>
# Repo: http://gitlab.magedu.com/MageEdu/prometheus-configs/
global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
# scrape_timeout is set to the global default (10s).
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
file_sd_configs:
- files:
- targets/prometheus_*.yaml
refresh_interval: 2m
# All nodes
- job_name: 'nodes'
file_sd_configs:
- files:
- targets/nodes_*.yaml
refresh_interval: 2m
[root@prometheus targets]# cat nodes_centos.yaml
- targets:
- 192.168.80.2:9100
- 192.168.80.3:9100
labels:
app: node-exporter
job: node
[root@prometheus targets]# cat prometheus_server.yaml
- targets:
- 192.168.80.1:9090
labels:
app: prometheus
job: prometheus
指定yml文件启动
[root@prometheus prometheus-2.27.1.linux-amd64]# ./prometheus --config.file=./files_sd/prometheus.yml
五、总结
5.1 指标类型
计数器:单调递增
仪表盘:起伏特征
直方图:平均数或分位值
sumamary(统计数据)
5.2 作业job和实例targets/instance
①job:能够接收prometheus server数据scrape ;两种job:“mysql_nodes" “mysql_master_slave”,每一种job会分开进行拉取数据以及展示数据
②指标(配置文件/promql) : targets 与 instance区别:都代表了被监控端可以吐出监控数据的被监控端这个对象,tagers偏向于表示一个集合,instance偏向于表示具体的一个可提供监控数据的对象
PromQL : 指标 {标签1=标签值1,......标签N=标签值N} 样本(值)
5.3 prometheusQL两种向量
①即时向量:表示的是一个时间刻度
②时间范围向量:表示的是一组时间区间
③即时向量选择器:在指定的时间戳上的数值(称之为即时向量样本)
④范围向量选择器:在一组时间区间内的0或1或多个数值(范围向量样本)
支持多种即时向量组合形式,不支持多种时间范围向量组合形式
5.4 prometheus的配置文件
①global:全局配置 ②altermanager :告警模块 ③rules ④scrape(服务发现)
5.5 prometheus架构模型(工作流程)
crape收集数据方式:①exporter ②自建/内建指标 ③pushgateway
服务发现:①基于fd文件 ②基于DNS——>SRV记录 ③基于consul——>自动发现,同时利用prometheus的自身周期扫描配置文件更新项并加载的特性,实现动态更新 ④基于k8s服务发现