72 lines
1.7 KiB
Bash
72 lines
1.7 KiB
Bash
#!/bin/bash
|
|
# Status Panel Agent
|
|
# 用法: ./agent.sh <服务器地址> <密钥>
|
|
|
|
SERVER="${1:-http://your-server:3800}"
|
|
SECRET="$2"
|
|
|
|
[ -z "$SECRET" ] && echo "Usage: $0 <server> <secret>" && exit 1
|
|
|
|
# 获取CPU使用率
|
|
get_cpu() {
|
|
local idle=$(top -bn1 | grep "Cpu(s)" | awk '{print $8}' | cut -d'%' -f1)
|
|
[ -z "$idle" ] && idle=$(top -bn1 | grep "%id" | awk '{print $8}')
|
|
echo "scale=1; 100 - $idle" | bc 2>/dev/null || echo "0"
|
|
}
|
|
|
|
# 获取内存
|
|
get_mem() {
|
|
local mem=$(free -b | grep Mem)
|
|
echo "$(echo $mem | awk '{print $3}'),$(echo $mem | awk '{print $2}')"
|
|
}
|
|
|
|
# 获取磁盘
|
|
get_disk() {
|
|
local disk=$(df -B1 / | tail -1)
|
|
echo "$(echo $disk | awk '{print $3}'),$(echo $disk | awk '{print $2}')"
|
|
}
|
|
|
|
# 获取网络流量
|
|
get_net() {
|
|
local net=$(cat /proc/net/dev | grep -E 'eth0|ens|enp' | head -1)
|
|
echo "$(echo $net | awk '{print $2}'),$(echo $net | awk '{print $10}')"
|
|
}
|
|
|
|
# 获取负载
|
|
get_load() {
|
|
cat /proc/loadavg | awk '{print $1","$2","$3}'
|
|
}
|
|
|
|
# 获取运行时间
|
|
get_uptime() {
|
|
cat /proc/uptime | awk '{print int($1)}"
|
|
}
|
|
|
|
while true; do
|
|
cpu=$(get_cpu)
|
|
mem=(${(get_mem)//,/ })
|
|
disk=(${(get_disk)//,/ })
|
|
net=(${(get_net)//,/ })
|
|
load=(${(get_load)//,/ })
|
|
uptime=$(get_uptime)
|
|
|
|
curl -s -X POST "$SERVER/report" \
|
|
-H "Content-Type: application/json" \
|
|
-d "{
|
|
\"secret\": \"$SECRET\",
|
|
\"cpu\": $cpu,
|
|
\"mem_used\": ${mem[0]},
|
|
\"mem_total\": ${mem[1]},
|
|
\"disk_used\": ${disk[0]},
|
|
\"disk_total\": ${disk[1]},
|
|
\"net_in\": ${net[0]},
|
|
\"net_out\": ${net[1]},
|
|
\"uptime\": $uptime,
|
|
\"load1\": ${load[0]},
|
|
\"load5\": ${load[1]},
|
|
\"load15\": ${load[2]}
|
|
}" > /dev/null 2>&1
|
|
|
|
sleep 30
|
|
done
|