去年我手头的苹果设备越来越多(2台MacBook、3部iPhone、2个iPad),经常需要查看各设备的存储状态、电池健康度、网络连接情况等信息。虽然每台设备都能单独查看,但分散在不同界面操作实在低效。市面上现成的设备管理工具要么功能冗余,要么隐私性存疑,于是决定自己动手开发一个轻量级的私有监控面板。
这个Python+MySQL+Web方案的核心优势在于:
mermaid复制graph LR
A[苹果设备] -->|SSH/API| B(Python数据采集器)
B --> C(MySQL数据库)
C --> D(Flask Web服务)
D --> E(浏览器可视化)
| 组件 | 方案 | 选型理由 |
|---|---|---|
| 数据采集 | python-magic + subprocess | 最轻量的系统命令调用方案 |
| 数据库 | MySQL 8.0 | 事务支持完善,社区资源丰富 |
| Web框架 | Flask + Gunicorn | 比Django更轻量,适合单体应用 |
| 前端 | Bootstrap + ECharts | 快速搭建响应式图表 |
特别注意:如果监控M系列芯片的Mac,需要特别处理ARM架构的系统命令差异
python复制def get_mac_info():
result = subprocess.run(['system_profiler', 'SPHardwareDataType'],
capture_output=True, text=True)
return parse_output(result.stdout)
# 示例输出解析
def parse_output(raw):
return {
'model': re.search('Model Name: (.*)', raw).group(1),
'serial': re.search('Serial Number: (.*)', raw).group(1),
'storage': re.search('Capacity: (.*)', raw).group(1)
}
需要定期采集的指标包括:
df -h解析)sql复制CREATE TABLE devices (
id INT AUTO_INCREMENT PRIMARY KEY,
device_name VARCHAR(50) NOT NULL,
device_type ENUM('mac','iphone','ipad'),
last_seen DATETIME
);
CREATE TABLE status_logs (
id INT AUTO_INCREMENT PRIMARY KEY,
device_id INT FOREIGN KEY,
metric_type VARCHAR(20),
metric_value FLOAT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
python复制@app.route('/dashboard')
def dashboard():
devices = db.query("SELECT * FROM devices")
return render_template('dashboard.html', devices=devices)
@app.route('/api/status/<device_id>')
def get_status(device_id):
data = db.query("SELECT * FROM status_logs WHERE device_id=%s", (device_id,))
return jsonify(data)
使用ECharts实现:
javascript复制// 示例图表配置
option = {
tooltip: { trigger: 'item' },
series: [{
type: 'pie',
data: [
{value: 45, name: '已用空间'},
{value: 55, name: '剩余空间'}
]
}]
}
使用systemd实现开机自启:
ini复制# /etc/systemd/system/apple_monitor.service
[Unit]
Description=Apple Device Monitor
[Service]
ExecStart=/usr/bin/gunicorn -w 4 app:app
WorkingDirectory=/opt/monitor
User=monitor
[Install]
WantedBy=multi-user.target
_developer组SHOW PROCESSLIST查看连接数python复制with get_db_connection() as conn:
conn.execute(...)
这个项目已经稳定运行8个月,最实用的功能其实是存储空间预警——当任何设备剩余空间低于10%时会发送邮件提醒,成功帮我避免了三次因磁盘写满导致的工作中断。后续计划增加设备地理位置追踪功能,不过需要解决iOS的位置权限问题。