- name
- linux-perf-check
- description
- SSH远程连接Linux服务器进行全量巡检的技能。支持单机和批量巡检,覆盖系统基础信息、CPU负载、内存&Swap、磁盘空间、网络状态、进程&服务、日志、用户与安全、硬件状态、数据库/中间件、备份&业务、资源阈值告警、Java 宕机分析、MySQL深度诊断(23项)、数据库健康诊断、数据库安全审计、数据库锁分析、数据库备份调度、SQL审核执行,全面支持 MySQL/PostgreSQL/Oracle 三大数据库。
⚠️ 安全要求:SSH密钥认证登录,禁止密码登录;仅执行只读命令,禁止修改服务器配置;数据库仅允许SELECT查询,禁止INSERT/UPDATE/DELETE/DROP/ALTER等任何写入操作。
🚀 性能优化(2026-06-04):模块级多线程并发执行,默认5线程并发巡检,单机全量巡检从20+分钟压至1-2分钟;阻塞模块自动跳过不卡死。
新增数据库模块(2026-05-30):db_health(健康诊断)、db_security(安全审计)、db_locks(锁分析)、db_backup(备份调度)、db_sql(SQL审核执行),均支持 MySQL/PostgreSQL/Oracle 三库。
使用场景包括但不限于:
- "帮我巡检XX服务器"
- "检查192.168.26.66的系统状态"
- "批量巡检所有服务器"
- "Linux服务器巡检报告"
- "服务器负载过高排查"
- "运维巡检"
- "一键巡检所有指标"
- agent_created
- true
# Linux 服务器全量巡检技能
## 功能概述
通过SSH远程连接Linux服务器,自动收集系统指标(含数据库深度诊断),生成专业巡检报告。覆盖基础巡检 14 项 + Java 宕机诊断 + 数据库深度诊断(MySQL/PostgreSQL/Oracle 三大库,共 10 个数据库专用模块)。
**支持两种模式:**
- **单机巡检**:指定单台服务器直接巡检
- **批量巡检**:通过 `inventory.json` 服务器清单,并发巡检多台服务器,生成汇总报告
## 巡检覆盖范围(14大类)
| 模块 | 名称 | 核心指标 |
|------|------|----------|
| `system` | 系统基础信息 | 系统版本、内核、主机名、IP/网关/DNS、运行时长、时区、登录用户 |
| `cpu` | CPU负载巡检 | CPU型号/核数、使用率、1/5/15分钟负载、高占用进程 |
| `memory` | 内存&Swap | 物理/缓存/缓冲区、Swap分区、OOM日志 |
| `disk` | 磁盘空间 | 全盘使用率、inode、大文件/日志垃圾、IO繁忙度、只读挂载 |
| `network` | 网络状态 | 网卡流量、监听端口、TCP连接、防火墙、丢包延迟 |
| `process` | 进程&服务 | 业务进程存活、僵尸进程、定时任务、异常进程 |
| `log` | 日志巡检 | 系统日志、安全日志、内核报错、崩溃/OOM |
| `security` | 用户与安全 | 可疑账号、空密码、特权用户、sudo权限、暴力破解、SSH配置 |
| `hardware` | 硬件状态 | CPU温度、硬盘健康、RAID阵列、DMI信息 |
| `middleware` | 数据库/中间件 | MySQL/Redis/Nginx/Tomcat/Docker运行状态、连接数、慢查询 |
| `backup` | 备份&业务 | 备份任务、备份文件、业务端口可用性、SSL证书 |
| `alert` | 资源阈值告警 | CPU>80%、内存>85%、磁盘>85%、Swap>50%、失败登录、僵尸进程 |
| `jvm_crash` | Java 宕机分析 | Java进程检测、JVM crash log、jstack死锁检测、jmap堆对象TOP20、jstat GC统计、OOM记录、应用异常日志 |
| `mysql_deep` | MySQL深度诊断(23项) | 连接使用率、缓冲池命中率、DB/表大小、性能指标、安全审计、索引分析、主从复制、InnoDB引擎状态、慢查询配置、关键参数;**新增**:性能瓶颈诊断、慢查询执行时间分析、未使用索引检测、回表检测、冗余索引检测、缺失索引检测、MySQL参数调优建议 |
| `db_health` | 数据库健康诊断 | MySQL/PostgreSQL/Oracle 健康评分、异常检测、容量预测、瓶颈分析、TOP SQL、趋势分析 |
| `db_security` | 数据库安全审计 | SQL注入检测、敏感数据扫描、权限审计、配置安全、密码策略、登录监控(三库通用) |
| `db_locks` | 数据库锁分析 | 当前锁统计、死锁检测、阻塞链追踪、阻塞事务终止(三库通用) |
| `db_backup` | 数据库备份与调度 | 全量/增量备份(mysqldump/pg_dump/expdp)、Cron定时任务、备份验证 |
| `db_sql` | SQL 审核与执行 | SQL规范审核(5维度)、DDL影响分析、重写优化、Schema查询、数据导出导入 |
## 认证方式
### 方式1:SSH密钥认证(推荐)
```bash
# 生成密钥
ssh-keygen -t ed25519 -C "workbuddy-inspection" -f ~/.ssh/id_ed25519_workbuddy
# 上传公钥
ssh-copy-id -i ~/.ssh/id_ed25519_workbuddy.pub root@<服务器IP>
# 验证
ssh -i ~/.ssh/id_ed25519_workbuddy root@<服务器IP>
```
### 方式2:密码认证
每次巡检时提供:服务器IP、SSH端口、用户名、密码。
## 使用方法
### 单机巡检
```bash
# 全量巡检(密码认证)— 一键跑全部模块,默认5线程并发
python ~/.workbuddy/skills/linux-perf-check/scripts/linux_inspection.py \
--host <IP> --user root --password <密码> --check all
# 全量巡检(密钥认证)
python ~/.workbuddy/skills/linux-perf-check/scripts/linux_inspection.py \
--host <IP> --user root --key ~/.ssh/id_ed25519_workbuddy --check all
# 指定模块巡检
python ~/.workbuddy/skills/linux-perf-check/scripts/linux_inspection.py \
--host <IP> --user root --password <密码> \
--check cpu,memory,disk,alert
# 调优并发(加快巡检速度)
python ~/.workbuddy/skills/linux-perf-check/scripts/linux_inspection.py \
--host <IP> --user root --password <密码> --check all \
--module-workers 8 --module-timeout 60
# 保存报告
python ~/.workbuddy/skills/linux-perf-check/scripts/linux_inspection.py \
--host <IP> --user root --password <密码> \
-o /path/to/report.txt --json-output /path/to/report.json
```
### 批量巡检
#### 1. 编辑服务器清单
编辑 `~/.workbuddy/skills/linux-perf-check/inventory.json`,添加需要巡检的服务器:
```json
{
"servers": [
{
"alias": "生产服务器-MySQL",
"host": "192.168.26.66",
"port": 22,
"user": "root",
"auth": { "type": "password", "value": "redhat" },
"enabled": true,
"tags": ["生产", "MySQL"]
},
{
"alias": "测试服务器",
"host": "192.168.26.100",
"port": 22,
"user": "root",
"auth": { "type": "key", "value": "~/.ssh/id_ed25519_workbuddy" },
"enabled": true,
"tags": ["测试"]
}
],
"settings": {
"check_modules": "all",
"timeout": 120,
"workers": 3,
"module_workers": 5,
"module_timeout": null,
"output_dir": "./reports",
"generate_html": true
}
}
```
#### 2. 执行批量巡检
```bash
# 基本批量巡检
python ~/.workbuddy/skills/linux-perf-check/scripts/linux_inspection.py \
--inventory ~/.workbuddy/skills/linux-perf-check/inventory.json
# 指定并发数 + 生成HTML报告
python ~/.workbuddy/skills/linux-perf-check/scripts/linux_inspection.py \
--inventory ~/.workbuddy/skills/linux-perf-check/inventory.json \
--workers 5 --html
# 只巡检关键指标(快速)
python ~/.workbuddy/skills/linux-perf-check/scripts/linux_inspection.py \
--inventory ~/.workbuddy/skills/linux-perf-check/inventory.json \
--check cpu,memory,disk,alert
# 指定输出目录
python ~/.workbuddy/skills/linux-perf-check/scripts/linux_inspection.py \
--inventory ~/.workbuddy/skills/linux-perf-check/inventory.json \
--output-dir /path/to/reports --html
```
#### inventory.json 字段说明
| 字段 | 必填 | 说明 |
|------|------|------|
| `alias` | 否 | 服务器别名,用于报告中显示 |
| `host` | 是 | IP地址 |
| `port` | 否 | SSH端口,默认22 |
| `user` | 是 | SSH用户名 |
| `auth.type` | 是 | `password` 或 `key` |
| `auth.value` | 是 | 密码字符串 或 密钥文件路径 |
| `enabled` | 否 | 是否启用,默认true |
| `tags` | 否 | 标签数组,用于分类 |
#### settings 字段说明
| 字段 | 必填 | 说明 |
|------|------|------|
| `check_modules` | 否 | 巡检模块,`"all"` 或逗号分隔字符串(如 `"cpu,memory"`) |
| `timeout` | 否 | SSH 命令超时秒数,默认 120 |
| `workers` | 否 | 服务器并发线程数,默认 3 |
| `module_workers` | 否 | **单服务器模块并发线程数**,默认 5(设为 1 回退串行) |
| `module_timeout` | 否 | 单模块超时秒数,默认继承 `timeout` |
| `output_dir` | 否 | 报告输出目录,默认 `./reports` |
| `generate_html` | 否 | 是否生成 HTML 汇总报告,默认 `false` |
#### 批量巡检输出
批量巡检会在输出目录生成以下文件:
```
reports/
├── 192_168_26_66_20260521_134500.txt # 单台文本报告
├── 192_168_26_66_20260521_134500.json # 单台JSON报告
├── 192_168_26_100_20260521_134500.txt
├── 192_168_26_100_20260521_134500.json
├── batch_summary_20260521_134500.txt # 汇总文本报告
└── batch_report_20260521_134500.html # 汇总HTML报告
```
### --check 模块速查
| 参数值 | 巡检内容 | 需要凭证 |
|--------|----------|:---:|
| **`all`** | **一键全量巡检(展开为下面全部 19 个模块)** | — |
| `system` | 系统基础信息 | SSH |
| `cpu` | CPU负载 | SSH |
| `memory` | 内存&Swap | SSH |
| `disk` | 磁盘空间 | SSH |
| `network` | 网络状态 | SSH |
| `process` | 进程&服务 | SSH |
| `log` | 日志 | SSH |
| `security` | 安全 | SSH |
| `hardware` | 硬件 | SSH |
| `middleware` | 数据库/中间件 | SSH |
| `backup` | 备份&业务 | SSH |
| `alert` | 阈值告警汇总 | SSH |
| `jvm_crash` | Java 宕机分析(jstack/jmap/jstat/crash log) | SSH |
| `mysql_deep` | MySQL/MariaDB深度诊断(23项) | ⚡ DB凭证 |
| `db_health` | 数据库健康诊断(MySQL/PG/Oracle) | ⚡ DB凭证 |
| `db_security` | 数据库安全审计(三库通用) | ⚡ DB凭证 |
| `db_locks` | 数据库锁分析(三库通用) | ⚡ DB凭证 |
| `db_backup` | 数据库备份调度(三库通用) | ⚡ DB凭证 |
| `db_sql` | SQL审核与执行(三库通用) | ⚡ DB凭证 |
- **SSH**:仅需 SSH 凭证即可运行
- **⚡ DB凭证**:需要额外提供数据库连接凭证(`--mysql-user`/`--mysql-password` 或 `inventory.json` 中的 `databases[]`)
多个模块用逗号分隔:`--check cpu,memory,disk,alert,jvm_crash,mysql_deep,db_health,db_security`
### --check all 一键全量巡检 ⭐
**当用户说"巡检"、"全量巡检"、"一键巡检"时,AI 自动使用 `--check all`。**
`all` 自动展开为以下 19 个模块:
```
system,cpu,memory,disk,network,process,log,security,hardware,
middleware,backup,alert,jvm_crash,
mysql_deep,db_health,db_security,db_locks,db_backup,db_sql
```
**凭证处理逻辑:**
| 模块组 | 有 DB 凭证时 | 无 DB 凭证时 |
|--------|:----------:|:----------:|
| 系统巡检 14 项(system~jvm_crash) | ✅ 正常执行 | ✅ 正常执行 |
| 数据库 6 项(mysql_deep~db_sql) | ✅ 正常执行 | ⚠️ 跳过 + 提示"缺少数据库凭证" |
**实际行为:**
- 只要有 SSH 凭证就能跑,「数据库模块没凭证就跳过,不报错」
- 报告末尾会列出跳过的模块及原因,方便后续补齐
**使用示例:**
```bash
# 最简方式:一键全量
python linux_inspection.py --host 192.168.26.66 --user root --password xxx --check all
# 有 DB 凭证时能跑全部 20 个模块
python linux_inspection.py --host 192.168.26.66 --user root --password xxx \
--check all --mysql-user root --mysql-password dbpwd
# 批量模式:inventory.json 中配置 check_modules: "all"
# 配合 databases[] 字段,自动对列表中的每类数据库执行对应模块
python linux_inspection.py --inventory inventory.json
```
**AI 交互规范:**
- 用户说「巡检」→ 直接 `--check all`
- 用户说「巡检一下数据库」→ `--check mysql_deep,db_health,db_security`
- 用户说「快速巡检」→ `--check cpu,memory,disk,alert`
## Java 宕机分析工作流 ⭐
### 概述
`jvm_crash` 模块是专门针对 Java 应用宕机/异常场景的诊断模块。它通过 SSH 远程在服务器上自动采集 JDK 诊断数据,然后将文本化结果交给 AI 进行深度分析。
### 采集内容
| 诊断维度 | 使用工具 | 采集内容 |
|----------|----------|----------|
| 进程检测 | jps / ps | Java 进程 PID、启动参数、运行时长 |
| Crash 历史 | find | 近 30 天内 hs_err_pid*.log 摘要 |
| 内存分析 | jmap -histo:live | 堆内存对象 TOP 20(按实例数) |
| GC 分析 | jstat -gcutil | 最近 3 次 GC 采样统计 |
| 线程分析 | jstack | 线程状态分布、BLOCKED 线程、死锁检测 |
| 系统 OOM | dmesg / journalctl | 系统级 OOM Killer 记录 |
| 应用日志 | grep | 应用日志中的异常/错误关键词 |
### AI 分析能力(巡检后 AI 自动进行)
AI 在拿到巡检数据后,会自动进行以下分析:
1. **死锁诊断** — 识别 `Found deadlock` 关键字,绘制死锁环路
2. **OOM 根因** — 结合 jmap TOP 对象 + 系统 OOM 记录,定位内存泄漏嫌疑类
3. **线程阻塞** — 统计 BLOCKED 线程数,识别持锁线程和等待链
4. **JVM Crash** — 解析 hs_err_pid*.log 中的信号量(SIGSEGV/SIGBUS)、native 帧、问题帧
5. **GC 异常** — 判断 Full GC 频率是否异常,建议 GC 策略调优
6. **建议输出** — 生成结构化诊断报告 + JVM 参数调优建议 + 代码排查方向
### 使用示例
```bash
# 仅巡检 Java 宕机分析
python linux_inspection.py --host 192.168.26.66 --user root --password xxx --check jvm_crash
# 全量巡检(含 Java 分析)
python linux_inspection.py --host 192.168.26.66 --user root --password xxx --check all
# 关注 CPU/内存 + Java 分析(典型场景:运维报"服务器卡")
python linux_inspection.py --host 192.168.26.66 --user root --password xxx --check cpu,memory,jvm_crash,alert
```
### Heap Dump 深度分析(额外步骤)
对于需要深入分析内存泄漏的场景,`jvm_crash` 模块提供的是轻量快照(jmap -histo)。如果发现内存异常,可进一步操作:
```bash
# 在服务器上生成 heap dump
jcmd <pid> GC.heap_dump /tmp/heap_$(date +%Y%m%d).hprof
# 转文本摘要后交给 AI 分析
jmap -histo:live <pid> > /tmp/heap_histo.txt
# 或使用 MAT 导出 leak suspects report
```
### 注意事项
- `jmap -histo:live` 会触发 Full GC,生产环境谨慎使用;如需无侵入版本可改用 `jmap -histo`(不含 `:live`)
- `jstack` / `jmap` 需要与目标 JVM 相同版本的 JDK,或目标进程用户权限
View on GitHub