Prometheus基础语句

 2024-05-14    0 条评论    437 浏览

Prometheus

基础说明

  • prometheus界面刚开始看起来非常让人疑惑,实际上它的语法非常强大;
  • prometheus既可以读取即使数据(Table),也可以展示趋势图(Graph);
  • Use local time:选择是否已当前时间展示趋势图

查询结构

筛选
内置命令{筛选条件1,筛选条件2}
时间周期内总和
(increase(内置命令[5m]))
固定时间内平均值
avg_over_time(内置命令{筛选条件}[时间段])
将结果按照某个维度进行加合,例如 instance
sum by(instance)(avg_over_time(内置命令{筛选条件}[时间段]))

基础语句

服务器

cpu5分钟内负载
node_load5
空闲内存
node_memory_MemFree_bytes
内存使用率
(node_memory_MemTotal_bytes - (node_memory_MemFree_bytes + node_memory_Buffers_bytes + node_memory_Cached_bytes)) / node_memory_MemTotal_bytes * 100 
磁盘使用百分比
((node_filesystem_size_bytes - node_filesystem_free_bytes) / node_filesystem_size_bytes)*100
TCP连接数
node_netstat_Tcp_CurrEstab
TCP WAIT

TCP关闭处于time-wait的链接数量

node_sockstat_TCP_tw
CPU使用时间详细信息
node_cpu_seconds_total

idle:CPU空闲状态

system:系统使用

user:用户使用

iowait:CPU等待磁盘读取花费的时间,也会直接用wait表示

idle + CPU总利用率 = 100%

一般system+user+idle+iowait 约等于100%

CPU利用率
100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)

解析

  • node_cpu_seconds_total{mode="idle"}:每个CPU的空闲时间
  • (rate(node_cpu_seconds_total{mode="idle"}[5m])):计算每个CPU空闲时间变化率(五分钟的维度)
  • avg by (instance)根据主机进行平均计算(应该是主机下多核CPU平均)
  • (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100):百分比形式计算CPU空闲率
  • 100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100):百分比形式计算CPU使用率
user对CPU的使用率

原理同上

(avg by(instance) (rate(node_cpu_seconds_total{mode="user"}[5m])) * 100)
system对CPU的使用率

原理同上

(avg by(instance) (rate(node_cpu_seconds_total{mode="system"}[5m])) * 100)

JVM

各种GC的次数
jvm_gc_pause_seconds_count
各种GC时常(秒)
jvm_gc_pause_seconds_sum
5分钟内各种GC次数
(increase(jvm_gc_pause_seconds_count[5m]))
5分钟内各种GC时间总和(秒)
(increase(jvm_gc_pause_seconds_sum[5m]))
20分钟内的minor GC(Yong GC)的次数
increase(jvm_gc_pause_seconds_count{action="end of minor GC"}[20m])
5分钟内major GC(FullGC)的次数
increase(jvm_gc_pause_seconds_count{action="end of major GC"}[5m])
已用各种JVM相关内存查看
jvm_memory_used_bytes
最大各种JVM相关内存查看
jvm_memory_max_bytes
计算各种内存使用率
(jvm_memory_used_bytes) * 100 / (jvm_memory_max_bytes)
JVM老年代利用率

这里筛选条件使用了通配符,是因为不同的垃圾回收器,对应的id是不同的

(jvm_memory_used_bytes{area="heap", id=~".*Old Gen"}) * 100 / (jvm_memory_max_bytes{area="heap", id=~".*Old Gen"})

G1:id=G1 Old Gen

默认的并行收集器:id="PS Old Gen"

其他等

JVM堆内存整体利用率
sum by(instance) (jvm_memory_used_bytes{area="heap"}) * 100 / sum by(instance) (jvm_memory_max_bytes{area="heap"})
元空间大小

最大与已用

jvm_memory_max_bytes{area="nonheap",id="Metaspace"}
jvm_memory_used_bytes{area="nonheap",id="Metaspace"}

注意,JVM启动命令未指定大小,则元空间无限大,获取值为 -1。命令参数如下

-XX:MetaspaceSize=68m :超过则触发Full GC

-XX:MaxMetaspaceSize=128m :设置最大值上限

元空间利用率
jvm_memory_used_bytes{area="nonheap",id="Metaspace"} * 100/jvm_memory_max_bytes{area="nonheap",id="Metaspace"}
JVM峰值线程
jvm_threads_peak_threads
JVM活跃线程
jvm_threads_live_threads
JVM活跃线程各种状态
jvm_threads_states_threads
  • terminated:终止状态,线程执行完毕或被stop操作。
  • timed-waiting:临时等待中,一般调用了sleep方法会维持这个状态,知道等待时间结束。
  • waiting:持久等待状态,一般调用了wait方法,线程进入无限等待状态中,直到被外部唤醒。
  • blocked:锁状态,线程等待锁的时候,处于这种状态。
  • new:新创建的线程。
  • runnable:正在运行的线程。
JVM守护线程
jvm_threads_daemon_threads