|
|
|
#!/bin/bash
|
|
|
|
|
|
|
|
# 定义脚本路径
|
|
|
|
SCRIPT_PATH="/opt/monitor.sh"
|
|
|
|
CRON_LOG="/var/log/monitor.log"
|
|
|
|
|
|
|
|
# 创建 monitor.sh 文件
|
|
|
|
(
|
|
|
|
cat <<EOF
|
|
|
|
#!/bin/bash
|
|
|
|
|
|
|
|
# 定义API的URL
|
|
|
|
API_URL="https://lh.admin.yu2le.com/api/monitor/server/upload"
|
|
|
|
|
|
|
|
# 获取系统性能信息的函数
|
|
|
|
get_system_performance() {
|
|
|
|
# 获取CPU使用率
|
|
|
|
CPU_USAGE=\$(top -bn1 | grep "Cpu(s)" | awk '{print \$2 + \$4}')
|
|
|
|
|
|
|
|
# 获取内存使用率
|
|
|
|
MEMORY_USAGE=\$(free | grep Mem | awk '{print \$3/\$2 * 100.0}')
|
|
|
|
|
|
|
|
# 获取磁盘使用率
|
|
|
|
DISK_USAGE=\$(df -h | grep '^/dev/' | grep -v 'boot' | awk '{print \$5}' | tr -d '%' | paste -sd+ | bc)
|
|
|
|
|
|
|
|
# 获取系统连接数
|
|
|
|
CONNECTION_COUNT=\$(netstat -an | grep ESTABLISHED | wc -l)
|
|
|
|
|
|
|
|
# 获取前10进程的内存详情,使用 "fg9527" 分隔符
|
|
|
|
MEMORY_INFO=\$(ps aux --sort=-rss | head -n 11 | awk 'NR==1 {print "USERfg9527PIDfg9527MEMORY(M)fg9527COMMAND"; next} {cmd=""; for(i=11;i<=NF;i++) cmd=cmd\$i" "; printf "%sfg9527%sfg9527%.2fMfg9527%s\n", \$1, \$2, \$6/1024, cmd}' | tr '\n' ';')
|
|
|
|
|
|
|
|
# 获取前10进程的CPU详情,使用 "fg9527" 分隔符
|
|
|
|
CPU_INFO=\$(ps aux --sort=-%cpu | head -n 11 | awk 'NR==1 {print "USERfg9527PIDfg9527CPU(%)fg9527COMMAND"; next} {cmd=""; for(i=11;i<=NF;i++) cmd=cmd\$i" "; printf "%sfg9527%sfg9527%.2f%%fg9527%s\n", \$1, \$2, \$3, cmd}' | tr '\n' ';')
|
|
|
|
|
|
|
|
# 生成 JSON 格式数据,转义双引号
|
|
|
|
MEMORY_INFO=\$(echo "\$MEMORY_INFO" | sed 's/"/\\"/g')
|
|
|
|
CPU_INFO=\$(echo "\$CPU_INFO" | sed 's/"/\\"/g')
|
|
|
|
|
|
|
|
# 生成 ip
|
|
|
|
IP=\$(hostname -I | awk '{print \$1}')
|
|
|
|
# 构建JSON数据
|
|
|
|
echo "{\"cpu_usage\": \"\${CPU_USAGE}\", \"memory_usage\": \"\${MEMORY_USAGE}\", \"disk_usage\": \"\${DISK_USAGE}\", \"connection_count\": \"\${CONNECTION_COUNT}\", \"memory_info\": \"\${MEMORY_INFO}\", \"cpu_info\": \"\${CPU_INFO}\", \"localip\": \"\${IP}\"}"
|
|
|
|
}
|
|
|
|
|
|
|
|
# 获取当前系统性能数据
|
|
|
|
DATA=\$(get_system_performance)
|
|
|
|
|
|
|
|
echo \$DATA
|
|
|
|
|
|
|
|
# 使用curl将数据上传到指定的API
|
|
|
|
curl -X POST -H "Content-Type: application/json" -d "\$DATA" --insecure "\$API_URL"
|
|
|
|
EOF
|
|
|
|
) > $SCRIPT_PATH
|
|
|
|
|
|
|
|
# 设置脚本执行权限
|
|
|
|
chmod +x $SCRIPT_PATH
|
|
|
|
|
|
|
|
# 添加定时任务
|
|
|
|
(crontab -l 2>/dev/null; echo "*/1 * * * * $SCRIPT_PATH >> $CRON_LOG 2>&1") | crontab -
|
|
|
|
|
|
|
|
# 确保 cron 服务已启动
|
|
|
|
systemctl enable cron
|
|
|
|
systemctl restart cron
|
|
|
|
|
|
|
|
$SCRIPT_PATH
|
|
|
|
|
|
|
|
echo "Monitor setup completed." |
...
|
...
|
|