使用Python搭建监控系统通常涉及以下几个步骤:
系统信息收集
使用`psutil`库来获取CPU、内存、磁盘和网络等信息。
```python
import psutil
cpu_usage = psutil.cpu_percent()
memory_usage = psutil.virtual_memory().percent
disk_usage = psutil.disk_usage('/').percent
network_connections = len(psutil.net_connections())
print("CPU使用率:", cpu_usage)
print("内存使用率:", memory_usage)
print("磁盘使用率:", disk_usage)
print("网络连接数:", network_connections)
数据存储
可以将收集到的数据存储到数据库中,例如使用MySQL。
```sql
CREATE TABLE `stat` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`host` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE = InnoDB AUTO_INCREMENT = 0 DEFAULT CHARSET = utf8;
Web服务搭建
使用Flask等Web框架创建Web服务,实现监控页面展示和接受POST提交的数据。
```python
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/monitor', methods=['POST'])
def monitor():
data = request.get_json()
处理数据并存储到数据库
return jsonify({"status": "success", "data": data}), 200
if __name__ == '__main__':
app.run()
任务调度
使用`prometheus_client`库实现任务调度和监控指标收集。
```python
from prometheus_client import start_http_server, Gauge
import requests
tasks_running = Gauge('tasks_running', '当前运行的任务数')
def fetch_task_status():
获取任务状态的逻辑
return {'running_tasks': 10}
def update_metrics():
task_status = fetch_task_status()
tasks_running.set(task_status['running_tasks'])
def collect_metrics(interval=10):
while True:
update_metrics()
time.sleep(interval)
start_http_server(8000)
collect_metrics()
网络监控
使用`scapy`和`socket`库进行网络数据包捕获和分析。
```python
from scapy.all import *
def get_network_info():
net_io = psutil.net_io_counters()
return net_io.bytes_sent, net_io.bytes_recv
def monitor_network(interval=1):
print("监控网络接口流量...")
while True:
bytes_sent, bytes_recv = get_network_info()
print(f"发送字节:{bytes_sent}, 接收字节:{bytes_recv}")
time.sleep(interval)
monitor_network(2)
数据可视化
使用图表库如`matplotlib`或`highstock`将数据可视化。
报警系统
可以设置报警条件,当监控指标超过预设阈值时发送邮件或其他通知。
```python
import smtplib
from email.mime.text import MIMEText
from email.header import Header
def send_email(subject, message, to_email):
from_email = ""
msg = MIMEText(message)
msg['Subject'] = Header(subject, 'utf-8')
msg['From'] = Header(from_email, 'utf-8')
msg['To'] = Header(to_email, 'utf-8')
smtpObj = smtplib.SMTP('smtp.example.com', 25)
smtpObj.login(from_email, "your_password")
smtpObj.sendmail(from_email, [to_email], msg.as_string())
smtpObj.quit()
以上步骤涵盖了从系统信息收集到数据存储、Web服务搭建、任务调度、网络监控、数据可视化以及报警系统的搭建。你可以根据具体需求调整和完善这些步骤。