Skip to content

wanghel2020/linux-perf-check

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🖥️ Linux Perf Check — 一键式 Linux 服务器全量巡检工具

Python 3.8+ Database Support 20 Modules License: MIT


📖 简介

Linux Perf Check 是一个通过 SSH 远程连接 Linux 服务器,自动化采集系统指标并生成专业巡检报告的 Python 工具。它把运维日常的「看系统、查日志、摸数据库」变成一条命令。

🎯 解决了什么问题?

传统运维巡检的痛点:

痛点 本工具的解法
每次巡检要敲几十条命令 --check all 一键跑完 20 个模块
多台服务器重复操作 --inventory 批量并发巡检,自动汇总
巡检完还得自己出报告 自动生成 txt + json + html 三格式报告
数据库检查太零散 内置 MySQL/PostgreSQL/Oracle 深度诊断
Java 宕机排查费时间 自动采集 jstack/jmap/jstat,AI 辅助分析
巡检一次要 20+ 分钟 模块并发执行,全量巡检压缩到 1-2 分钟

🚀 快速开始

依赖安装

pip install paramiko

配置 SSH 密钥(推荐)

# 生成专用密钥
ssh-keygen -t ed25519 -C "perf-check" -f ~/.ssh/id_ed25519_perf

# 上传到目标服务器
ssh-copy-id -i ~/.ssh/id_ed25519_perf.pub root@<服务器IP>

一行命令开始巡检

# 密码认证
python linux_inspection.py --host 192.168.1.100 --user root --password redhat --check all

# 密钥认证
python linux_inspection.py --host 192.168.1.100 --user root --key ~/.ssh/id_ed25519_perf --check all

# 快速巡检(只查 CPU/内存/磁盘/告警)
python linux_inspection.py --host 192.168.1.100 --user root --password redhat --check cpu,memory,disk,alert

📊 巡检覆盖范围(20 个模块)

分类 模块 巡检内容
基础巡检 system 系统版本、内核、主机名、IP/网关/DNS、运行时长、时区
cpu CPU 型号/核数、使用率、1/5/15min 负载、高占用进程
memory 物理/缓存/缓冲区、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% 等阈值告警
Java 诊断 jvm_crash Java 进程检测、crash log、jstack 死锁、jmap 堆对象、jstat GC
MySQL 深度诊断 mysql_deep 23 项:连接使用率、缓冲池命中率、DB/表大小、慢查询、索引分析、主从复制、InnoDB 引擎、回表检测、参数调优
db_health 健康评分、容量预测、瓶颈分析(CPU/IO/锁/连接/慢查询五大方向)
db_security SQL 注入检测、敏感数据扫描、权限审计、密码策略(7 维度安全评分 A/B/C/D/F)
db_locks 当前锁统计、死锁检测、阻塞链追踪
db_backup 全量/增量备份(mysqldump/pg_dump/expdp)、Cron 调度、备份验证
db_sql SQL 规范审核(5 维度)、DDL 影响分析、重写优化、Schema 查询、数据导出导入

💡 数据库模块支持 MySQL / PostgreSQL / Oracle 三种数据库,通过 db_auth 字段统一配置。


🔧 高级用法

1. 批量巡检多台服务器

创建 inventory.json

{
  "servers": [
    {
      "alias": "生产 MySQL 服务器",
      "host": "IP地址",
      "port": 22,
      "user": "root",
      "auth": { "type": "password", "value": "redhat" },
      "enabled": true,
      "tags": ["生产", "MySQL"],
      "databases": [
        { "type": "mysql", "host": "127.0.0.1", "port": 3306, "user": "root", "password": "mysql_pwd" }
      ]
    },
    {
      "alias": "测试服务器",
      "host": "192.168.26.100",
      "port": 22,
      "user": "root",
      "auth": { "type": "key", "value": "~/.ssh/id_ed25519_perf" },
      "enabled": true,
      "tags": ["测试"]
    }
  ],
  "settings": {
    "check_modules": "all",
    "workers": 3,
    "module_workers": 5,
    "generate_html": true
  }
}

执行批量巡检:

# 基础批量巡检
python linux_inspection.py --inventory inventory.json

# 生成 HTML 可视化报告
python linux_inspection.py --inventory inventory.json --html

2. 数据库深度诊断

# MySQL 23 项深度诊断
python linux_inspection.py --host 192.168.26.66 --user root --password xxx \
  --check mysql_deep --mysql-user app --mysql-password dbpwd

# 数据库健康评分 + 容量预测
python linux_inspection.py --host 192.168.26.66 --user root --password xxx \
  --check db_health --mysql-user root --mysql-password dbpwd

# 安全审计(匿名用户、弱密码、权限越界)
python linux_inspection.py --host 192.168.26.66 --user root --password xxx \
  --check db_security --mysql-user root --mysql-password dbpwd

3. Java 宕机分析

# 自动采集 jstack/jmap/jstat + AI 辅助诊断
python linux_inspection.py --host 192.168.26.66 --user root --password xxx --check jvm_crash

# 典型场景:运维报「服务器卡」─ CPU/内存/Java/告警 四件套
python linux_inspection.py --host 192.168.26.66 --user root --password xxx \
  --check cpu,memory,jvm_crash,alert

4. SQL 审核与优化

# SQL 审核(5 维度评分 + 问题清单)
python linux_inspection.py --host 192.168.26.66 --user root --password xxx \
  --check db_sql --sql "SELECT * FROM users WHERE name LIKE '%test%'"

📈 告警阈值

指标 正常 告警 危险
CPU 使用率 < 70% 70%-80% > 80%
内存使用率 < 70% 70%-85% > 85%
磁盘使用率 < 70% 70%-85% > 85%
Swap 使用率 < 30% 30%-50% > 50%
缓冲池命中率 > 95% 90%-95% < 90%
数据库连接使用率 < 60% 60%-80% > 80%
主从复制延迟 < 10s 10-60s > 60s

📄 输出格式

巡检完成后自动生成三类报告:

reports/
├── 192_168_26_66_20260604_143000.txt      # 结构化文本报告
├── 192_168_26_66_20260604_143000.json     # 机器可读 JSON
├── batch_summary_20260604_143000.txt      # 批量汇总(文本)
└── batch_report_20260604_143000.html      # 批量汇总(可视化 HTML)

报告示例

# Linux 服务器巡检报告

## 基本信息
- 巡检时间: 2026-06-04 14:30:00
- 目标主机: 192.168.26.66:22
- 操作用户: root

## 告警汇总
| 级别 | 模块 | 问题描述 | 处理建议 |
|------|------|----------|----------|
| 🔴 危险 | disk | /data 使用率 92% | 清理日志或扩容 |
| 🟡 告警 | mysql | 缓冲池命中率 88.5% | 增大 innodb_buffer_pool_size |
| 🟡 告警 | security | SSH 密码认证未关闭 | 修改为密钥认证 |

⚡ 性能优化

经过两轮架构优化后,全量巡检时间从 20+ 分钟压缩到 1-2 分钟

优化轮次 核心措施 预估耗时
原始版本(串行全盘扫描) 20+ min
1st 限缩扫描目录 + 合并 DB 查询 + 超时控制 3-6 min
2nd 模块多线程并发(ThreadPoolExecutor, 5 线程) 1-2 min
累计 提升 90%+

🛡️ 安全设计

  • 密钥优先:推荐 SSH 密钥认证,支持 ed25519 高强度密钥
  • 密码不落地:MySQL 密码通过 MYSQL_PWD 环境变量传递,不暴露在进程列表中
  • 只读原则:默认仅执行 SELECT 查询,禁止 INSERT/UPDATE/DELETE
  • 操作分级:高危操作(KILL 事务 / DROP / TRUNCATE)需用户明确确认
  • 超时兜底:每个模块独立超时,单模块卡死不影响全局

📦 模块速查表

基础巡检模块(13 个)

参数 内容 需要凭证
all 一键全量(展开为全部 20 个模块)
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

高级诊断模块(7 个)

参数 内容 需要凭证
jvm_crash Java 宕机分析(jstack/jmap/jstat) SSH
mysql_deep MySQL 深度诊断(23 项) ⚡ DB 凭证
db_health 数据库健康诊断(MySQL/PG/Oracle) ⚡ DB 凭证
db_security 数据库安全审计(三库通用) ⚡ DB 凭证
db_locks 数据库锁分析(三库通用) ⚡ DB 凭证
db_backup 数据库备份调度(三库通用) ⚡ DB 凭证
db_sql SQL 审核与执行(三库通用) ⚡ DB 凭证

⚡ 标记的模块需要数据库连接凭证(--mysql-user / --mysql-passwordinventory.json 中的 databases[])。数据库模块缺凭证时会自动跳过,不报错。


❓ 常见问题

Q: 数据库模块怎么跳过不报错?

是的,这是设计行为。--check all 时,系统巡检模块正常执行;数据库模块如果没有提供 DB 凭证,会自动跳过并在报告末尾标注。

Q: 支持哪些操作系统?

服务端支持 CentOS 7/8、RHEL、Ubuntu、Debian 等主流 Linux 发行版。巡检脚本在 Python 3.8+ 的任意平台运行(Windows/macOS/Linux 都可以)。

Q: 能只巡检 CPU 和磁盘吗?

当然可以:--check cpu,disk,多个模块逗号分隔。

Q: 生产环境安全吗?

工具设计为只读巡检,不修改任何配置。但 jmap -histo:live 会触发一次 Full GC(如果你在意这点,可以用不带 :live 的版本)。建议先在测试环境跑一遍再上生产。

Q: 能定时自动巡检吗?

可以通过 Cron / 计划任务 + 脚本组合实现:

# crontab -e
0 9 * * * cd /opt/linux-perf-check && python linux_inspection.py --inventory inventory.json --html

🗺️ Roadmap

  • 基础系统巡检(14 大类)
  • SSH 密钥 + 密码双认证
  • 批量巡检 + HTML 汇总报告
  • 模块多线程并发(性能提升 90%)
  • Java 宕机自动诊断
  • MySQL 深度诊断(23 项)
  • PostgreSQL / Oracle 数据库支持
  • 数据库安全审计 + 锁分析 + 备份调度 + SQL 审核
  • 钉钉/企业微信/飞书告警推送
  • Web Dashboard 可视化面板
  • 巡检历史趋势对比
  • Ansible/Puppet 集成
  • Docker/K8s 容器巡检扩展

📄 License

MIT License — 自由使用,欢迎 PR 和 Star ⭐

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages