Linux 服务器巡检不再难,包含Python和shell脚本可输出表格
项目简介
本项目提供了两个服务器巡检脚本,用于监控 Linux 服务器的各项状态指标,帮助管理员及时发现并解决服务器问题。并在上一个脚本的基础上又添加几个新功能。
脚本列表
- server_monitor.py - Python 版本的服务器巡检脚本
- server_monitor.sh - Shell 版本的服务器巡检脚本
功能介绍
这两个脚本的主要区别:Python 版本可以生成报告文件,而 Shell 版本直接输出到终端。
- 系统信息摘要:操作系统、内核版本、CPU 型号、核心数、总内存、总磁盘空间、公网 IP、负载平均值
- CPU 状态:使用率、1分钟/5分钟/15分钟负载、负载状态
- 磁盘状态:各挂载点的使用率、总空间、可用空间、状态
- 系统服务状态:运行的服务数量、总服务数量、关键服务状态
- Top 进程:CPU 和内存使用最高的前 5 个进程
- 网络与安全状态:端口状态、防火墙状态、SELinux 状态
- 网络状态:连接数、网络延迟、总发送/接收流量、接口信息
- 安全状态:登录失败次数、失败的用户、权限问题、SSH 配置、自动更新、入侵防御系统、密码策略、SUID 文件检查、最近登录
脚本下载地址:
https://github.com/peopleurl/linux-patrol-scripts
git clone git@github.com:peopleurl/linux-patrol-scripts.git
安装依赖
Python 版本依赖
- 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
使用方法
server_monitor.py (Python 版本)
配置告警参数(可选): 编辑脚本中的 ALERT_CONFIG 部分,设置告警类型和 webhook URL
运行脚本:
python server_monitor.py
查看报告: 脚本会生成 server_monitor_YYYYMMDD_HHMMSS.txt 和 server_monitor_YYYYMMDD_HHMMSS.csv 格式的报告文件
server_monitor.sh (Shell 版本)
添加执行权限:
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)
示例:添加 Apache 服务监控
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'}
- 钉钉:在钉钉群中添加机器人,获取 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 的状态,并转换为更易理解的描述
- 最近登录记录只显示用户、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-01IP地址: 192.168.1.100巡检时间: 2024-01-01 12:00:00【CPU 状态】使用率: 10.5%1分钟负载: 0.255分钟负载: 0.1515分钟负载: 0.10负载状态: 正常【内存状态】使用率: 60.2%总内存: 16.00GB可用内存: 6.35GB状态: 正常...
最后
系统兼容性:本脚本未在所有版本的 Linux 系统上进行测试,可能在某些特定版本或配置的系统上存在兼容性问题
使用建议:由于水平有限,脚本可能存在未发现的 bug 或性能问题。请务必在测试环境中运行验证后,再在生产环境中使用
权限要求:部分监控功能需要 root 权限才能正常执行,请确保以适当的权限运行脚本
网络依赖:网络状态检测功能依赖于外部网络连接,请确保服务器能够正常访问外部网络
使用范围:本脚本仅用于服务器监控,使用过程中如有问题,请及时反馈