python快速巡检百台linux系统,并汇总到运维机生成word报告

liftword1周前 (05-13)技术文章4

要实现自动化巡检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报告,满足运维需求。

相关文章

Linux系统下,五大步骤安装Python

一、下载Python包网上教程大多是通过官方地址进行下载Python的,但由于国内网络环境问题,会导致下载很慢,所以这里建议通过国内镜像进行下载例如:淘宝镜像 http://npm.taobao.or...

linux安装python

linux安装python3.5.11.linux如果已经安装了python2.* 不要管它!!!2.安装依赖环境  一定要使用yum去安装!!! 因为有的包有依赖或者升级需要,使用rpm取消强制依赖...

1分钟搞定!Python超速工具uv换国内镜像,下载速度飙升10倍

1分钟搞定!Python超速工具uv换国内镜像,下载速度飙升10倍作为搞运维的老手,我太清楚 Python 包下载速度慢是啥滋味了。今天我来教你用 3 行代码给 uv 换上清华或者阿里云的镜像,这样就...

Linux和Windows下:Python Crypto模块安装方式区别

一、Linux环境下:from Crypto.Signature import PKCS1_v1_5 如果导包报错: ImportError: No module named 'Crypt...

linux下Python版HTTP服务器(用于分享文件)

1、在终端进入你想分享的文件夹中,然后输入:python -m SimpleHTTPServer 端口号如:python -m SimpleHTTPServer 80092、在别的机器的浏览器地址栏输...

Windows 10 20H2新特性概览:细节优化 提升使用体验

来源:cnBeta.COM微软计划在5月28日发布Windows 10 May 2020(Version 2004/20H1)功能更新。在该功能更新发布之后微软将开发重心迁移到20H2和21H1功能更...