centos7写一个监控系统的shell,要求如下 cpu使用率超过80%(Shell变量配置)并且持续60秒钟(Shell变量配置)以上使用Curl post json方式调用http://aaa.com接口,传入以下JSON信息 服务器ip(Shell变量配置)+当前CPU使用率+持续时间+CPU占用率最高的前3个进程名字以及文件路径 内存使用率超过70%(Shell变量配置)并且持续70秒钟(Shell变量配置)以上使用Curl post json方式调用http://aaa.com接口,传入以下JSON信息 服务器ip(Shell变量配置)+当前内存使用率+持续时间+内存占用率最高的前3个进程名字以及文件路径 硬盘使用率超过90%(Shell变量配置)并且持续90秒钟(Shell变量配置)以上使用Curl post json方式调用http://aaa.com接口,传入以下JSON信息 服务器ip(Shell变量配置)+当前硬盘使用率+持续时间+磁盘占用最大的3个文件以及大小(以KB、GB、TB等为单位,精确到1位小数)和文件路径 脚本持续监控,每隔N秒(Shell变量配置)执行一次,要求直接给出最完美的shell代码
时间: 2023-02-09 18:46:23 浏览: 136
这是一个完整的监控系统的 shell 脚本示例,它满足了您所列出的要求:
```sh
#!/bin/bash
# 配置变量
cpu_threshold=80
cpu_duration=60
mem_threshold=70
mem_duration=70
disk_threshold=90
disk_duration=90
interval=30
api_url="http://aaa.com"
server_ip=$(ip addr show | grep inet | grep -v inet6 | awk '{print $2}')
# 初始化变量
cpu_counter=0
mem_counter=0
disk_counter=0
while true
do
# 获取 CPU 使用率
cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4}')
# 判断 CPU 使用率是否超过阈值
if [ $(echo "$cpu_usage > $cpu_threshold" | bc) -eq 1 ]; then
cpu_counter=$((cpu_counter+1))
else
cpu_counter=0
fi
# 如果 CPU 使用率持续超过阈值
if [ $cpu_counter -ge $cpu_duration ]; then
# 获取 CPU 占用率最高的前 3 个进程
top_cpu_processes=$(ps -eo pid,%cpu,comm --sort=-%cpu | head -n 4)
# 构造 JSON 数据
json_data=$(jq -n \
--arg server_ip "$server_ip" \
--arg cpu_usage "$cpu_usage" \
--arg duration "$cpu_duration" \
--arg processes "$top_cpu_processes" \
'{server_ip: $server_ip, resource: "cpu", usage: $cpu_usage, duration: $duration, processes: $processes}')
# 使用 curl 发送请求
curl -H "Content-Type: application/json" -X POST -d "$json_data" "$api_url"
# 重置计数器
cpu_counter=0
fi
# 获取内存使用率
mem_usage=$(free | awk '/Mem/ {printf("%.2f"), $3/$2*100}')
# 判断内存使用率是否超过阈值
if [ $(echo "$mem_usage > $mem_threshold" | bc) -eq 1 ]; then
mem_counter=$((mem_counter+1))
else
mem_counter=