本项目提供了两个服务器巡检脚本,用于监控 Linux 服务器的各项状态指标,帮助管理员及时发现并解决服务器问题。
- server_monitor.py - Python 版本的服务器巡检脚本
- server_monitor.sh - Shell 版本的服务器巡检脚本
这两个脚本的主要区别:Python 版本可以生成报告文件,而 Shell 版本直接输出到终端。
- 系统信息摘要:操作系统、内核版本、CPU 型号、核心数、总内存、总磁盘空间、公网 IP、负载平均值
- CPU 状态:使用率、1分钟/5分钟/15分钟负载、负载状态
- 内存状态:使用率、总内存、可用内存、状态
- 磁盘状态:各挂载点的使用率、总空间、可用空间、状态
- 磁盘 IO 状态:设备 IO 性能指标、状态
- 进程状态:指定进程的运行状态
- 系统服务状态:运行的服务数量、总服务数量、关键服务状态
- Top 进程:CPU 和内存使用最高的前 5 个进程
- 网络与安全状态:端口状态、防火墙状态、SELinux 状态
- 系统启动时间:运行时间、启动时间
- 僵尸进程:数量、状态
- 网络状态:连接数、网络延迟、总发送/接收流量、接口信息
- 安全状态:登录失败次数、失败的用户、权限问题、SSH 配置、自动更新、入侵防御系统、密码策略、SUID 文件检查、最近登录
- 告警功能:支持钉钉和企业微信告警
- 报告生成:生成文本和 CSV 格式的巡检报告
- Python 3:确保系统安装了 Python 3
- Python 库:
pip install -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple psutil requests
-
CentOS/RHEL:
yum install -y sysstat net-tools python3-pip procps
-
Ubuntu/Debian:
apt-get install sysstat net-tools procps
-
配置告警参数(可选): 编辑脚本中的
ALERT_CONFIG部分,设置告警类型和 webhook URL -
运行脚本:
python server_monitor.py
-
查看报告: 脚本会生成
server_monitor_YYYYMMDD_HHMMSS.txt和server_monitor_YYYYMMDD_HHMMSS.csv格式的报告文件
-
添加执行权限:
chmod +x server_monitor.sh
-
运行脚本:
./server_monitor.sh
结果会直接输出到终端
-
Python 版本:在
server_monitor.py中修改CHECK_PROCESSES列表:# 要检查的进程 CHECK_PROCESSES = ['sshd', 'nginx', 'mysql', 'redis']
-
Shell 版本:在
server_monitor.sh中修改CHECK_PROCESSES数组:# 要检查的进程 CHECK_PROCESSES=(sshd nginx mysql redis)
-
Python 版本:在
server_monitor.py中修改CHECK_PORTS列表:# 要检查的端口 CHECK_PORTS = [22, 80, 443, 3306, 6379]
-
Shell 版本:在
server_monitor.sh中修改CHECK_PORTS数组:# 要检查的端口 CHECK_PORTS=(22 80 443 3306 6379)
-
Python 版本:在
server_monitor.py中修改CHECK_SERVICES列表:# 要检查的关键服务 CHECK_SERVICES = ['sshd', 'cron', 'syslog-ng', 'rsyslog']
-
Shell 版本:在
server_monitor.sh中修改CHECK_SERVICES数组:# 要检查的关键服务 CHECK_SERVICES=(sshd cron syslog-ng rsyslog)
-
Python 版本:
# 修改检查的进程 CHECK_PROCESSES = ['sshd', 'nginx', 'mysql', 'redis', 'apache2'] # 修改检查的端口 CHECK_PORTS = [22, 80, 443, 3306, 6379, 8080] # 修改检查的关键服务 CHECK_SERVICES = ['sshd', 'cron', 'syslog-ng', 'rsyslog', 'apache2']
-
Shell 版本:
# 修改检查的进程 CHECK_PROCESSES=(sshd nginx mysql redis apache2) # 修改检查的端口 CHECK_PORTS=(22 80 443 3306 6379 8080) # 修改检查的关键服务 CHECK_SERVICES=(sshd cron syslog-ng rsyslog apache2)
对于 Python 版本,需要配置正确的 webhook URL 才能使用告警功能:
# 告警配置
ALERT_CONFIG = {
'type': 'dingtalk', # 可选: 'dingtalk' 或 'wecom'
'webhook': 'https://oapi.dingtalk.com/robot/send?access_token=your_token'
}-
类型说明:
dingtalk:钉钉机器人告警wecom:企业微信机器人告警
-
获取 webhook URL:
- 钉钉:在钉钉群中添加机器人,获取 webhook URL
- 企业微信:在企业微信应用中创建机器人,获取 webhook URL
-
示例:配置企业微信告警
ALERT_CONFIG = { 'type': 'wecom', 'webhook': 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=your_key' }
-
权限要求:
- 某些系统信息需要 root 权限才能访问,请以 root 用户或使用 sudo 运行脚本
-
网络访问:
- 脚本需要访问外部网络来获取公网 IP 和测试网络延迟
- 告警功能需要网络连接到钉钉或企业微信服务器
- 网络延迟测试需要访问外部网络(默认测试百度),确保服务器可以访问互联网
-
性能影响:
- 脚本会占用一定的系统资源,建议在非高峰期运行
- 特别是磁盘 IO 检查可能会对系统性能产生短暂影响
-
兼容性:
- Python 版本在不同 Linux 发行版上的兼容性更好
- Shell 版本可能需要根据不同的 Linux 发行版进行调整
-
日志文件:
- Python 版本会生成报告文件,建议定期清理旧的报告文件
-
防火墙检测:
- 脚本会自动检测不同类型的防火墙(firewalld、ufw、iptables),适配不同的 Linux 发行版
-
SELinux 检测:
- 脚本会检测 SELinux 的状态,并转换为更易理解的描述
-
登录记录:
- 最近登录记录只显示用户、IP 地址和登录时间,保护敏感信息
-
进程检测:
- CPU 和内存使用最高的进程使用系统 ps 命令获取,确保准确性
-
错误处理:
- 脚本包含完善的错误处理机制,即使某些检查项失败也不会影响整体执行
-
超时设置:
- 网络请求和告警发送都设置了超时,避免脚本因网络问题卡住
可以将脚本添加到 crontab 中,定期执行巡检:
# 每小时执行一次 Python 版本
0 * * * * /usr/bin/python /path/to/server_monitor.py
# 每小时执行一次 Shell 版本,并将结果保存到日志文件
0 * * * * /path/to/server_monitor.sh >> /var/log/server_monitor.log 2>&1===========================================
服务器巡检报告
===========================================
主机名: server-01
IP地址: 192.168.1.100
巡检时间: 2026-03-17 11:32:30
【CPU 状态】
使用率: 10.5%
1分钟负载: 0.25
5分钟负载: 0.15
15分钟负载: 0.10
负载状态: 正常
【内存状态】
使用率: 60.2%
总内存: 16.00GB
可用内存: 6.35GB
状态: 正常
...-
系统兼容性:本脚本未在所有版本的 Linux 系统上进行测试,可能在某些特定版本或配置的系统上存在兼容性问题
-
使用建议:由于水平有限,脚本可能存在未发现的 bug 或性能问题。请务必在测试环境中运行验证后,再在生产环境中使用
-
权限要求:部分监控功能需要 root 权限才能正常执行,请确保以适当的权限运行脚本
-
网络依赖:网络状态检测功能依赖于外部网络连接,请确保服务器能够正常访问外部网络
-
使用范围:本脚本仅用于服务器监控,使用过程中如有问题,请及时反馈