在Linux服务器管理中,硬件监控是确保系统稳定运行的关键环节,通过编写自定义监控脚本,管理员可以实时掌握服务器的硬件状态,及时发现潜在问题并采取预防措施,本文将详细介绍如何编写一个功能完善的Linux服务器硬件监控脚本,涵盖监控指标、实现方法和优化建议。
监控核心指标
服务器硬件监控需重点关注以下核心指标:
- CPU状态:包括使用率、负载均衡、温度及核心频率。
- 内存使用:总内存、已用内存、空闲内存及交换分区使用情况。
- 磁盘健康:磁盘空间占用、I/O性能、SMART健康状态及剩余寿命。
- 网络状态:网络带宽利用率、丢包率及连接数。
- 硬件传感器:通过
lm-sensors
监控电压、风扇转速及温度传感器数据。
脚本实现步骤
环境准备
安装必要的工具包:
sudo apt install lm-sensors smartmontools sysstat -y # Debian/Ubuntu sudo yum install lm_sensors smartmontools sysstat -y # CentOS/RHEL
运行sensors-detect
配置硬件传感器,并启用sysstat
的sa1
和sa2
服务以收集历史数据。
脚本框架设计
脚本采用模块化设计,分为数据采集、阈值判断和告警输出三部分,以下为关键代码片段:
#!/bin/bash # 定义阈值 CPU_THRESHOLD=80 MEM_THRESHOLD=90 DISK_THRESHOLD=85 # CPU监控 cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1) if (( $(echo "$cpu_usage > $CPU_THRESHOLD" | bc -l) )); then echo "警告:CPU使用率${cpu_usage}%超过阈值${CPU_THRESHOLD}%" fi # 内存监控 mem_info=$(free -m | awk 'NR==2{printf "%s/%s/%s", $3,$2,$4}') mem_usage=$(free | awk 'NR==2{printf "%.2f", $3*100/$2}') if (( $(echo "$mem_usage > $MEM_THRESHOLD" | bc -l) )); then echo "警告:内存使用率${mem_usage}%超过阈值${MEM_THRESHOLD}%" fi # 磁盘监控 disk_info=$(df -h | awk '$NF=="/"{printf "%s %s", $5, $6}') disk_usage=$(df -h | awk '$NF=="/"{print $5}' | cut -d'%' -f1) if [ "$disk_usage" -gt "$DISK_THRESHOLD" ]; then echo "警告:根分区使用率${disk_usage}%超过阈值${DISK_THRESHOLD}%" fi
扩展功能
- 日志记录:将监控结果写入日志文件,便于后续分析。
- 邮件告警:通过
mail
或mutt
命令发送告警邮件,需配置SMTP服务器。 - 可视化展示:结合
rrdtool
生成动态图表,直观展示历史趋势。
监控数据表格化输出
为提升可读性,可将监控结果整理为表格格式:
| 指标类型 | 当前值 | 阈值 | 状态 |
|—————-|————–|———|——–|
| CPU使用率 | 75.3% | 80% | 正常 |
| 内存使用率 | 92.1% | 90% | 警告 |
| 根分区使用率 | 87% | 85% | 警告 |
| 网络丢包率 | 0.05% | 1% | 正常 |
脚本优化建议
- 定时任务:通过
cron
设置定时执行,例如每5分钟运行一次:*/5 * * * * /path/to/monitor_script.sh >> /var/log/monitor.log 2>&1
- 参数化配置:将阈值和路径等参数提取至配置文件,便于维护。
- 多服务器支持:结合
SSH
和Ansible
实现集群统一监控。
编写Linux服务器硬件监控脚本需结合实际需求选择监控指标,通过模块化设计提升代码可读性,并利用日志和告警机制实现主动运维,合理配置阈值和定时任务,可及时发现硬件异常,避免服务中断,对于生产环境,建议结合专业监控工具(如Zabbix、Prometheus)实现更全面的管理,但自定义脚本在轻量级场景下仍具有灵活性和实用价值。