要实现自动化巡检100台Linux系统,并将巡检结果统一发送到运维机生成Word报告,可以采用以下方案:
---
### 1. 整体架构
1. **分布式巡检**:
- 在每台被巡检的Linux系统上运行一个巡检脚本,收集本地系统信息。
- 将巡检结果发送到运维机(集中管理服务器)。
2. **集中处理**:
- 运维机接收所有巡检结果,汇总并生成Word报告。
3. **通信方式**:
- 使用SSH或HTTP API将巡检结果发送到运维机。
---
### 2. 实现步骤
#### 2.1 在被巡检机器上运行巡检脚本
每台Linux系统上运行一个Python脚本,收集本地系统信息,并将结果发送到运维机。
```python
# local_inspection.py
import psutil
import requests
import json
from datetime import datetime
# 运维机的API地址
SERVER_URL = "http://your-ops-server-ip:5000/report"
# 收集系统信息
def collect_system_info():
info = {
"hostname": psutil.users()[0].name, # 主机名
"cpu_usage": psutil.cpu_percent(interval=1), # CPU使用率
"memory_usage": psutil.virtual_memory().percent, # 内存使用率
"disk_usage": psutil.disk_usage('/').percent, # 磁盘使用率
"network_sent": psutil.net_io_counters().bytes_sent, # 网络发送字节数
"network_recv": psutil.net_io_counters().bytes_recv, # 网络接收字节数
"load_avg": psutil.getloadavg(), # 系统负载
"timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S") # 巡检时间
}
return info
# 发送巡检结果到运维机
def send_report(info):
try:
response = requests.post(SERVER_URL, json=info)
if response.status_code == 200:
print("巡检结果发送成功")
else:
print(f"发送失败: {response.status_code}")
except Exception as e:
print(f"发送失败: {e}")
if __name__ == "__main__":
system_info = collect_system_info()
send_report(system_info)
```
---
#### 2.2 在运维机上运行接收服务
运维机上运行一个Flask服务,接收所有被巡检机器的报告,并保存到本地。
```python
# server.py
from flask import Flask, request, jsonify
from datetime import datetime
import json
app = Flask(__name__)
# 存储所有巡检结果
reports = []
# 接收巡检结果的API
@app.route('/report', methods=['POST'])
def receive_report():
report = request.json
reports.append(report)
print(f"收到来自 {report['hostname']} 的巡检报告")
return jsonify({"status": "success"}), 200
# 生成Word报告
def generate_word_report():
from docx import Document
doc = Document()
doc.add_heading('Linux系统巡检汇总报告', 0)
for report in reports:
doc.add_heading(f"主机: {report['hostname']}", level=1)
doc.add_paragraph(f"巡检时间: {report['timestamp']}")
doc.add_paragraph(f"CPU使用率: {report['cpu_usage']}%")
doc.add_paragraph(f"内存使用率: {report['memory_usage']}%")
doc.add_paragraph(f"磁盘使用率: {report['disk_usage']}%")
doc.add_paragraph(f"网络发送字节数: {report['network_sent']}")
doc.add_paragraph(f"网络接收字节数: {report['network_recv']}")
doc.add_paragraph(f"系统负载: {report['load_avg']}")
doc.add_paragraph("\n")
report_filename = f"System_Inspection_Report_{datetime.now().strftime('%Y%m%d_%H%M%S')}.docx"
doc.save(report_filename)
print(f"Word报告已生成: {report_filename}")
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000)
```
---
#### 2.3 定时任务
1. **在被巡检机器上**:
- 使用`cron`定时运行`local_inspection.py`,例如每小时执行一次:
```bash
0 * * * * /usr/bin/python3 /path/to/local_inspection.py
```
2. **在运维机上**:
- 定时运行`generate_word_report`函数,生成汇总报告。例如每天凌晨1点生成报告:
```bash
0 1 * * * /usr/bin/python3 /path/to/server.py --generate-report
```
---
#### 2.4 扩展功能
1. **异常报警**:
- 在`local_inspection.py`中,如果某项指标超过阈值(如CPU使用率>90%),可以发送报警信息(邮件、短信等)。
```python
def send_alert(message):
# 使用邮件或短信API发送报警
print(f"报警: {message}")
```
2. **更多巡检项**:
- 检查服务状态、日志文件、文件系统完整性等。
```python
def check_services():
services = ["nginx", "mysql", "docker"]
for service in services:
status = subprocess.run(['systemctl', 'is-active', service], capture_output=True, text=True)
if status.stdout.strip() != 'active':
send_alert(f"服务 {service} 未运行")
```
3. **数据持久化**:
- 将巡检结果保存到数据库(如MySQL、MongoDB),便于后续分析和查询。
---
### 3. 部署与运行
1. **在被巡检机器上**:
- 安装Python和依赖库:
```bash
pip install psutil requests
```
- 部署`local_inspection.py`并配置定时任务。
2. **在运维机上**:
- 安装Python和依赖库:
```bash
pip install flask python-docx
```
- 运行`server.py`:
```bash
python3 server.py
```
---
### 4. 报告示例
生成的Word报告内容如下:
```
Linux系统巡检汇总报告
主机: server1
巡检时间: 2025-02-04 14:30:00
CPU使用率: 45.2%
内存使用率: 60.3%
磁盘使用率: 55.8%
网络发送字节数: 102345678
网络接收字节数: 987654321
系统负载: (0.5, 0.4, 0.3)
主机: server2
巡检时间: 2025-02-04 14:30:00
CPU使用率: 90.5%
内存使用率: 85.2%
磁盘使用率: 70.1%
网络发送字节数: 123456789
网络接收字节数: 987654321
系统负载: (1.2, 1.1, 1.0)
```
---
通过以上方案,你可以实现100台Linux系统的自动化巡检,并生成统一的Word报告,满足运维需求。