状态有:
[root@k8s-node1 ~]# curl localhost:9100/metrics | grep -i node_cpu 获取到CPU所有的标签
# TYPE node_cpu_guest_seconds_total counter #虚拟机的虚拟CPU不用管
node_cpu_guest_seconds_total{cpu="0",mode="nice"} 0
node_cpu_guest_seconds_total{cpu="0",mode="user"} 0
node_cpu_guest_seconds_total{cpu="1",mode="nice"} 0
node_cpu_guest_seconds_total{cpu="1",mode="user"} 0
# HELP node_cpu_seconds_total Seconds the cpus spent in each mode.
# TYPE node_cpu_seconds_total counter #当前主机的CPU,0,1两核
node_cpu_seconds_total{cpu="0",mode="idle"} 5347.26 #CPU0 的 空闲CPU
node_cpu_seconds_total{cpu="0",mode="iowait"} 12.29 #CPU0 的 io使用量
node_cpu_seconds_total{cpu="0",mode="irq"} 0
node_cpu_seconds_total{cpu="0",mode="nice"} 0.47
node_cpu_seconds_total{cpu="0",mode="softirq"} 2.89 #CPU0 的 中断请求
node_cpu_seconds_total{cpu="0",mode="steal"} 0
node_cpu_seconds_total{cpu="0",mode="system"} 59.93 #CPU0 的 系统使用量
node_cpu_seconds_total{cpu="0",mode="user"} 29.78 #CPU0 的 用户使用量
node_cpu_seconds_total{cpu="1",mode="idle"} 5341.86
node_cpu_seconds_total{cpu="1",mode="iowait"} 12.94 #CPU1 同理
node_cpu_seconds_total{cpu="1",mode="irq"} 0
node_cpu_seconds_total{cpu="1",mode="nice"} 0.47
node_cpu_seconds_total{cpu="1",mode="softirq"} 2.7
node_cpu_seconds_total{cpu="1",mode="steal"} 0
node_cpu_seconds_total{cpu="1",mode="system"} 60.49
node_cpu_seconds_total{cpu="1",mode="user"} 33.22
此处显示的是 node_exporter 针对 CPU 使用情况的所有 key/value 数据。
对 CPU 使用情况进行统计,就是从这些CPU 的 key 当中进行计算,提取,形成统计图。
在prometheus 中,用来针对 Counter 这种持续增长的数值,截取其中一段时间的增量。配合时间使用
increase(node_cpu_seconds_total[1m]) 获取了CPU总使用时间在1分钟之内的增量
可以将所有的内容进行合并
by( ) 这个函数可以把 sum 合并到一起的数值,按照指定的方式进行拆分。( ) 内 填写它指定的方式
在当前案例,需要按照集群节点进行拆分。所以采用 instance=“机器名”,by(instance)。
空闲CPU使用时间 = node_cpu_seconds_total{mode=“idle”}
CPU总共使用时间 = node_cpu_seconds_total)
空闲CPU一分钟内的增量:increase(node_cpu_seconds_total{mode=“idle”}[1m])
全部CPU一分钟内的增量:increase(node_cpu_seconds_total**[1m]**)
集群所有主机空闲CPU一分钟内的增量:sum(increase(node_cpu_seconds_total{mode=“idle”}[1m]))
集群所有主机CPU全部使用情况一分钟内的增量:sum(increase(node_cpu_seconds_total[1m]))
问题:这个CPU监控 采集的是多台服务器的监控数据,怎么但是到了这一步变成了一条线。
原因:因为有sum()函数,默认情况下不管什么内容全部都会进行合并。不光是CPU的核心数,同时把机器也进行合并了。 此时计算的
解决:采用 by()函数,按照主机节点进行拆分,by(instance)
集群所有节点空闲CPU使用增量:sum(increase(node_cpu_seconds_total{mode=“idle”}[1m])) by(instance)
集群所有节点全部状态CPU使用增量:sum(increase(node_cpu_seconds_total[1m]))by(instance)
公式:节点非空闲CPU每分钟的增量 / 节点全部状态下CPU每分钟的增量 * 100= CPU每分钟的利用率
节点非空闲CPU每分钟增量 = 1 - 节点空闲CPU每分钟增量
1 - (sum(increase(node_cpu_seconds_total{mode=“idle”}[1m])) by(instance))
(1-(sum(increase(node_cpu_seconds_total{mode=“idle”}[1m]))by(instance)) / (sum(increase(node_cpu_seconds_total[1m]))by(instance))) *100
(sum(increase(node_cpu_seconds_total{mode='system'}[1m]))by(instance)) / (sum(increase(node_cpu_seconds_total[1m]))by(instance)) *100
(sum(increase(node_cpu_seconds_total{mode='user'}[1m]))by(instance)) / (sum(increase(node_cpu_seconds_total[1m]))by(instance)) *100
(sum(increase(node_cpu_seconds_total{mode='idle'}[1m]))by(instance)) / (sum(increase(node_cpu_seconds_total[1m]))by(instance)) *100