监控CPU的使用情况案例
1 统计各个节点CPU的使用率
1.1 我们需要先找到CPU相关的KEY

1
node_cpu_seconds_total

1.2 过滤出CPU的空闲时间({mode=‘idle’})和全部CPU的时间(‘{}’)

1
node_cpu_seconds_total{mode='idle'}

过滤CPU的空闲时间。

1
2
node_cpu_seconds_total{}
此处的'{}'可以不写,因为里面没有任何参数,代表获取CPU的所有状态时间。

1.3 统计1分钟内CPU的增量时间

1
increase(node_cpu_seconds_total{mode='idle'}[1m])

统计1分钟内CPU空闲状态的增量。

1
increase(node_cpu_seconds_total[1m])

统计1分钟内CPU所有状态的增量。

1.4 将结果进行加和统计

将1分钟内所有CPU空闲时间的增量进行加和计算。

1
sum(increase(node_cpu_seconds_total{mode='idle'}[1m]))

将1分钟内所有CPU空闲时间的增量进行加和计算。

1
sum(increase(node_cpu_seconds_total[1m]))

1.5 按照不同节点进行分组

将1分钟内所有CPU空闲时间的增量进行加和计算,并按照机器实例进行分组。

1
sum(increase(node_cpu_seconds_total{mode='idle'}[1m])) by (instance)

将1分钟内所有CPU空闲时间的增量进行加和计算,并按照机器实例进行分组。

1
sum(increase(node_cpu_seconds_total[1m])) by (instance)

1.6 计算1分钟内CPU空闲时间的百分比

1
sum(increase(node_cpu_seconds_total{mode='idle'}[1m])) by (instance) / sum(increase(node_cpu_seconds_total[1m])) by (instance)

1.7 统计1小时内CPU的使用率,计算公式: (1 - CPU空闲时间的百分比) * 100%。

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

1.8 统计1分钟内CPU的使用率,计算公式: (1 - CPU空闲时间的百分比) * 100%。

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

image-20241123101647287

2 计算CPU用户态的1分钟内百分比

sum(increase(node_cpu_seconds_total{mode='user'}[1m])) by (instance) / sum(increase(node_cpu_seconds_total[1m])) by (instance) * 100

3 计算CPU内核态的1分钟内百分比

(sum(increase(node_cpu_seconds_total{mode='system'}[1m])) by (instance) / sum(increase(node_cpu_seconds_total[1m])) by (instance)) * 100

4 计算CPU IO等待时间的1分钟内百分比

(sum(increase(node_cpu_seconds_total{mode='iowait'}[1m])) by (instance) / sum(increase(node_cpu_seconds_total[1m])) by (instance)) * 100

以此添加以上2,3,4语法效果如下

image-20241123101831485

保存dashboard

image-20241123102158402

如何实现类似这样选择效果?

image-20241123102014754

grafana的变量定义

image-20241123102621980

image-20241123103440922

应用保存后再次查看这个dashboard

image-20241123103551574

==不过此时我们点击是没有效果的,因为我们之前写的promQL是直接写死的没有使用变量==

替换如下变量

1
2
3
4
5
6
7
8
9
10
11
(sum(increase(node_cpu_seconds_total{mode='iowait',instance="$myhost"}[1m])) by (instance) / sum(increase(node_cpu_seconds_total{instance="$myhost"}[1m])) by (instance)) * 100


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


(sum(increase(node_cpu_seconds_total{mode='system',instance="$myhost"}[1m])) by (instance) / sum(increase(node_cpu_seconds_total{instance="$myhost"}[1m])) by (instance)) * 100


sum(increase(node_cpu_seconds_total{mode='user',instance="$myhost"}[1m])) by (instance) / sum(increase(node_cpu_seconds_total{instance="$myhost"}[1m])) by (instance) * 100

image-20241123104039207

再次回到dashboard验证点击是否有变化(只验证了一个)

==很明显变化了==

recording

自定义变量类型

image-20241123105342511

dashboard备份

点击到模板的设置,选择json model

image-20241123111303063