基础说明
- 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
标签:node,seconds,bytes,Micrometer,Prometheus,jvm,memory,100
From: https://www.cnblogs.com/cheyunhua/p/18374215