No Description

cnbugs a5535fd771 fix: 固定后端镜像名为 ipmi-monitor-backend:latest 2 weeks ago
backend e1a09d8783 fix: 修复组件解析器 - 支持更多CPU/风扇/电源识别格式,添加告警触发脚本 2 weeks ago
frontend e989084108 feat: 告警规则增加CPU/内存/硬盘/PCIe设备在位告警 3 weeks ago
.env.example 792b09d8fa master 3 weeks ago
.gitignore 44632a4293 fix: 将InfluxDB数据持久化到本地目录 3 weeks ago
README.md 792b09d8fa master 3 weeks ago
alert-trigger.sh e1a09d8783 fix: 修复组件解析器 - 支持更多CPU/风扇/电源识别格式,添加告警触发脚本 2 weeks ago
docker-compose.dev.yml 84bcc56da1 fix: 开发环境使用host网络模式解决BMC网络隔离问题 3 weeks ago
docker-compose.yml a5535fd771 fix: 固定后端镜像名为 ipmi-monitor-backend:latest 2 weeks ago
start.sh 792b09d8fa master 3 weeks ago

README.md

IPMI Monitor

基于 Web 的 IPMI 服务器硬件监控系统,实时采集和展示服务器温度、风扇转速、电源状态等关键指标,支持告警通知。

功能特性

  • 🖥️ 多服务器管理 - 支持添加和管理多台 IPMI 服务器
  • 📊 实时监控 - 实时采集温度、风扇转速、电压、电源功耗等传感器数据
  • 📈 历史趋势 - 基于 InfluxDB 时序数据库,支持历史数据查询和趋势图表
  • ⚠️ 智能告警 - 可配置温度、风扇、功耗等阈值,触发告警通知
  • 📧 多渠道通知 - 支持邮件、Webhook(Slack / 钉钉 / 企业微信)告警推送
  • 🐳 一键部署 - Docker Compose 一键部署,开箱即用
  • 📱 响应式界面 - 纯静态前端,适配桌面和移动设备
  • 🔌 API 驱动 - 完整的 RESTful API,支持二次开发

技术栈

组件 技术
后端 Python 3.11 + FastAPI + Uvicorn
数据库 InfluxDB 2.7 (时序数据库)
前端 HTML / CSS / JavaScript (纯静态)
监控采集 ipmitool
容器化 Docker + Docker Compose

快速开始(Docker Compose 一键部署)

前置要求

  • Docker >= 20.10
  • Docker Compose >= 2.0

部署步骤

  1. 克隆项目

    git clone <repository-url> /opt/ipmi-monitor
    cd /opt/ipmi-monitor
    
  2. 配置环境变量

    cp .env.example .env
    # 编辑 .env 文件,修改密码、Token 等敏感配置
    vim .env
    
  3. 一键启动

    # 使用启动脚本(推荐)
    chmod +x start.sh
    ./start.sh
    
    # 或手动启动
    docker compose up -d
    
  4. 访问系统

  1. 添加第一台服务器

在 Web 界面中点击「添加服务器」,填写 IPMI 连接信息:

  • 服务器名称(别名)
  • IPMI IP 地址
  • 用户名 / 密码

手动部署步骤

1. 安装依赖

# 安装 ipmitool
apt-get install -y ipmitool

# 安装 Python 依赖
cd backend
pip install -r requirements.txt

2. 安装并配置 InfluxDB

# 参考 InfluxDB 官方文档安装 InfluxDB 2.7
# 配置组织、Bucket 和 API Token

3. 配置环境变量

cp .env.example .env
# 编辑 .env,配置 InfluxDB 连接信息
vim .env

4. 启动后端服务

cd backend
uvicorn app.main:app --host 0.0.0.0 --port 8000

5. 使用 systemd 管理(可选)

# /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

API 文档概览

启动服务后,访问 http://your-server:8000/docs 查看完整的 Swagger UI 文档。

主要 API 端点

方法 路径 说明
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 格式,可对接以下平台:

  • Slack: 填入 Slack Incoming Webhook URL
  • 钉钉: 填入钉钉机器人 Webhook URL
  • 企业微信: 填入企业微信机器人 Webhook URL
  • 自定义: 填入任意 Webhook URL,POST JSON 格式通知

    WEBHOOK_URL=https://hooks.slack.com/services/xxx/yyy/zzz
    

截图

仪表盘

📸 仪表盘页面

展示所有服务器的概览信息,包括:

  • 服务器在线/离线状态
  • 关键温度指标
  • 风扇运行状态
  • 实时功耗统计
  • 最近告警摘要

服务器详情

📸 服务器详情页面

单台服务器的详细监控数据:

  • 所有传感器列表及当前读数
  • 温度趋势图(1h / 6h / 24h / 7d)
  • 风扇转速历史图表
  • 电压稳定性图表
  • 功耗变化趋势

告警管理

📸 告警管理页面

告警记录和配置管理:

  • 历史告警列表
  • 告警阈值配置
  • 通知渠道设置
  • 告警确认/静默操作

服务器管理

📸 服务器管理页面

添加和管理监控服务器:

  • 服务器列表(名称、IP、状态)
  • 添加/编辑/删除服务器
  • 连接测试
  • 批量操作

常见问题

ipmitool 无法连接服务器

  1. 确认目标服务器 IPMI/BMC 已启用
  2. 确认网络连通性:ping <ipmi-ip>
  3. 确认 IPMI 凭据正确
  4. 检查防火墙规则(默认端口 623/UDP)

Docker 部署后无法访问

  1. 检查容器状态:docker compose ps
  2. 查看日志:docker compose logs backend
  3. 确认端口未被占用:ss -tlnp | grep 8000

数据采集失败

  1. 确认后端容器已安装 ipmitool
  2. 确认容器网络可达 IPMI 地址
  3. 查看后端日志排查具体错误

License

This 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.