当前位置: 首页 > news >正文

Prometheus使用

介绍:Prometheus 是一个开源的 监控与告警系统,主要用于采集和存储时间序列数据(Time Series Data)

Prometheus的自定义查询语言PromQL

Metric类型

为了能够帮助用户理解和区分这些不同监控指标之间的差异,Prometheus定义了4中不同的指标类型(metric type):Counter(计数器)、Gauge(仪表盘)、Histogram(直方图)、Summary(摘要)

1、Counter:只增不减的计数器

计数器是一种只增不减(除非重置)的累加值,适合用来记录某些事件发生的总次数。

特点: 值只能递增(或重置为 0)、 常用于统计单调递增的指标。

场景:HTTP 请求总数(如 http_requests_total)、已处理任务的总数、 错误发生的总次数、用户访问量

# 查询总数:
http_requests_total
# 计算速率(每秒请求数)
rate(http_requests_total[5m])

2、Gauge:可增可减的仪表盘

Gauge 是一种值可以上下波动的数据类型,适合用来表示某些瞬时状态值。

特点:值可以增大或减小、适合表示当前状态,例如资源使用情况。
场景:当前内存使用量(如 memory_usage_bytes)、当前 CPU 使用率(如 cpu_usage_percentage)、当前并发连接数、磁盘使用量、内存使用量

3、Histogram和Summary分析数据分布情况

Histogram和Summary主用用于统计和分析样本的分布情况

实践

Prometheus函数

rate函数

rate函数 是专门搭配 counter 函数使用的
功能:按照设置一个时间段,取counter在这个时间段中的 平均每秒的增量。
node_network_receive_bytes_total即网络接受字节数为例,这个就是counter类型。这个counter被rate函数包上以后 就可以获取在1分钟之内,平均每秒的增量了即 rate( node_network_receive_bytes_total[1m])

increase函数

在 Prometheus 中,increase() 函数用于计算给定时间窗口内一个计数器的增量。它计算的是时间序列在指定时间范围内的增量(变化量),即数据点的“增加”部分。与 rate() 不同,increase() 更侧重于计算累计量的增长,而不是每秒的速率。

语法

increase(<metric>[<range>])
<metric>Prometheus 中的一个计数器指标,比如 node_cpu_seconds_total。
<range>:时间范围,用来定义增量的计算范围,常见的时间范围单位有 1m(1 分钟)、5m(5 分钟)、1h(1 小时)等。

举例:
increase(node_cpu_seconds_total{mode="idle"}[1m])为例。
计算过去 1 分钟内 node_cpu_seconds_total 的增量,也就是在这段时间内,CPU 空闲时间总共增加了多少秒。

时间(秒)node_cpu_seconds_total{mode=“idle”}
t15000
t25050

t1 时,CPU 空闲时间累计为 5000 秒。
t2 时,CPU 空闲时间累计为 5050 秒。
如果你计算 increase(node_cpu_seconds_total{mode="idle"}[1m]),则计算的是过去 1 分钟内 node_cpu_seconds_total 增长的部分
increase(node_cpu_seconds_total{mode="idle"}[1m]) = 5050 - 5000 = 50 秒 这表示在过去 1 分钟内,CPU 空闲时间增加了 50 秒。

docekr安装prometheus

安装步骤

1、 拉取prometheus镜像
docler pull prom/prometheus
2、配置文件

global:
  scrape_interval: 15s
  evaluation_interval: 15s

alerting:
  alertmanagers:
  - static_configs:
    - targets:
      # - alertmanager:9093

rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
    - targets: ['localhost:9090']
  - job_name: 'node_exporter'
    static_configs:
    - targets: ['192.168.31.142:9100']
  - job_name: 'cloud'
    metrics_path: '/actuator/prometheus'
    scrape_interval: 5s
    static_configs:
    - targets: ['10.2.0.187:8080']

3、启动一个prometheus容器

docker run  -d --name prometheus -p 9090:9090 -v /Users/liuyuanyuan/docker/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus

4、mac 精准查找ip命令
ifconfig en0 | grep inet| awk ‘{print $2}’
5、访问地址
http://localhost:9090/
在这里插入图片描述

安装node-exporter

1、docker pull prom/node-exporter
2、运行容器

docker run -d --name node-exporter --restart=always -p 9100:9100 -v "/proc:/host/proc:ro" -v "/sys:/host/sys:ro" -v "/:/rootfs:ro" prom/node-exporter

3、访问地址
http://127.0.0.1:9100/metrics
在这里插入图片描述
说明成功。
4、配置到Prometheus中
记住mac要写的是ip地址(获取mac本机地址)ifconfig en0 | grep inet| awk '{print $2}'而不是localhost不然好像配置不生效

global:
  scrape_interval: 15s
  evaluation_interval: 15s

alerting:
  alertmanagers:
  - static_configs:
    - targets:
      # - alertmanager:9093

rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
    - targets: ['localhost:9090']
  - job_name: 'node_exporter'
    static_configs:
    - targets: ['192.168.31.142:9100']
  - job_name: 'cloud'
    metrics_path: '/actuator/prometheus'
    scrape_interval: 5s
    static_configs:
    - targets: ['10.2.0.187:8080']

加上之后我们看下内存使用率
node_memory_MemFree_bytes
在这里插入图片描述

node_cpu_seconds_total

解释:cpu使用率
第一个问题:时间增量
cpu底层是时间的累积。所以用Counter 刚好满足这个情况,其中increase()函数 在Prometheus 中 专门针对 Counter 这种持续增长的数值,截取其中一段时间的增量 increase(node_cpu[1m])这个意思就是 30分钟内 每1分钟就会对增量取一个值。这样就能获取cpu在1分钟内时间的增量了
第二个问题:实际工作中cpu都是多核
我们在实际中不关心每个cpu核而是看整个cpu表现,此时Prometheus有另一个函数sum() 对结果集加和 比如 sum( increase(node_cpu[1m]) ) 直接统计所有核数值累加

全部cpu时间:node_cpu_seconds_total
在这里插入图片描述

空闲cpu时间:node_cpu_seconds_total{mode="idle"}
在这里插入图片描述

空闲cpu1分钟的增量: increase(node_cpu_seconds_total{mode="idle"}[1m])
在这里插入图片描述

全部cpu1分钟的增量:sum(increase(node_cpu_seconds_total{mode="idle"}[1m]))
在这里插入图片描述

这里有个问题 他怎么变成1条线了?我们是多台服务器进行数据采集,因为sum函数的原因,sum函数他是把所有结果集全部加和了不光把每台机器的cpu核加一起了 还把所有机器的cpu核也加到一起了。最终变成 服务器集群总cpu平均高值了,这显然不是我们的效果。
怎么解决呢?引入函数 by (instance)
它可以按照结果集进行拆分 instance 就是按照机器拆分。
单台机器cpu1分钟的增量:(sum(increase(node_cpu_seconds_total[1m])) by (instance))
结果:
在这里插入图片描述
很明显你看到了左下角有机器分组了,你可以看上一个sum结果明显没有对结果集分组。
所以空闲的的1分钟时间增量:
(sum(increase(node_cpu_seconds_total{mode="idle"}[1m])) by (instance))
那么cpu利用率就知道了:

(1 - ((sum(increase(node_cpu_seconds_total{mode="idle"}[1m])) by (instance)) / 
      (sum(increase(node_cpu_seconds_total[1m])) by (instance)))) * 100

在这里插入图片描述

相关文章:

  • Java:Arrays类:操作数组的工具类
  • SQLMesh系列教程:SQLMesh虚拟数据环境
  • vue3 setup中访问全局变量还用加this吗。原来在组合式API中,需要用this.$loading。在setup中怎么用
  • 第1章:云原生时代:容器技术的发展历程与核心价值
  • 个人学习编程(3-19) leetcode刷题
  • Python 线程池
  • java-正则表达式-集合-泛型
  • VScode的debug
  • AUTOSAR与arxml的文档解析
  • 【Ratis】ratis-grpc支持零拷贝系列之引入ZeroCopyMessageMarshaller工具类
  • 【6】组合计数学习笔记
  • 2.FastAPI 中的路由与路径操作
  • Python中的字典:深度解析与应用实践
  • 破解验证码新利器:基于百度OCR与captcha-killer-modified插件的免费调用教程
  • 数据驱动进化:AI Agent如何重构手机交互范式?
  • CUDAOpenCV Hessain矩阵计算
  • 虚拟电商-延迟任务系统的微服务改造(二)
  • Linux内核Netfilter使用实战案例分析
  • 利用labelme进行图片标注
  • Redis BitMap 用户签到
  • 眉山“笑气”迷局:草莓熊瓶背后的隐秘与危机
  • 澎湃研究所“营商环境研究伙伴计划”启动
  • 全军军级以上单位新任纪委书记监委主任培训班结业
  • 鸿蒙概念股强势上涨,鸿蒙电脑本月正式发布,生态链即将补全
  • 虚构医药服务项目、协助冒名就医等,北京4家医疗机构被处罚
  • IPO周报|节后首批3只新股本周申购,色谱设备龙头来了