摘要
手头上有几台服务器,经常要对服务器进行健康检查、安全检查等。这几天让ClaudeCode自己写了个Skill这样就一句话活就让AI给干了。本文详细介绍了如何使用Claude Code AI辅助开发工具,从零开始构建一个生产级运维健康检查的Skill。重点阐述了整体架构设计、核心功能实现细节以及实际应用效果。该系统采用模块化设计,提供三大检查模块(基础健康检查、深度安全审计、Docker容器监控),支持双格式输出(Markdown人工可读 + JSON机器可处理),具有良好的可扩展性和兼容性。
一、背景与设计目标
1.1 实际需求
在日常运维工作中,我们需要对多台服务器进行健康检查,涵盖系统资源、Docker容器状态、安全指标等多个维度。虽然市面上有很多成熟的监控方案(如Prometheus、Grafana、Zabbix等),但在以下场景中,我们需要一个轻量级、快速部署的检查工具:
- 日常巡检:每天对服务器进行快速健康扫描
- 安全审计:定期检查异常进程、可疑网络连接、文件系统安全
- 容器监控:检查Docker容器运行状态、资源使用情况
- 问题排查:当系统出现问题时,快速获取当前状态信息
1.2 设计目标
基于上述需求,我设定了以下设计目标交给了Claude Code:
核心特性:
- ✅ 轻量级部署:基于Bash脚本,无需额外依赖,远程执行无需安装
- ✅ 双格式输出:同时生成Markdown(人工阅读)和JSON(机器处理)格式
- ✅ 模块化架构:三大检查模块独立运行,可按需组合
- ✅ 状态可视化:使用emoji(✅正常/⚠️警告/❌严重)直观展示
- ✅ 广泛兼容性:支持bash 3.2+(macOS默认版本),适配主流Linux发行版
技术亮点:
- 统一的输出库设计,实现代码复用
- JSON三层结构(summary/details/metadata),满足不同使用场景
- 完善的错误处理和兼容性方案
- 清晰的扩展接口,便于添加新的检查类型
二、整体架构设计
2.1 系统架构
Claude Code自动帮我设计了整体架构
运维健康检查系统采用模块化设计,包含三个独立的检查模块:
| 模块名称 | 脚本文件 | 功能定位 | 核心检查项 |
|---|---|---|---|
| 基础健康检查 | health-check.sh | 日常巡检、快速评估 | 系统资源、内存、磁盘、网络、服务状态、基础安全 |
| 深度安全检查 | security-check.sh | 安全审计、威胁检测 | 异常进程、可疑连接、文件安全、账户安全、系统完整性 |
| Docker容器监控 | docker-check.sh | 容器环境管理 | 容器状态、资源使用、镜像管理、存储空间 |
设计原则:
- 独立性:每个脚本可单独运行,互不依赖
- 一致性:统一的输出格式和状态指示
- 可扩展性:易于添加新的检查项或模块
- 远程友好:支持SSH管道执行,无需远程安装
2.2 文件结构
1 | host-manage/ |
三、核心功能实现
Claude Code自动帮我实现了所有的功能
3.1 基础健康检查模块(health-check.sh)
这是日常运维使用最频繁的模块,专注于快速评估系统整体健康状况。
3.1.1 系统运行时间和负载检查
检查目的:了解系统运行时长和当前负载压力
实现逻辑:
1 | # 获取系统运行时间 |
状态判断函数:
1 | check_load_status() { |
关键点:
- 使用
bc -l进行浮点数比较,兼容不同系统 - 兼容
uptime -p命令(human-readable格式)不可用的情况 - 同时收集三个时间维度的负载数据,用于趋势分析
3.1.2 内存使用检查
检查目的:监控内存和swap使用情况,防止内存耗尽
实现逻辑:
1 | # 获取内存信息(单位:MB) |
输出示例:
1 | ### 内存使用 |
关键点:
- 使用
free命令的available列而非free列,更准确反映可用内存 - 同时检查swap使用率,高swap使用率通常意味着内存压力
- 支持自定义阈值配置(通过环境变量
MEMORY_WARNING、MEMORY_CRITICAL)
3.1.3 磁盘空间检查
检查目的:监控所有挂载点的磁盘使用情况,防止磁盘空间不足
实现逻辑:
1 | echo "### 磁盘空间" |
输出示例:
1 | ### 磁盘空间 |
关键点:
- 自动过滤
tmpfs、overlay等临时文件系统 - 支持多个挂载点,每个挂载点独立判断状态
- 使用整数比较(已去除百分号),提高性能
- 同时生成Markdown表格和JSON数组数据
3.1.4 网络连接统计
检查目的:了解当前网络连接数量,快速发现异常连接
实现逻辑:
1 | # 使用ss命令替代netstat(更现代) |
关键点:
- 优先使用
ss命令(现代Linux推荐),降级到netstat - 统计外部独立IP连接数,而非连接总数(更准确反映异常)
- 包含监听端口数量,便于发现未授权监听
3.1.5 systemd服务状态检查
检查目的:检查系统服务运行状态,发现失败服务
实现逻辑:
1 | # 检查systemd是否可用 |
输出示例:
1 | ### 服务状态 |
关键点:
- 兼容非systemd系统(如SysV init)
- 区分”运行中”、”失败”、”启用”三种状态
- 单独检查关键服务(SSH、Docker等),便于快速定位问题
- 列出所有失败服务,方便管理员进一步排查
3.1.6 基础安全检查
虽然主要的安全检查在security-check.sh中,但基础健康检查也包含几个关键的安全指标:
1 | echo "### 基础安全" |
3.2 深度安全检查模块(security-check.sh)
这是最复杂的模块,涵盖了5大类、20+项安全检查,用于全面的安全审计。
3.2.1 异常进程检测
检查目的:发现挖矿程序、高资源占用进程、可疑可执行文件
1. 挖矿进程检测
1 | # 定义已知挖矿程序名称列表 |
2. 高资源占用进程检测
1 | echo "### 高资源占用进程(Top 10)" |
3. 临时目录可执行文件检查
1 | # 检查/tmp和/dev/shm中的可执行文件 |
关键点:
- 使用
pgrep而非ps aux | grep,性能更高且避免误匹配 - 记录进程的PID、用户、完整命令行,便于追踪
- 同时检查/tmp、/dev/shm、/var/tmp三个常见临时目录
- 显示文件的权限、大小、修改时间,帮助判断是否可疑
3.2.2 网络安全检查
检查目的:发现反向shell、可疑端口监听、异常外部连接
1. 反向shell检测
1 | # 反向shell典型特征:外部IP连接本地高端口(非标准服务端口) |
2. 监听端口分析
1 | echo "### 监听端口分析" |
3. 外部连接统计
1 | # 统计外部连接的独立IP数量 |
关键点:
- 反向shell检测基于行为特征:外部IP连接本地高端口
- 排除已知的合法高端口(如某些应用服务)
- 统计外部连接IP数量和连接频率,异常高值需要关注
- 显示监听端口对应的进程和用户,便于排查
3.2.3 文件系统安全检查
检查目的:发现最近修改的敏感文件、勒索病毒特征、SUID/SGID文件
1. 关键目录变更检测
1 | echo "### 关键目录最近变更(7天内)" |
2. 勒索病毒特征检测
1 | echo "### 勒索病毒特征检测" |
3. SUID/SGID文件检查
1 | echo "### SUID/SGID文件检查" |
关键点:
- 重点监控/etc、/home、/root等敏感目录
- 勒索病毒检测基于文件扩展名特征(实际环境中建议结合文件内容分析)
- SUID/SGID文件是提权漏洞的常见切入点,需要重点关注
- 限制输出数量,避免报告过长
3.2.4 账户和登录安全检查
检查目的:检测异常登录、新增用户、sudo使用情况
1. 最近登录记录
1 | echo "### 最近登录记录(最近10次)" |
2. 失败登录统计
1 | echo "### 失败登录统计" |
3. 新增用户检测
1 | echo "### 新增用户检测(最近30天)" |
4. Sudo使用审计
1 | echo "### Sudo使用审计(最近20条)" |
关键点:
- 兼容不同Linux发行版的日志文件路径
- 统计失败登录次数和来源IP,高值可能意味着暴力破解
- 检测新增用户,特别是UID为0(root权限)的用户
- 审计sudo使用情况,发现权限滥用
3.2.5 系统完整性检查
检查目的:检查关键文件权限、系统二进制文件完整性
1 | echo "### 系统完整性检查" |
关键点:
- 重点检查/etc/passwd、/etc/shadow等认证相关文件
- /etc/shadow应该是000或640权限
- /etc/sudoers应该是440或400权限
- SSH私钥文件应该是600或400权限
3.3 Docker容器监控模块(docker-check.sh)
专注于Docker环境的健康检查和资源监控。
3.3.1 Docker服务状态检查
检查目的:确认Docker服务运行正常,获取版本信息
1 | echo "## 🐳 Docker服务状态" |
3.3.2 容器统计与状态
检查目的:了解容器总数、运行状态、停止状态
1 | echo "## 📦 容器状态概览" |
输出示例:
1 | ## 📦 容器状态概览 |
3.3.3 容器资源使用分析
检查目的:发现资源占用异常的容器,进行容量规划
1 | echo "## 📊 容器资源使用(Top 10)" |
关键点:
- 使用
--no-stream参数获取当前瞬时数据,而非持续输出 - 标记CPU>50%和内存>80%的容器,便于快速发现问题
- 区分运行中和停止的容器
- 限制输出数量,避免报告过长
3.3.4 镜像管理检查
检查目的:发现悬空镜像,提供清理建议
1 | echo "## 🖼️ 镜像管理" |
3.3.5 存储空间使用
检查目的:了解Docker整体存储占用,发现异常占用
1 | echo "## 💾 存储空间使用" |
输出示例:
1 | ## 💾 存储空间使用 |
1 |
|
关键点:
- 提供清晰的清理建议和命令
- 统计并显示可回收空间,帮助决策是否清理
- 列出网络和卷,便于了解整体架构
- 所有数据同时记录到JSON,便于自动化分析
四、实际应用效果展示
4.1 基础健康检查报告
Markdown报告(人工阅读)
图:健康检查报告

JSON报告(机器处理)
1 | { |
实际价值:
- Markdown报告便于运维人员快速了解系统状态
- JSON数据可被监控系统自动采集和分析
- 清晰的emoji状态指示,一眼就能看出问题所在
- 详细的阈值配置,便于追溯和调整
五、总结与展望
5.1 实现成果
本次开发成功构建了一个生产级运维健康检查系统:
✅ 三大核心模块
- 基础健康检查:涵盖系统资源、服务状态、基础安全
- 深度安全检查:5大类20+项安全检查
- Docker监控:容器、镜像、存储全方位监控
✅ 双格式输出
- Markdown:人工可读,便于快速决策
- JSON:机器可处理,易于自动化集成
✅ 广泛兼容性
- bash 3.2+兼容(macOS默认版本)
- 支持主流Linux发行版(Ubuntu、CentOS、Debian)
- 适配systemd和SysV init系统
✅ 完整文档
- SKILL.md:使用指南
- 设计文档:架构和实现思路
- 博客文章:实战经验分享
5.2 技术亮点
- 模块化设计:三个检查模块独立运行,互不依赖
- 统一输出库:封装数据收集和格式化逻辑
- 阈值可配置:支持通过环境变量自定义阈值
- 兼容性处理:优雅降级,兼容不同版本工具
- 清理建议:不仅发现问题,还提供解决建议
5.3 实际应用价值
效率提升:
- 批量检查10台主机仅需2分钟
- 自动生成双格式报告,无需手工整理
- JSON数据可直接导入监控系统
安全增强:
- 发现并阻止挖矿程序
- 检测异常登录和未授权访问
- 及时发现文件系统异常变更
成本节约:
- 无需部署复杂监控系统
- 基于现有SSH连接,无需额外代理
- 轻量级脚本,资源占用极低
5.4 开发体会
通过Claude Code的AI辅助开发,整个过程非常高效:
- 快速迭代:从需求到实现不到4小时
- 智能提示:Claude主动发现兼容性问题并给出解决方案
- 代码质量:生成的代码结构清晰,符合最佳实践
- 文档完善:自动生成详细的使用文档和示例
AI辅助开发不仅提高了效率,更重要的是让开发者可以专注于业务逻辑和架构设计,而将具体的编码工作交给AI完成。这种人机协作模式,是未来软件开发的重要趋势。
项目地址:https://github.com/xiejava/ops-health-check
博客地址:http://xiejava.ishareread.com
🤖 本文由Claude Code辅助编写
关注:微信公众号,一起学习成长!