Linux 巡检自动化 v1.0.0:单机、批量巡检与交付报告
文章目录10 节
这篇记录的是 linux-inspection-automation v1.0.0 的发布说明和现场使用方法。它不是替代监控平台,而是面向交付、巡检、排障前置检查这类场景,把 Linux 主机状态采集、阈值判断、证据记录和 HTML/JSON 报告打包到一个可复制的脚本流程里。
项目地址:
一、它解决什么问题
日常巡检里最容易出问题的不是单条命令不会敲,而是每台机器采集口径不一致、报告不可交付、远程批量执行缺少证据链。这个项目把这些动作收敛成两层入口:
linux-inspection-automation.sh:单机巡检入口,在当前 Linux 主机上采集并生成 HTML 或 JSON。tools/run-linux-inspection-automation.sh:批量巡检入口,在运维机上读取主机清单,通过系统ssh/scp分发脚本、执行巡检、下载报告并生成多主机总览。
当前版本主要包含:
- 单机 HTML 报告,适合人工阅读和交付。
- 单机 JSON 结果,适合平台解析或后续自动化处理。
- 策略化阈值配置,例如 CPU、内存、磁盘、inode、Swap、负载、文件句柄、连接数和证书有效期。
- 必需服务和必需端口检查。
- 批量巡检总览页、执行清单、传输日志和可归档压缩包。
- 只读采集为主,报告中的整改命令需要人工确认后执行。
二、目录结构
.
├── linux-inspection-automation.sh # 单机巡检入口
├── tools/
│ ├── run-linux-inspection-automation.sh # 批量巡检入口
│ └── build-fleet-overview.sh # 多主机总览生成器
├── configs/
│ ├── hosts.example.tsv # 主机清单示例
│ └── policy.example.conf # 策略配置示例
└── docs/
└── usage.md # 详细使用说明运行环境需要注意两点:
- 目标 Linux 主机需要 Bash 4.0 或以上版本。
- 远程批量模式依赖运维机可以执行系统自带的
ssh和scp。
如果在 macOS 上直接用系统 Bash 3.2 跑单机脚本,会被版本检查拦截。这是预期行为,脚本本身是给 Linux 主机执行的。
三、单机巡检
在目标 Linux 主机上进入项目目录后执行:
# 使用策略文件执行一次完整巡检,默认输出 HTML 报告
bash linux-inspection-automation.sh \
--config configs/policy.example.conf如果只是先快速看一遍状态,可以启用快速模式:
# 快速模式会跳过耗时项,例如大文件扫描、系统更新检查和 SSL 证书扫描
bash linux-inspection-automation.sh \
--fast \
--config configs/policy.example.conf需要把结果交给平台或脚本处理时,输出 JSON:
# -f json 指定输出 JSON
# -o 指定结果文件路径,可以替换为自己的落盘位置
bash linux-inspection-automation.sh \
-f json \
-o /tmp/linux_inspection_automation.json \
--config configs/policy.example.conf这里的 /tmp/linux_inspection_automation.json 只是示例路径。正式场景建议按批次、主机名和日期命名,避免不同主机的结果互相覆盖。
四、策略配置
策略文件是 Bash 变量格式,会被脚本 source,所以只应该使用可信配置文件。示例:
# CPU 使用率告警阈值,单位是百分比
CPU_WARN=80
# 内存使用率告警阈值,单位是百分比
MEM_WARN=85
# 文件系统空间使用率告警阈值,单位是百分比
DISK_WARN=85
# inode 使用率告警阈值,单位是百分比
INODE_WARN=85
# Swap 使用率告警阈值,单位是百分比
SWAP_WARN=50
# 负载阈值系数,通常按 CPU 核数乘以该系数判断
LOAD_WARN_FACTOR=2
# 文件句柄使用率告警阈值,单位是百分比
FD_WARN=80
# CLOSE_WAIT 连接数量阈值
CONN_CLOSE_WAIT_THRESHOLD=50
# SSL 证书剩余天数告警阈值
SSL_CERT_DAYS_WARN=30
# 忽略文件系统名称,常用于排除光驱、ISO、安装介质等只读设备
IGNORE_FS_REGEX='^/dev/sr[0-9]+$|^iso9660$'
# 忽略挂载点,常用于排除临时挂载目录或安装介质目录
IGNORE_MOUNT_REGEX='^/run/media/|^/media/|^/mnt/iso'
# 必需服务,多个服务用空格分隔;未安装、未识别或未运行都会进入待处理项
REQUIRED_SERVICES='sshd'
# 必需监听端口,多个端口用空格分隔
REQUIRED_PORTS='22'这些配置会影响报告中的告警、待处理项和整改建议。比如现场不希望 ISO 光驱 100% 使用率进入告警,就应该通过 IGNORE_FS_REGEX 或 IGNORE_MOUNT_REGEX 明确排除,而不是在报告出来后手工解释。
五、批量巡检清单
批量巡检使用 TSV 清单,字段顺序固定:
enabled name mode target address args字段含义:
enabled:1表示执行,0表示跳过。name:报告文件名中的主机别名,建议只使用字母、数字、短横线和下划线。mode:local或ssh。target:SSH 目标,例如root@10.0.0.11,也可以是~/.ssh/config中定义的主机别名;local模式填-。address:展示字段,可以填 IP 或主机名。args:追加给单机脚本的参数,常用--fast或其他跳过项。
示例清单:
# enabled name mode target address args
1 local-host local - 127.0.0.1 --fast
1 prod-app-01 ssh root@10.0.0.11 10.0.0.11 --fast
0 standby-01 ssh root@10.0.0.12 10.0.0.12 --fast实际文件必须使用 Tab 分隔。上面的空格只是为了阅读对齐,正式编辑时建议直接复制项目里的 configs/hosts.example.tsv 再改。
六、远程批量执行
基础命令:
# -i 指定主机清单
# --policy 指定统一策略文件,ssh 模式会自动上传到远端后使用
# --label 指定批次名称,会进入输出目录和报告文件名
# --timeout 是预留参数,当前 ssh 模式主要受 SSH 连接超时控制
tools/run-linux-inspection-automation.sh \
-i configs/hosts.example.tsv \
--policy configs/policy.example.conf \
--label lab-$(date +%Y%m%d_%H%M%S) \
--timeout 300如果要给所有主机追加快速模式:
# --args 会追加到每台主机的单机巡检参数后面
tools/run-linux-inspection-automation.sh \
-i configs/hosts.example.tsv \
--policy configs/policy.example.conf \
--args "--fast"正式执行前可以先 dry-run:
# 只打印将执行的目标,不上传、不远程执行、不下载报告
tools/run-linux-inspection-automation.sh \
-i configs/hosts.example.tsv \
--policy configs/policy.example.conf \
--dry-run需要自定义 SSH 端口、私钥或连接超时,有两种方式。优先推荐写进 ~/.ssh/config,清单里只保留主机别名,这样不容易把密钥路径写散。
也可以通过环境变量追加参数:
# ssh 指定端口使用小写 -p
export LINUX_INSPECTION_AUTOMATION_SSH_OPTS="-i /path/to/id_rsa -p 2222"
# scp 指定端口使用大写 -P
export LINUX_INSPECTION_AUTOMATION_SCP_OPTS="-i /path/to/id_rsa -P 2222"
# SSH 连接超时,单位是秒
export LINUX_INSPECTION_AUTOMATION_SSH_CONNECT_TIMEOUT=15/path/to/id_rsa、2222、15 都是现场值,需要按实际环境替换。非交互批量任务建议配置 SSH 密钥或 ssh-agent;如果要禁止密码提示,可以在 SSH/SCP 参数中追加 -o BatchMode=yes。
七、交付物
批量巡检默认输出到桌面:
~/Desktop/linux-inspection-automation-<label>/
fleet_overview_<label>.html
batch_manifest.tsv
README.md
reports/
linux_inspection_automation_<host>_<label>.html
json/
linux_inspection_automation_<host>_<label>.json
logs/
<host>_upload.log
<host>_policy_upload.log
<host>_exec.log
<host>_download.log
<host>_json_download.log
~/Desktop/linux-inspection-automation-<label>.tar.gz各文件的用途:
fleet_overview_<label>.html:多主机总览入口,适合先看整体健康状态和异常主机。reports/*.html:每台机器的完整 HTML 报告,包含证据、待处理项和整改建议。json/*.json:结构化结果,包含主机信息、指标、策略、待处理项和最终状态。batch_manifest.tsv:批次执行清单,记录每台主机的执行状态、退出码、报告路径和日志路径。logs/*:上传、策略上传、远程执行、报告下载、JSON 下载等过程日志。README.md:当前批次交付说明。linux-inspection-automation-<label>.tar.gz:可以直接归档或交付的完整压缩包。
交付时通常先打开总览页:
# <label> 替换为本次批次名称
open ~/Desktop/linux-inspection-automation-<label>/fleet_overview_<label>.html如果是在 Linux 桌面环境,也可以用浏览器直接打开这个 HTML 文件。
八、报告里的整改建议怎么使用
单机 HTML 报告中的“待处理 / 关注项”按现场整改习惯组织:
级别:严重、警告、关注。优先级:P1立即处理、P2计划整改、P3复核确认。问题:可点击跳转到对应证据章节。证据:本次巡检采集到的触发条件。影响:不处理时可能造成的业务或安全影响。整改建议:建议处理方向。参考命令:只读排查命令或需要替换占位符的命令模板。
这里要特别注意:报告里的参考命令默认不是自动整改动作。涉及 systemctl enable <service>、证书续签、服务重载、配置修改这类操作时,需要先确认业务窗口、服务影响和占位符替换,再由人工执行。
九、适合使用的场景
这个工具适合:
- 项目交付前的 Linux 主机基线巡检。
- 故障排查前先统一采集系统状态。
- 多台服务器做同一套检查口径。
- 把 HTML 报告交给现场人员,把 JSON 结果交给自动化平台。
- 对巡检过程保留上传、执行、下载日志,方便回溯。
不适合直接当成监控系统,也不负责自动修复系统配置。它的定位是“可交付的巡检采集和证据报告”,整改仍然应该进入变更流程。
十、运行前检查清单
正式批量执行前建议确认:
- 运维机可以执行
ssh和scp。 - 目标机允许使用清单中的账号登录。
- 首次连接目标机时,先手工完成
known_hosts确认。 - 密码登录会在上传、执行、下载阶段多次提示,批量场景建议配置 SSH 密钥或
ssh-agent。 - 目标机 Bash 版本是 4.0 或以上。
- 策略文件来自可信来源,因为它会被脚本读取执行。
- 报告中的整改命令只作为参考,需要人工确认后再执行。
v1.0.0 这一版的重点是把“能跑一次巡检”整理成“能批量执行、能交付、能回溯”的流程。后续如果要接入平台,建议优先消费 json/*.json,同时保留 HTML 和日志作为人工复核证据。