1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| #!/bin/bash
LOG_DIR=/log mkdir -p "$LOG_DIR"
TS=$(date '+%F %T') TS_EPOCH=$(date +%s) LOG_FILE="$LOG_DIR/sys_stat_$(date '+%F').csv"
if [ ! -f "$LOG_FILE" ]; then echo "timestamp,epoch,load1,load5,load15,cpu_usage,mem_usage,disk_usage,cpu_temp,top_cpu_proc,top_cpu_pct,top_mem_proc,top_mem_pct" >> "$LOG_FILE" fi
read load1 load5 load15 <<< $(uptime | awk -F'load average:' '{print $2}' | tr -d ',')
cpu_usage=$(top -bn1 | awk '/Cpu\(s\)/{printf "%.2f", 100-$8}')
mem_usage=$(free | awk '/Mem/{printf "%.2f", $3/$2*100}')
disk_usage=$(df -h / | awk 'NR==2{gsub("%","");print $5}')
cpu_temp=$(sensors 2>/dev/null \ | awk '/\+?[0-9]+(\.[0-9]+)?°C/ { gsub("[+°C]","",$2); print $2; exit }')
read top_cpu_proc top_cpu_pct <<< $(ps -eo comm,%cpu --sort=-%cpu | awk 'NR==2{print $1,$2}')
read top_mem_proc top_mem_pct <<< $(ps -eo comm,%mem --sort=-%mem | awk 'NR==2{print $1,$2}')
echo "$TS,$TS_EPOCH,$load1,$load5,$load15,$cpu_usage,$mem_usage,$disk_usage,$cpu_temp,$top_cpu_proc,$top_cpu_pct,$top_mem_proc,$top_mem_pct" >> "$LOG_FILE"
|