``` #!/bin/bash
配置参数
cpu_threshold=80 cpu_duration=60 disk_threshold=90 disk_duration=90 memory_threshold=70 memory_duration=70 interval=10 ip="192.168.220.1" port="18181" path="/jeecg-boot/luodiye/sendMsg" url="http://$ip:$port$path"
监控函数
monitor() { local threshold=$1 local duration=$2 local resource=$3 local process=$4 local process_command="ps aux --sort=-%cpu | awk '{print $0" "NR}' | grep -v 'awk' | awk '$11>$threshold {print $0}' | head -3" local resource_command="awk '$1>$threshold {print $0}' /proc/stat | awk '{print $1}' | awk '{s+=$1} END {print s/4}'"
while :; do
local count=0
local process_name=''
local process_path=''
local resource_percent=0
local resource_percent_duration=0
while :; do
# 获取当前资源使用率
resource_percent=$(eval $resource_command)
if [ $(echo "$resource_percent > $threshold" | bc) -eq 1 ]; then
let count++
resource_percent_duration=$count
sleep 1
else
count=0
resource_percent_duration=0
fi
# 获取当前占用资源最高的前3个进程
process_name=$(eval $process_command | awk '{print $11}')
process_path=$(eval $process_command | awk '{print $12}')
# 超过阈值且持续时间超过设定值,发送请求
if [ $count -ge $duration ]; then
local data="{\"server_ip\":\"$(hostname -I)\",\"resource\":\"$resource\",\"resource_percent\":\"$resource_percent\",\"duration\":\"$resource_percent_duration\",\"process_name\":\"$process_name\",\"process_path\":\"$process_path\"}"
curl -H "Content-Type: application/json" -X POST -d $data $url
exit
fi
done
done
}
启动监控
monitor $cpu_threshold $cpu_duration "cpu" "ps aux --sort=-%cpu | awk '{print $0" "NR}' | grep -v 'awk' | awk '$11>$cpu_threshold {print $0}' | head -3" & monitor $disk_threshold $disk_duration "disk" "du -a / 2