一、定时巡检通常要采集哪些信息¶
原始笔记里的巡检案例主要覆盖了下面几类系统信息:
- 主机名
- IP 地址
- 系统负载
- 内存与 Swap 使用情况
- 磁盘使用情况
- 进程总数、运行数、停止数、僵尸进程数
这些指标已经足够组成一个基础版的巡检脚本。
二、基础巡检脚本示例¶
下面是原始案例的核心思路整理版:
#!/bin/bash
# author: zq
# desc: 系统巡检脚本
# version: v1.0
mkdir -p /backup/
hostname=`hostname`
ip=`hostname -I`
load1=`uptime | awk -F '[ ,]+' '{print $(NF-2)}'`
load5=`uptime | awk -F '[ ,]+' '{print $(NF-1)}'`
load15=`uptime | awk -F '[ ,]+' '{print $NF}'`
mem_total=`free -m | awk 'NR==2{print $2}'`
mem_used=`free -m | awk 'NR==2{print $3}'`
mem_used_percent=`free -m | awk 'NR==2{print $3/$2*100"%"}'`
swap_total=`free -m | awk 'NR==3{print $2}'`
swap_used=`free -m | awk 'NR==3{print $3}'`
swap_used_percent=`free -m | awk 'NR==3{print $3/$2*100"%"}'`
export LANG=en_US.UTF-8
disk_count=`fdisk -l 2>/dev/null | grep '/dev/sd[a-z]:' | wc -l`
root_total_size=`df -h | awk '$NF=="/"{print $2}'`
root_used_percent=`df -h | awk '$NF=="/"{print $5}'`
proc_total=`top -bn1 | awk 'NR==2{print $2}'`
proc_running=`top -bn1 | awk 'NR==2{print $4}'`
proc_stopped=`top -bn1 | awk 'NR==2{print $(NF-3)}'`
proc_zombine=`top -bn1 | awk 'NR==2{print $(NF-1)}'`
三、把巡检结果定时写入文件¶
把脚本保存好后,例如:
/root/system_info.sh
加入定时任务:
$ crontab -e
00 01 * * * sh /root/system_info.sh > /backup/result-`date +%F`.txt 2>&1
这样每天凌晨 1 点都会生成一份巡检结果文件。
四、通过邮件发送巡检结果¶
4.1 开启邮箱的 POP3/SMTP 服务¶
原始案例使用的是 163 邮箱,需要先在邮箱后台开启 POP3/SMTP/IMAP 服务,并获取授权码。
4.2 配置 /etc/mail.rc¶
一种常见配置方式如下:
set nss-config-dir=/etc/pki/nssdb/
set smtp-use-starttls
set ssl-verify=ignore
set from=xiaozhang_vip123@163.com
set smtp=smtps://smtp.163.com:465
set smtp-auth-user=xiaozhang_vip123@163.com
set smtp-auth-password=OVBLHWCGDNNMKMPR
set smtp-auth=login
原始笔记也特别提到:未加密的 25 端口在公有云场景下经常会被限制,因此更推荐使用 SMTPS 465 端口。
4.3 发送带附件的邮件¶
$ mail -s '每日巡检结果' -a /backup/result-`date +%F`.txt 1904763431@qq.com
如果遇到证书错误,可以通过 openssl s_client 和 certutil 导入证书到 /etc/pki/nssdb/,再重新尝试发送。
五、把输出改成 CSV 报表¶
如果你希望结果更适合后续导入表格或做简单分析,可以把文本输出改成 CSV 风格。
5.1 改造思路¶
原始笔记的做法是:把原先用自然语言输出的内容改成“键,值”这种逗号分隔格式,例如:
echo "主机名,${hostname}"
echo "IP地址,${ip}"
echo "最近1分钟负载,${load1}"
5.2 生成 CSV 文件¶
$ sh system_info_pro.sh > /backup/result-`date +%F`.csv
这种方式虽然简单,但已经能很好满足轻量级巡检报表的需求。
六、这个巡检案例的价值¶
这个案例的核心不只是“收集几条系统信息”,而是展示了一条完整链路:
1、Shell 脚本采集系统指标 2、cron 定时执行脚本 3、输出落文件 4、结果可以邮件发送 5、结果还能转成 CSV 方便后续分析
这已经很接近实际工作中的基础巡检任务雏形。
七、小结¶
如果你准备自己写第一版 Linux 巡检脚本,建议按下面顺序推进:
- 先把基础信息采集跑通
- 再把脚本挂到 cron 里
- 然后决定结果是存文本、发邮件,还是导出 CSV
- 最后再逐步加阈值判断、异常告警和历史归档
这样从简单到复杂扩展,会比一开始就写成“大而全”的脚本更稳妥。