前言:prometheus结合grafana可以观察到cpu使用率和系统负载的情况。但是如果针对突然高峰时期然后马上回落的情况,要对系统的进程的资源使用情况进行分析则有些无能为力。
根据业务的需要,我这边写了shell脚本用来抓取在单个进程使用cpu超过阈值时就会将这个超过cpu阈值的进程抓取下来。这样针对瞬间的资源使用占满,然后又马上回落到正常值的情况也可以抓出是哪个业务进程有问题了
#!/bin/bash
# Author Wake
# 获取当前时间
current_time=$(date +"%Y-%m-%d %H:%M:%S")
# 定义输出文件路径
output_file="/home/wake/tools/top-output.txt"
# 运行top命令获取CPU使用情况,并使用awk筛选出CPU使用率大于50的进程
# 然后将结果写入到一个临时文件中
top -b -n 1 | awk 'NR>7 && $9 > 30 { print $0 }' > $output_file
# 判断临时文件是否存在并且不为空
if [ -s $output_file ]; then
# 如果临时文件存在且不为空,则将内容追加到日志文件中
echo "CPU使用率超过30的进程 $current_time:" >> /home/wake/tools/cpu-usage.log
cat $output_file >> /home/wake/tools/cpu-usage.log
fi
# 删除临时文件
rm $output_file
有时候系统负载也会达到顶峰然后又很快回落,这时候也可以用shell脚本抓取当时候的top信息,以便可以知道当时进程的资源使用情况
#!/bin/bash
# Author Wake
# 获取当前时间
current_time=$(date +"%Y-%m-%d %H:%M:%S")
# 定义输出文件路径
output_file="/home/wake/tools"
loadavg=`uptime | awk '{print $10}' | cut -f 1 -d ","`
# 运行top命令获取CPU使用情况,并使用awk筛选出CPU使用率大于50的进程
# 然后将结果写入到一个临时文件中
if [[ $(echo "$loadavg > 10" | bc -l) == 1 ]]; then
top -b -n 1 > $output_file/cpuload-output.txt
#echo "CPU heavily loaded. Saving top output to file."
fi
# 判断临时文件是否存在并且不为空
if [ -s $output_file/cpuload-output.txt ]; then
# 如果临时文件存在且不为空,则将内容追加到日志文件中
echo "cpu 负载高于10 $current_time:" >> $output_file/cpuload.log
cat $output_file/cpuload-output.txt >> $output_file/cpuload.log
# 删除临时文件
rm $output_file/cpuload-output.txt
fi
评论区