HOME

Linux 巡检自动化 v1.0.0:单机、批量巡检与交付报告

文章目录10 节

这篇记录的是 linux-inspection-automation v1.0.0 的发布说明和现场使用方法。它不是替代监控平台,而是面向交付、巡检、排障前置检查这类场景,把 Linux 主机状态采集、阈值判断、证据记录和 HTML/JSON 报告打包到一个可复制的脚本流程里。

项目地址:

GitHub MrXJG/linux-inspection-automation

一、它解决什么问题

日常巡检里最容易出问题的不是单条命令不会敲,而是每台机器采集口径不一致、报告不可交付、远程批量执行缺少证据链。这个项目把这些动作收敛成两层入口:

  • 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 或以上版本。
  • 远程批量模式依赖运维机可以执行系统自带的 sshscp

如果在 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_REGEXIGNORE_MOUNT_REGEX 明确排除,而不是在报告出来后手工解释。

五、批量巡检清单

批量巡检使用 TSV 清单,字段顺序固定:

enabled    name    mode    target    address    args

字段含义:

  • enabled1 表示执行,0 表示跳过。
  • name:报告文件名中的主机别名,建议只使用字母、数字、短横线和下划线。
  • modelocalssh
  • 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_rsa222215 都是现场值,需要按实际环境替换。非交互批量任务建议配置 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 结果交给自动化平台。
  • 对巡检过程保留上传、执行、下载日志,方便回溯。

不适合直接当成监控系统,也不负责自动修复系统配置。它的定位是“可交付的巡检采集和证据报告”,整改仍然应该进入变更流程。

十、运行前检查清单

正式批量执行前建议确认:

  • 运维机可以执行 sshscp
  • 目标机允许使用清单中的账号登录。
  • 首次连接目标机时,先手工完成 known_hosts 确认。
  • 密码登录会在上传、执行、下载阶段多次提示,批量场景建议配置 SSH 密钥或 ssh-agent
  • 目标机 Bash 版本是 4.0 或以上。
  • 策略文件来自可信来源,因为它会被脚本读取执行。
  • 报告中的整改命令只作为参考,需要人工确认后再执行。

v1.0.0 这一版的重点是把“能跑一次巡检”整理成“能批量执行、能交付、能回溯”的流程。后续如果要接入平台,建议优先消费 json/*.json,同时保留 HTML 和日志作为人工复核证据。

Linux 运维自动化 巡检