Linux服务器巡检与维护教程_批量检查与自动化处理

12次阅读

linux服务器巡检需系统覆盖资源、服务、安全、日志四大维度,通过脚本批量采集6项关键指标,分级自动响应异常,并工程化分层管理脚本,同时规避时间不同步、权限硬编码等常见坑。

Linux服务器巡检与维护教程_批量检查与自动化处理

linux服务器巡检不是“看看有没有报错”就完事,而是要系统性地覆盖资源、服务、安全、日志四大维度,并通过脚本批量执行、定时固化,才能真正防患于未然。核心在于:可重复、可验证、可追溯。

一、关键指标批量采集:5分钟跑完一台,100台也能一键拉取

shell脚本+ssh免密+for循环实现多机并行检查,避免逐台登录。重点采集以下6项(每项一行,便于后续grep或导入表格):

  • CPU负载:uptime | awk ‘{print $10,$11,$12}’ —— 关注15分钟负载是否持续>CPU核数×0.7
  • 内存使用率:free -m | awk ‘/Mem:/ {printf “%.1f%%”, $3/$2*100}’ —— 超90%需查进程或swap是否启用
  • 根分区使用率:df -h / | awk ‘NR==2 {print $5}’ —— 超85%触发告警,注意/var/log、/tmp是否异常膨胀
  • 关键服务状态:systemctl is-active sshd nginx mysql 2>/dev/NULL | paste -s -d’ ‘ —— 返回“active active active”才正常
  • 最近失败登录:lastb -n 10 2>/dev/null | wc -l —— 非零值需立即查/var/log/secure
  • 内核日志错误:dmesg -T | tail -20 | grep -i “Error|fail|warn” | wc -l —— 不为0时提取完整日志段落

二、自动化处理:发现异常后不只“发邮件”,而是分级响应

巡检结果不能只邮箱里。建议按严重程度自动执行动作:

  • 中低风险(如磁盘86%、某服务重启成功):自动清理临时文件(find /tmp -mtime +7 -delete)、重启对应服务(systemctl restart nginx),并记录到巡检日志
  • 高风险(如root用户被暴力破解、OOM killer触发、/var/log满):立即封禁可疑IP(iptables -I input -s xxx.xxx.xxx.xxx -j DROP)、压缩归档日志(tar -czf /backup/logs_$(date +%F).tar.gz /var/log/*.log)、发送企业微信/钉钉告警(用curl调用webhook)
  • 所有操作必须留痕:每条自动命令前加echo “$(date): [ACTION] 重启nginx” >> /var/log/auto-maintain.log

三、巡检脚本工程化:从“能跑”到“好维护”

别把所有逻辑写在一个.sh里。推荐分层结构:

  • config.conf:定义目标主机列表、阈值(DISK_WARN=85)、通知方式、保留日志天数
  • check_lib.sh封装通用函数,如get_cpu_load()、is_service_up()、send_alert()
  • main.sh:读配置、遍历主机、调用函数、汇总输出html报告(可用echo+cat生成简易表格)
  • crontab -e 添加:0 3 * * * /opt/check/main.sh >> /var/log/check_daily.log 2>&1 —— 每天凌晨3点执行

四、避坑指南:这些细节决定巡检是否真有用

很多团队脚本写了却失效,问题常出在:

  • 时间同步没做:多台服务器时间差>5分钟,日志分析会错乱 —— 用chronyd统一NTP源
  • 权限硬编码:脚本里写root密码或sudo免密,违反最小权限原则 —— 改用专用运维账号+ssh key+sudoers白名单授权特定命令
  • 没验证修复效果:自动重启nginx后不curl -I http://localhost检查返回码 —— 加上if ! curl -s -o /dev/null -w “%{http_code}” http://localhost | grep -q “200”; then echo “Restart failed”; fi
  • 忽略历史趋势:只看当前值,不存历史数据 —— 每次巡检结果追加到csv,用gnuplot或grafana画趋势图,早发现缓慢恶化
text=ZqhQzanResources