CPU 平均负载 + 如何获得 X 小时历史记录的 CPU 平均负载

yae*_*ael 2 cpu top uptime

我们都知道我们可以得到平均 CPU 负载为:

 uptime
 10:09:22 up 2 days,  1:44,  1 user,  load average: 20.01, 20.03, 22.05
Run Code Online (Sandbox Code Playgroud)

但这仅显示

load average over the last 1 minute is 22.05
load average over the last 5 minute is 20.03
load average over the last 15 minute is 20.01
Run Code Online (Sandbox Code Playgroud)

我们想要一个过去 X 小时的平均负载列表。是否有任何 Linux(我们正在使用 RHEL)命令可以显示过去 X 小时的平均 CPU 负载历史记录?

mar*_*raf 7

您需要为此安装其他软件。您可以使用sar(参见https://linux.die.net/man/1/sar)或您选择的监控系统。

sar -q 将报告负载平均值(除其他外...)

$ sar -q 1 5
Linux 4.9.0-9-amd64 (sds-ulm-edv-553-workstation)   09/10/2019  _x86_64_    (2 CPU)

02:04:43 PM   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15   blocked
02:04:44 PM         0       158      0.00      0.02      0.10         0
02:04:45 PM         0       158      0.00      0.02      0.10         0
02:04:46 PM         0       158      0.00      0.02      0.10         0
02:04:47 PM         0       158      0.00      0.02      0.10         0
02:04:48 PM         0       158      0.00      0.02      0.10         0
Average:            0       158      0.00      0.02      0.10         0
Run Code Online (Sandbox Code Playgroud)

最后一行Average:在这里可能很有趣?

您可以为此提供一个文件:sar -q -f /var/log/sa/fileofyourchoice然后进一步处理输出的第 4-6 列。

要快速了解“这里发生了什么?”,您可能需要一些图形表示。 不幸的是,我不知道如何sar通过 GNUplot(或将它提供给 grafana...)或类似的东西来生成有用的东西。

好吧,这让我很痒:-)

生成数据文件...

LANG=C sar -q 1 250 | grep ':' | awk '{ print $1,$4,$5,$6 }' | sed '1d;$d' > datafile.txt
Run Code Online (Sandbox Code Playgroud)

找到最大值:

$ datamash -t ' ' max 2 max 3 max 4 < datafile.txt 
2.53 1.55 1.1
$ head -1 datafile.txt | cut -d' ' -f1
20:20:53
$ tail -1 datafile.txt | cut -d' ' -f1
20:25:02
Run Code Online (Sandbox Code Playgroud)

现在创建一个文件plotting,在那里你会需要这些值xrangeyrange

$ cat plotting 
set title "Load over time"
set xdata time
set style data lines
set term png
set timefmt "%H:%M:%S"
set format x "%H:%M:%S"
set xlabel "Time"
set ylabel "Load"
set autoscale y
set xrange ['20:20:53':'20:25:02']
set yrange ['-0.01':'2.6']
set xtics rotate
set output "load_over_time.png"
plot "datafile.txt" using 1:2 t "loadavg-1" w lines, "datafile.txt" using 1:3 t "loadavg-5" w lines, "datafile.txt" using 1:4 t "loadavg-15" w lines
Run Code Online (Sandbox Code Playgroud)

现在您可以使用$ gnuplot < plotting `生成图形

现在你有一个图表load_over_time.png

在此处输入图片说明

如果您有一个监控系统(例如 check_mk),那么获取您需要的历史记录就会容易得多。