一命速通Prometheus+Grafana+Consul+VictoriaMetrics

发布于:2025-06-21 ⋅ 阅读:(15) ⋅ 点赞:(0)

Prometheus业务

搭建及使用

注意:优先看完提供的博客链接,可以快速了解该工具的功能及其搭建和使用。

  1. 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的启动状态

  1. 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

  1. 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


网站公告

今日签到

点亮在社区的每一天
去签到