要实现自动化巡检并生成包含巡检日期、巡检人员等信息的Word报告,你可以使用Python的`psutil`库进行系统巡检,并使用`python-docx`库生成Word文档。以下是一个完整的示例代码,帮助你实现这一目标。
### 1. 安装依赖库
首先,确保安装了所需的Python库:
```bash
pip install psutil python-docx
```
### 2. 实现自动化巡检并生成Word报告
以下代码实现了系统巡检(CPU、内存、磁盘、网络等),并将结果生成到Word文档中,同时添加巡检日期和巡检人员信息。
```python
import psutil
import datetime
from docx import Document
from docx.shared import Inches
# 巡检人员信息
inspector_name = "运维人员张三"
# 获取当前日期和时间
inspection_date = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
# 创建Word文档
doc = Document()
doc.add_heading('Linux系统自动化巡检报告', 0)
# 添加巡检信息
doc.add_paragraph(f"巡检日期: {inspection_date}")
doc.add_paragraph(f"巡检人员: {inspector_name}")
doc.add_paragraph("\n")
# 检查CPU使用率
def check_cpu():
cpu_usage = psutil.cpu_percent(interval=1)
doc.add_heading('CPU使用率', level=2)
if cpu_usage > 80:
doc.add_paragraph(f"警告: CPU使用率过高: {cpu_usage}%", style='List Bullet')
else:
doc.add_paragraph(f"CPU使用率正常: {cpu_usage}%", style='List Bullet')
# 检查内存使用情况
def check_memory():
mem = psutil.virtual_memory()
doc.add_heading('内存使用情况', level=2)
if mem.percent > 80:
doc.add_paragraph(f"警告: 内存使用率过高: {mem.percent}%", style='List Bullet')
else:
doc.add_paragraph(f"内存使用率正常: {mem.percent}%", style='List Bullet')
# 检查磁盘使用情况
def check_disk():
disk = psutil.disk_usage('/')
doc.add_heading('磁盘使用情况', level=2)
if disk.percent > 80:
doc.add_paragraph(f"警告: 磁盘使用率过高: {disk.percent}%", style='List Bullet')
else:
doc.add_paragraph(f"磁盘使用率正常: {disk.percent}%", style='List Bullet')
# 检查网络使用情况
def check_network():
net_io = psutil.net_io_counters()
doc.add_heading('网络使用情况', level=2)
doc.add_paragraph(f"发送字节数: {net_io.bytes_sent}", style='List Bullet')
doc.add_paragraph(f"接收字节数: {net_io.bytes_recv}", style='List Bullet')
# 检查系统负载
def check_system_load():
load_avg = psutil.getloadavg()
doc.add_heading('系统负载', level=2)
doc.add_paragraph(f"1分钟负载: {load_avg[0]}", style='List Bullet')
doc.add_paragraph(f"5分钟负载: {load_avg[1]}", style='List Bullet')
doc.add_paragraph(f"15分钟负载: {load_avg[2]}", style='List Bullet')
# 主函数
def main():
# 执行巡检
check_cpu()
check_memory()
check_disk()
check_network()
check_system_load()
# 保存Word文档
report_filename = f"System_Inspection_Report_{inspection_date.replace(':', '-')}.docx"
doc.save(report_filename)
print(f"巡检报告已生成: {report_filename}")
if __name__ == "__main__":
main()
```
---
### 3. 代码说明
1. **巡检内容**:
- 使用`psutil`库获取CPU、内存、磁盘、网络和系统负载信息。
- 如果某项指标超过阈值(如CPU使用率>80%),在报告中标记为警告。
2. **生成Word报告**:
- 使用`python-docx`库创建Word文档。
- 添加标题、巡检日期、巡检人员信息。
- 将巡检结果以段落形式添加到文档中。
3. **报告保存**:
- 报告文件名包含巡检日期,便于区分不同时间的报告。
- 报告保存为`.docx`格式。
---
### 4. 扩展功能
如果你希望报告更全面,可以添加以下功能:
- **服务状态检查**:
使用`subprocess`调用`systemctl`命令检查关键服务的状态。
```python
import subprocess
def check_services():
services = ["nginx", "mysql", "docker"]
doc.add_heading('服务状态', level=2)
for service in services:
status = subprocess.run(['systemctl', 'is-active', service], capture_output=True, text=True)
if status.stdout.strip() == 'active':
doc.add_paragraph(f"服务 {service} 运行正常", style='List Bullet')
else:
doc.add_paragraph(f"警告: 服务 {service} 未运行", style='List Bullet')
```
- **日志检查**:
使用`subprocess`调用`journalctl`或`tail`命令检查系统日志。
```python
def check_logs():
log_errors = subprocess.run(['journalctl', '-p', 'err', '-b'], capture_output=True, text=True)
doc.add_heading('系统错误日志', level=2)
if log_errors.stdout:
doc.add_paragraph("发现系统错误日志:", style='List Bullet')
doc.add_paragraph(log_errors.stdout)
else:
doc.add_paragraph("未发现系统错误日志", style='List Bullet')
```
- **图表支持**:
使用`matplotlib`生成图表(如CPU使用率趋势图),并将图表插入Word文档。
```python
import matplotlib.pyplot as plt
def add_cpu_chart():
cpu_usage = [psutil.cpu_percent(interval=1) for _ in range(10)]
plt.plot(cpu_usage)
plt.title('CPU使用率趋势')
plt.xlabel('时间')
plt.ylabel('使用率 (%)')
chart_filename = 'cpu_usage.png'
plt.savefig(chart_filename)
doc.add_picture(chart_filename, width=Inches(5))
```
---
### 5. 定时任务
可以使用`cron`或`systemd`定时运行脚本,例如每天凌晨1点执行:
```bash
0 1 * * * /usr/bin/python3 /path/to/your/script.py
```
---
### 6. 报告示例
生成的Word报告内容如下:
```
Linux系统自动化巡检报告
巡检日期: 2025-02-04 14:30:00
巡检人员: 运维人员张三
CPU使用率
? CPU使用率正常: 45.2%
内存使用情况
? 内存使用率正常: 60.3%
磁盘使用情况
? 磁盘使用率正常: 55.8%
网络使用情况
? 发送字节数: 102345678
? 接收字节数: 987654321
系统负载
? 1分钟负载: 0.5
? 5分钟负载: 0.4
? 15分钟负载: 0.3
```
---
通过以上方法,你可以实现一个全面的自动化巡检工具,并生成专业的Word报告,满足运维需求。