脚本监控 一键检测服务器状态和配置
嘿伙伴们!本次我要向各位展示一个实用的服务器状态监控脚本。这个小工具能让我们轻松洞察服务器的硬件配置和资源使用情况,让服务器管理变得前所未有地高效和透明。最棒的是,它对非root用户也同样友好!
脚本功能一览
这个脚本提供了以下功能:
- CPU信息检测:一探究竟,了解你的CPU型号、核心数、线程数、当前频率和额定频率。
- CPU使用率:特别为非root用户设计,我们采用了一个巧妙的计算规则:CPU使用率 = CPU当前频率 ÷ CPU额定频率。
- 内存信息:全面展示总内存、空闲内存、可用内存、缓冲区和缓存大小。
- 内存使用率:直观地计算并展示内存的使用情况。
- 磁盘使用情况:利用
df -h
命令,清晰展示文件系统的磁盘空间使用情况。 - 硬盘使用率:剔除
tmpfs
、cdrom
,专注于实际存储的文件系统使用率。 - 网络信息:详细展示网络接口的配置信息。
- 网络流量:实时监控网络接口的接收和发送字节数。
- 系统负载:一目了然地展示系统的平均负载。
如何使用脚本
使用这个脚本非常简单:
- 下载脚本:首先,创建
server_status.sh
文件,并复制这段代码
#!/bin/bash
LOG_FILE="server_status.log"
# 记录日志函数
function log {
echo "$1" | tee -a $LOG_FILE
}
# 从model name中提取额定CPU频率 (GHz)
function extract_max_freq {
model_name_line=$(grep -m 1 'model name' /proc/cpuinfo)
echo "$model_name_line" | grep -oP '\d+\.\d+(?=GHz)' | head -n 1
}
# 检测CPU信息
function get_cpu_info {
log "CPU信息:"
if [ -f /proc/cpuinfo ]; then
model_name=$(grep -m 1 'model name' /proc/cpuinfo)
cpu_cores=$(grep -m 1 'cpu cores' /proc/cpuinfo)
siblings=$(grep -m 1 'siblings' /proc/cpuinfo)
cpu_mhz=$(grep -m 1 'cpu MHz' /proc/cpuinfo | awk '{print $4 / 1000 " GHz"}')
log "$model_name"
log "$cpu_cores"
log "$siblings"
log "当前CPU频率: $cpu_mhz"
# 获取额定CPU频率
max_freq=$(extract_max_freq)
if [ -n "$max_freq" ]; then
log "额定CPU频率: $max_freq GHz"
else
log "无法提取额定CPU频率"
fi
# 检测虚拟化支持
if grep -q 'vmx\|svm' /proc/cpuinfo; then
log "虚拟化状态: 已启用"
else
log "虚拟化状态: 未启用"
fi
else
log "无法获取CPU信息"
fi
log ""
}
# 检测CPU使用率
function get_cpu_usage {
log "CPU使用率:"
if [ -f /proc/cpuinfo ]; then
current_freq=$(grep 'cpu MHz' /proc/cpuinfo | awk '{sum += $4} END {print sum / NR / 1000}') # 转换为GHz
max_freq=$(extract_max_freq)
if [ -n "$max_freq" ]; then
cpu_usage=$(awk "BEGIN {printf \"%.2f\", ($current_freq / $max_freq) * 100}")
log "$cpu_usage%"
else
log "无法计算CPU使用率,因为无法提取额定CPU频率"
fi
else
log "无法获取CPU使用率"
fi
log ""
}
# 检测内存信息
function get_memory_info {
log "内存信息:"
if [ -f /proc/meminfo ]; then
mem_total=$(grep MemTotal /proc/meminfo | awk '{print $2 / 1024 / 1024 " GB"}')
mem_free=$(grep MemFree /proc/meminfo | awk '{print $2 / 1024 / 1024 " GB"}')
mem_available=$(grep MemAvailable /proc/meminfo | awk '{print $2 / 1024 / 1024 " GB"}')
buffers=$(grep Buffers /proc/meminfo | awk '{print $2 / 1024 / 1024 " GB"}')
cached=$(grep ^Cached /proc/meminfo | awk '{print $2 / 1024 / 1024 " GB"}')
log "总内存: $mem_total"
log "空闲内存: $mem_free"
log "可用内存: $mem_available"
log "缓冲区: $buffers"
log "缓存: $cached"
else
log "无法获取内存信息"
fi
log ""
}
# 检测内存使用率
function get_memory_usage {
log "内存使用率:"
if [ -f /proc/meminfo ]; then
mem_total=$(grep MemTotal /proc/meminfo | awk '{print $2}')
mem_available=$(grep MemAvailable /proc/meminfo | awk '{print $2}')
mem_usage=$(awk "BEGIN {printf \"%.2f\", (($mem_total - $mem_available) / $mem_total) * 100}")
log "$mem_usage%"
else
log "无法获取内存使用率"
fi
log ""
}
# 检测磁盘使用情况
function get_disk_info {
log "磁盘使用情况:"
log "$(df -h)"
log ""
}
# 检测硬盘使用率
function get_disk_usage {
log "硬盘使用率:"
log "$(df -h | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $1 " " $5 }')"
log ""
}
# 检测网络信息
function get_network_info {
log "网络信息:"
log "$(ip -br a)"
log ""
}
# 检测网络流量
function get_network_traffic {
log "网络流量:"
for iface in $(ls /sys/class/net/ | grep -vE 'lo|bonding_masters'); do
if [ -d /sys/class/net/$iface/statistics ]; then
rx_bytes=$(cat /sys/class/net/$iface/statistics/rx_bytes)
tx_bytes=$(cat /sys/class/net/$iface/statistics/tx_bytes)
log "$iface 接收: $((rx_bytes / 1024)) KB 发送: $((tx_bytes / 1024)) KB"
fi
done
log ""
}
# 检测当前系统负载
function get_system_load {
log "系统负载:"
if [ -f /proc/loadavg ]; then
log "$(cat /proc/loadavg)"
else
log "无法获取系统负载"
fi
log ""
}
# 主程序
function main {
echo "服务器硬件配置及资源使用情况检测脚本" | tee $LOG_FILE
echo "--------------------------------------" | tee -a $LOG_FILE
get_cpu_info
get_cpu_usage
get_memory_info
get_memory_usage
get_disk_info
get_disk_usage
get_network_info
get_network_traffic
get_system_load
}
# 执行主程序
main
-
赋予执行权限:在终端中输入
chmod +x server_status.sh
,赋予脚本执行权限。
-
运行脚本:在终端中输入
./server_status.sh
,启动脚本。 -
查看日志:脚本会将所有检测结果记录到
server_status.log
文件中,供你随时查阅。
结语
这一套脚本是我们的得力助手,它不仅能够让我们快速了解服务器的硬件信息以及使用情况,还可以让我们注意到服务商有没有超开哦。