请用 Shell 编写一个脚本,实现对服务器磁盘使用率的监控,并在使用率超过阈值时自动发送告警邮件。
考察说明
考查候选人对 Shell 脚本、系统监控命令和邮件告警流程的掌握程度。
回答思路
- 【回答框架 1】磁盘使用率检查通常使用 df 命令,例如 df -h 或 df -P。脚本中可以通过 df -P 获取挂载点信息,避免换行问题。使用 awk 提取使用率列(通常第5列),去掉百分号后与阈值(如80%)比较。
- 【回答框架 2】告警逻辑可先检查磁盘使用率是否超过阈值,若超过则准备邮件内容,包括时间、主机名(hostname)、分区和当前使用率。发送邮件可选用 mail、sendmail 或 mutt,其中 mail -s 主题 收件人 方式较为常用。
- 【回答框架 3】脚本应定义关键变量,如阈值、收件人列表、邮件主题等,并支持通过参数或配置文件覆盖。需要处理多分区情况,遍历所有挂载点,并记录每个超过阈值的分区。
- 【回答框架 4】为防止告警风暴,可加入去重机制,例如记录上次告警时间,或使用临时文件保存已知状态。同时考虑脚本的定时执行,通过 cron 定期运行。
- 【关键点 1】使用 df -P 并解析输出,提取使用率列,避免本地文件系统(如 tmpfs)干扰。
- 【关键点 2】比较逻辑用数字比较,去掉百分号后使用 -gt 判断。
- 【关键点 3】邮件发送失败时的错误处理与日志记录。
- 【关键点 4】合理设置阈值,默认可设为80%,具体按容量和业务调整。
- 【易错点 1】直接使用 df -h 可能因长分区名换行导致解析错误,应用 df -P。
- 【易错点 2】未处理邮件发送失败或命令不存在的情况。
- 【易错点 3】忽略临时文件系统(如 /proc、tmpfs)可能产生误报。