|
|
2 weeks ago | |
|---|---|---|
| backend | 2 weeks ago | |
| frontend | 3 weeks ago | |
| .env.example | 3 weeks ago | |
| .gitignore | 3 weeks ago | |
| README.md | 3 weeks ago | |
| alert-trigger.sh | 2 weeks ago | |
| docker-compose.dev.yml | 3 weeks ago | |
| docker-compose.yml | 2 weeks ago | |
| start.sh | 3 weeks ago |
基于 Web 的 IPMI 服务器硬件监控系统,实时采集和展示服务器温度、风扇转速、电源状态等关键指标,支持告警通知。
| 组件 | 技术 |
|---|---|
| 后端 | Python 3.11 + FastAPI + Uvicorn |
| 数据库 | InfluxDB 2.7 (时序数据库) |
| 前端 | HTML / CSS / JavaScript (纯静态) |
| 监控采集 | ipmitool |
| 容器化 | Docker + Docker Compose |
克隆项目
git clone <repository-url> /opt/ipmi-monitor
cd /opt/ipmi-monitor
配置环境变量
cp .env.example .env
# 编辑 .env 文件,修改密码、Token 等敏感配置
vim .env
一键启动
# 使用启动脚本(推荐)
chmod +x start.sh
./start.sh
# 或手动启动
docker compose up -d
访问系统
在 Web 界面中点击「添加服务器」,填写 IPMI 连接信息:
# 安装 ipmitool
apt-get install -y ipmitool
# 安装 Python 依赖
cd backend
pip install -r requirements.txt
# 参考 InfluxDB 官方文档安装 InfluxDB 2.7
# 配置组织、Bucket 和 API Token
cp .env.example .env
# 编辑 .env,配置 InfluxDB 连接信息
vim .env
cd backend
uvicorn app.main:app --host 0.0.0.0 --port 8000
# /etc/systemd/system/ipmi-monitor.service
[Unit]
Description=IPMI Monitor Backend
After=network.target
[Service]
Type=simple
WorkingDirectory=/opt/ipmi-monitor/backend
EnvironmentFile=/opt/ipmi-monitor/.env
ExecStart=/usr/bin/uvicorn app.main:app --host 0.0.0.0 --port 8000
Restart=always
[Install]
WantedBy=multi-user.target
| 变量名 | 默认值 | 说明 |
|---|---|---|
INFLUXDB_USERNAME |
admin |
InfluxDB 管理员用户名 |
INFLUXDB_PASSWORD |
admin123456 |
InfluxDB 管理员密码 |
INFLUXDB_ORG |
ipmi-monitor |
InfluxDB 组织名称 |
INFLUXDB_BUCKET |
metrics |
InfluxDB 存储桶名称 |
INFLUXDB_TOKEN |
my-super-secret-token |
InfluxDB API Token |
INFLUXDB_PORT |
8086 |
InfluxDB 端口映射 |
BACKEND_PORT |
8000 |
后端服务端口映射 |
POLL_INTERVAL |
60 |
数据采集间隔(秒) |
LOG_LEVEL |
INFO |
日志级别 |
ALERT_TEMP_THRESHOLD |
80 |
温度告警阈值(°C) |
ALERT_FAN_THRESHOLD |
0 |
风扇转速告警阈值(RPM,0 禁用) |
ALERT_POWER_THRESHOLD |
500 |
功耗告警阈值(W,0 禁用) |
SMTP_HOST |
- | SMTP 服务器地址 |
SMTP_PORT |
587 |
SMTP 端口 |
SMTP_USER |
- | SMTP 用户名 |
SMTP_PASSWORD |
- | SMTP 密码 |
ALERT_EMAIL_FROM |
- | 告警发件邮箱 |
ALERT_EMAIL_TO |
- | 告警收件邮箱(逗号分隔) |
WEBHOOK_URL |
- | Webhook 告警 URL |
启动服务后,访问 http://your-server:8000/docs 查看完整的 Swagger UI 文档。
| 方法 | 路径 | 说明 |
|---|---|---|
GET |
/api/health |
健康检查 |
GET |
/api/servers |
获取所有服务器列表 |
POST |
/api/servers |
添加服务器 |
PUT |
/api/servers/{id} |
更新服务器信息 |
DELETE |
/api/servers/{id} |
删除服务器 |
POST |
/api/servers/{id}/scan |
立即扫描服务器传感器 |
GET |
/api/servers/{id}/sensors |
获取服务器传感器数据 |
GET |
/api/servers/{id}/metrics |
获取历史指标数据 |
GET |
/api/metrics/temperature |
获取所有服务器温度数据 |
GET |
/api/metrics/fan |
获取所有服务器风扇数据 |
GET |
/api/metrics/power |
获取所有服务器功耗数据 |
GET |
/api/alerts |
获取告警列表 |
PUT |
/api/alerts/config |
更新告警配置 |
GET |
/api/dashboard |
获取仪表盘汇总数据 |
ALERT_TEMP_THRESHOLD 时触发ALERT_FAN_THRESHOLD 时触发(设为 0 禁用)ALERT_POWER_THRESHOLD 时触发(设为 0 禁用)在 .env 中配置 SMTP 信息即可启用:
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USER=your-email@gmail.com
SMTP_PASSWORD=your-app-password
ALERT_EMAIL_FROM=your-email@gmail.com
ALERT_EMAIL_TO=admin1@example.com,admin2@example.com
支持标准 Webhook 格式,可对接以下平台:
自定义: 填入任意 Webhook URL,POST JSON 格式通知
WEBHOOK_URL=https://hooks.slack.com/services/xxx/yyy/zzz
📸 仪表盘页面
展示所有服务器的概览信息,包括:
- 服务器在线/离线状态
- 关键温度指标
- 风扇运行状态
- 实时功耗统计
- 最近告警摘要
📸 服务器详情页面
单台服务器的详细监控数据:
- 所有传感器列表及当前读数
- 温度趋势图(1h / 6h / 24h / 7d)
- 风扇转速历史图表
- 电压稳定性图表
- 功耗变化趋势
📸 告警管理页面
告警记录和配置管理:
- 历史告警列表
- 告警阈值配置
- 通知渠道设置
- 告警确认/静默操作
📸 服务器管理页面
添加和管理监控服务器:
- 服务器列表(名称、IP、状态)
- 添加/编辑/删除服务器
- 连接测试
- 批量操作
ping <ipmi-ip>docker compose psdocker compose logs backendss -tlnp | grep 8000This project is licensed under the MIT License. See the LICENSE file for details.
MIT License
Copyright (c) 2024 IPMI Monitor Contributors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.