Linux 系统状态监控实用指南
一 快速巡检命令
二 一键采集脚本
#!/usr/bin/env bash
# sysstat.sh - 一键采集 Linux 系统状态
set -o pipefail
# 工具检查
for c in top free vmstat iostat ip ss; do
command -v "$c" >/dev/null 2>&1 || { echo "缺少命令: $c"; exit 1; }
done
# 基本
echo "===== 基本信息 ====="
echo "时间: $(date '+%F %T')"
echo "主机: $(hostname)"
echo "内核: $(uname -r)"
echo "负载: $(uptime | awk -F'load average:' '{print $2}')"
# CPU 利用率(top 批处理模式)
echo -e "\n===== CPU 利用率 ====="
cpu_line=$(top -b -n 1 | awk -F',' '/Cpu\(s\):/ {print $1; exit}')
set -- $cpu_line
us=$(echo "$1" | tr -d ' %us') sy=$(echo "$2" | tr -d ' %sy') \
ni=$(echo "$3" | tr -d ' %ni') id=$(echo "$4" | tr -d ' %id') \
wa=$(echo "$5" | tr -d ' %wa') hi=$(echo "$6" | tr -d ' %hi') \
si=$(echo "$7" | tr -d ' %si')
echo "us=${us}% sy=${sy}% ni=${ni}% id=${id}% wa=${wa}% hi=${hi}% si=${si}%"
# 负载
echo -e "\n===== 负载平均值 ====="
read -r load1 load5 load15 < <(uptime | awk -F'load average:' '{gsub(/,/,"",$2); print $2; gsub(/,/,"",$3); print $3; gsub(/,/,"",$4); print $4}')
echo "1min=${load1} 5min=${load5} 15min=${load15}"
# 内存
echo -e "\n===== 内存与交换 ====="
free -h | awk '/Mem:/ {printf "总量=%s 已用=%s 可用=%s 缓存=%s\n",$2,$3,$7,$6}'
swapon -s | awk 'NR>1 {printf "交换: %s 大小=%s 已用=%s\n",$1,$2,$3}'
# 磁盘 I/O
echo -e "\n===== 磁盘 I/O ====="
iostat -x 1 2 | awk '
BEGIN {first=1}
/Device/ {if (!first) print ""; first=0; printf "%-10s %8s %8s %8s %8s %8s\n","设备","rrqm/s","wrqm/s","r/s","w/s","%util"}
$1 !~ /Device/ && $1 ~ /^[a-z]+/ {printf "%-10s %8.1f %8.1f %8.1f %8.1f %8.1f\n",$1,$2,$3,$4,$5,$14}'
# 磁盘使用
echo -e "\n===== 磁盘使用率 ====="
df -h | awk '$NF=="/"{printf "根分区: 已用=%s 可用=%s 使用率=%s\n",$3,$4,$5}'
# 网络接口
echo -e "\n===== 网络接口 ====="
ip -4 -o addr show | awk '{printf "接口: %s 地址: %s\n",$2,$4}'
# 网络连接
echo -e "\n===== 网络连接 ====="
ss -s | head -n 1
# 可选:按进程查看占用
echo -e "\n===== 占用最高的 5 个进程(CPU) ====="
ps -eo pid,ppid,cmd,%cpu --sort=-%cpu | head -n 6
三 进阶可视化与告警
四 面向 FetchLinux 的排查与监控