Prometheus业务
搭建及使用
注意:优先看完提供的博客链接,可以快速了解该工具的功能及其搭建和使用。
- prometheus+grafana
一、Prometheus+Grafana普罗米修斯,搭建和使用_普罗米修斯 grafana-CSDN博客
./prometheus --config.file=prometheus.yml --storage.tsdb.path=/data/prometheus
systemctl status node_exporter # 查看node_export的状态 启动:start、停止:stop、重启:enable
ps -elf|grep node_exporter # 查看node_export的进程状态,node_export可以进行替换
kill -9 1288 # 杀死某个进程 1288可以进行替换
#grafana安装
sudo yum install -y https://dl.grafana.com/enterprise/release/grafana-enterprise-12.0.1-1.x86_64.rpm
systemctl status grafana-server.service # 查看grafan的启动状态
systemctl status prometheus # 查看prometheus的启动状态
- Consul
consul学习与常用命令和使用教程_consul使用教程-CSDN博客
sudo systemctl status consul
Consul是一个服务注册和发现工具,在此处扮演的是代替Prometheus的yaml配置文件,由于原生yaml配置文件拉取node_export时候需要进行编写,实例过多的时候,不方便进行维护。因此统一使用consul进行注册,只需要yaml中配置一项即可。
// 添加服务注册 8.84是安装了node_exporter要注册的机器,157.17则是Consul安装的机器
curl -X PUT -d '{
"id": "B05-192.168.8.84",
"name": "federate-zpftest",
"address": "192.168.8.84",
"port": 6881,
"tags": [],
"meta": {
"group": "SA",
"mainName": "基础服务-运维",
"subName": "基础服务",
"appName": "Prometheus边缘节点",
"rule": "default"
},
"checks": [{"http": "http://192.168.8.84:6881/metrics","interval": "15s"}]
}' http://192.168.157.17:8500/v1/agent/service/register
// 删除服务 B05-192.168.8.84可替换
curl --request PUT http://192.168.157.17:8500/v1/agent/service/deregister/B05-192.168.8.84
- VictoriaMetrics
Victoriametrics单机版本地安装搭配Prometheus和grafana使用教程_victoriametrics安装-CSDN博客
sudo systemctl status victoriametrics # 查看vm的状态
victoria-metrics-prod -storageDataPath /var/lib/victoriametrics # 临时启动命令
/usr/local/bin/victoria-metrics-prod -httpListenAddr=0.0.0.0:8428 -storageDataPath=/data/victoria -retentionPeriod=30d & # 永久启动命令
上手指南
熟悉工具
第一步需要学会4个工具:Prometheus、Granfan、Consul、VictoriaMetrics,先从搭建与使用部分所提供的链接,在两台机器上完成单独的搭建与使用,自己模拟一下基本的常见操作。
要求:
Prometheus会拉取到node_exporter所提供的数据。
Granfan会将Prometheus的数据进行同步并正常展示+用户权限分配和添加删除。
Consul进行添加和删除服务注册。
VictoriaMetrics的 vmui界面能正常显示到Prometheus所上报的数据。
日常任务处理
这里的业务主要是给问道那边的人看,一般的问题是可能Granfan会没有数据,我们要进行排查,经验就是可能那个没有数据的Promethrus边缘节点服务可能挂掉了,去重新启动一下那个服务。如果多次挂掉,说明负载有问题,需要升级。
最后需要掌握Prometheus以及VM查询数据的方法,PromQL,短时间内可以让AI帮忙生成,但是依然建议个人进行学习并掌握。掌握后可以更加快速的进行排查问题所在。
创建用户及权限
进入Grafana的用户管理页面
PromQL语法
一、筛选时间序列
PromQL 的核心是通过「指标名称 + 标签匹配」定位时间序列,支持 瞬时向量(当前时间点数据) 和 范围向量(一段时间的数据)。
1. 瞬时向量查询(Instant Vector)
查询当前时间点的指标数据,结果是一组带标签的时间序列(每个序列对应一个最新样本)。
语法:
[指标名称]{[标签筛选条件]}
示例:
简单查询指标:
http_requests_total # 查询所有 http_requests_total 指标的当前值
带标签筛选(精确匹配):
http_requests_total{method="GET", status="200"} # 筛选 method=GET 且 status=200 的请求
正则匹配标签(=~ 包含,!~ 排除):
http_requests_total{status=~"2.."} # 匹配状态码以 2 开头(如 200、201)
http_requests_total{method!~"POST|PUT"} # 排除 POST 和 PUT 方法
2. 范围向量查询(Range Vector)
查询过去一段时间内的指标数据,结果包含时间窗口内的所有样本点(常用于计算速率、增量)。
语法:
[指标名称]{[标签筛选条件]}[时间范围] # 时间单位:s(秒)、m(分钟)、h(小时)、d(天)、w(周)、y(年)。
示例:
查询过去 5 分钟的所有样本:
http_requests_total{job="api"}[5m] # job=api 的请求,过去 5 分钟的所有数据点
结合正则筛选:
http_requests_total{status=~"5.."}[1h] # 状态码 5xx 的请求,过去 1 小时数据
3. 时间位移(Offset)
查询历史时间点的数据(非当前时间基准),常用于对比不同时段的指标。
语法:
[查询表达式] offset [时间范围]
示例:
查询 1 小时前的瞬时数据:
http_requests_total offset 1h # 当前时间 -1 小时的指标值
查询 1 天前的 5 分钟范围数据:
http_requests_total[5m] offset 1d # 1 天前的 5 分钟内的样本
二、运算符与逻辑处理
1. 数学运算符(+、-、*、/、%、^)
对指标值或查询结果进行数学计算,支持**标量(单个值)与向量(时间序列)** 运算。
示例:
转换单位(分 → 元):
bet_amount_total / 100 # 投注金额(分)转成元
多指标求和:
http_requests_total{api="/bet"} + http_requests_total{api="/login"} # 投注+登录请求总和
2. 布尔运算符(==、!=、>、<、>=、<=)
筛选满足条件的时间序列,或对值进行判断(需结合 bool 修饰符返回 0/1 结果)。
示例 1:过滤时间序列
node_cpu_seconds_total{mode="idle"} > 22000 # 筛选 CPU 空闲时间 >22000 的实例
示例 2:返回布尔结果(0/1)
http_requests_total{method="GET"} >= 1000 bool # 请求数≥1000 则返回 1,否则 0
3. 逻辑运算符(and、or、unless)
组合多个查询结果,按逻辑关系筛选时间序列。
示例:
交集(同时满足两个查询):
up{job="app"} and http_requests_total # 筛选 job=app 且有请求的实例
并集(满足任意一个查询):
up{job="app"} or up{job="db"} # job=app 或 job=db 的实例状态
三、核心函数:数据聚合与分析
1. 速率计算(Counter 类型专用)
针对单调递增指标(如请求数、错误数),计算每秒增长率(应对服务重启导致的计数器重置)。
rate(range-vector):平均速率(平滑计算,适合长期趋势)
rate(http_requests_total[5m]) # 过去 5 分钟的平均每秒请求数
irate(range-vector):瞬时速率(基于最后两个样本,对突发变化更敏感)
irate(http_requests_total[1m]) # 过去 1 分钟的瞬时每秒请求数
increase(range-vector):总增量(时间窗口内的累计增长值)
increase(node_network_receive_bytes_total[1h]) # 过去 1 小时网络接收总字节数
2. 聚合函数(sum、avg、max、min、count 等)
将多个时间序列按标签聚合,或计算统计值。
sum(metric) by (label):按标签求和
sum(rate(http_requests_total[5m])) by (job) # 按 job 分组,求各 job 的 QPS 总和
avg(metric) by (label):按标签求平均
avg(node_cpu_seconds_total{mode="idle"}) by (instance) # 按实例求 CPU 空闲时间的平均值
count(metric):统计时间序列数量
count(up == 1) # 统计状态为 up 的实例数量
3. 其他常用函数
delta(range-vector):计算时间窗口内的值变化量(适用于 Gauge 类型指标,如内存、温度)
delta(node_memory_MemFree_bytes[1h]) # 过去 1 小时内存空闲量的变化
topk(k, metric):取前 k 大的时间序列
topk(3, rate(http_requests_total[5m])) # 按 QPS 取前 3 的实例
四、实战场景示例
1. 监控 HTTP 请求 QPS(按方法分组)
sum(rate(http_requests_total[1m])) by (method)
2. 统计 CPU 使用率(按实例)
100 - (avg(irate(node_cpu_seconds_total{mode="idle"}[1m])) by (instance) * 100)
3. 筛选 5 分钟内错误率超过 5% 的服务
( sum(rate(http_requests_total{status=~"5.."}[5m]))
/
sum(rate(http_requests_total[5m]))
) > 0.05