# zabbix-web **Repository Path**: timtest/zabbix-web ## Basic Information - **Project Name**: zabbix-web - **Description**: No description available - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-05 - **Last Updated**: 2026-03-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Zabbix 维护管理系统 一个基于 Flask 开发的 Web 应用程序,用于统一管理 Zabbix 监控系统的维护计划。通过友好的 Web 界面,用户可以轻松创建、批量导入和管理维护窗口。 ## 功能特性 ### 认证与安全 - ✅ 支持 Zabbix 用户名密码认证(与 Zabbix 系统集成) - ✅ CSRF 跨站请求伪造保护 - ✅ 登录限流保护(防止暴力破解) - ✅ 生产环境强制要求设置安全密钥 ### 维护管理 - ✅ 创建单个维护计划(支持主机和主机组) - ✅ 批量通过 Excel 文件导入维护计划 - ✅ 编辑已有维护计划 - ✅ 删除维护计划(本地和 Zabbix 同步删除) - ✅ 批量删除多个维护计划 - ✅ 相同时间段的维护自动合并 ### 数据展示 - ✅ 查看当前用户创建的维护列表 - ✅ 查看所有可见的 Zabbix 维护(实时从 Zabbix 拉取) - ✅ 维护统计(我的维护数量、总维护数量) ### 问题监控 - ✅ 查看当前问题列表 - ✅ 支持按严重程度和时间过滤 - ✅ 确认问题 - ✅ 关闭问题 ### 系统功能 - ✅ 本地维护数据持久化存储 - ✅ 用户权限控制(只能操作自己的维护) - ✅ 操作日志记录 - ✅ 每周自动日志归档 ## 技术栈 | 组件 | 说明 | |------|------| | Flask 2.3 | Web 框架 | | Flask-WTF | CSRF 保护 | | Flask-Limiter | 登录限流 | | pandas | Excel 文件处理 | | requests | HTTP 请求 | | openpyxl | Excel 文件读写 | ## 环境要求 - Python 3.8+ - Zabbix 5.0+ 服务器 - 现代浏览器(Chrome、Edge、Firefox) ## 安装步骤 ### 1. 克隆或下载项目 ```bash git clone cd zabbix_web ``` ### 2. 创建虚拟环境(推荐) ```bash # Windows python -m venv venv venv\Scripts\activate # Linux/Mac python -m venv venv source venv/bin/activate ``` ### 3. 安装依赖 ```bash pip install -r requirements.txt ``` ### 4. 配置环境变量 ```bash # Windows set SECRET_KEY=your-secret-key set ZABBIX_URL=https://your-zabbix-server.com # Linux/Mac export SECRET_KEY=your-secret-key export ZABBIX_URL=https://your-zabbix-server.com ``` ### 5. 启动应用 ```bash python app.py ``` ### 6. 访问系统 打开浏览器访问:http://localhost:5000 ## 配置说明 ### 环境变量列表 | 变量名 | 默认值 | 说明 | |--------|--------|------| | `SECRET_KEY` | 无(必须设置) | Flask 会话密钥,生产环境必须设置强密钥 | | `ZABBIX_URL` | https://XXX.XXX.com | Zabbix 服务器地址 | | `ZABBIX_VERIFY_SSL` | false | 是否验证 SSL 证书 | | `ZABBIX_API_TIMEOUT` | 15 | API 请求超时时间(秒) | | `ZABBIX_WEB_DATA_DIR` | 项目目录 | 数据存储目录 | | `ZABBIX_WEB_LOG_DIR` | 数据目录/logs | 日志目录 | | `MAINTENANCE_FILE` | maintenances.json | 维护数据文件路径 | | `MAX_UPLOAD_MB` | 20 | 文件上传大小限制(MB) | | `LOG_LEVEL` | INFO | 日志级别(DEBUG/INFO/WARNING/ERROR) | | `FLASK_ENV` | 无 | 设置为 `production` 启用生产模式 | | `FLASK_RUN_HOST` | 0.0.0.0 | 监听地址 | | `FLASK_RUN_PORT` | 5000 | 监听端口 | | `FLASK_DEBUG` | false | 调试模式 | ### 生产环境配置示例 ```bash # Windows set FLASK_ENV=production set SECRET_KEY=your-very-strong-random-key-here set ZABBIX_URL=https://XXXX.XXXX.com set ZABBIX_VERIFY_SSL=true set ZABBIX_WEB_DATA_DIR=C:\zabbix_web\data set ZABBIX_WEB_LOG_DIR=C:\zabbix_web\logs set FLASK_RUN_PORT=5000 # Linux/Mac export FLASK_ENV=production export SECRET_KEY=$(openssl rand -hex 32) export ZABBIX_URL=https://XXXXXXXXX export ZABBIX_VERIFY_SSL=true export ZABBIX_WEB_DATA_DIR=/var/lib/zabbix_web export ZABBIX_WEB_LOG_DIR=/var/log/zabbix_web export FLASK_RUN_PORT=5000 ``` ## 使用说明 ### 1. 登录系统 使用 Zabbix 系统的用户名和密码登录。 ### 2. 创建维护计划 #### 方式一:单个创建 1. 点击首页的"创建维护"按钮 2. 填写维护名称、描述 3. 选择开始时间和结束时间 4. 输入主机名称或选择主机组 5. 点击创建 #### 方式二:Excel 批量导入 上传 Excel 文件批量创建维护,支持相同时间段的维护自动合并。 ### 3. 管理维护 - **我的维护**:查看自己创建的维护 - **全部维护**:查看 Zabbix 上所有可见的维护 - **编辑**:修改维护信息 - **删除**:删除维护(同时删除本地和 Zabbix 中的记录) ### 4. 问题监控 - 查看当前触发的问题 - 按严重程度过滤 - 确认或关闭问题 ## Excel 文件格式 ### 列要求 | 列名 | 说明 | 示例 | |------|------|------| | 内网IP | 主机 IP 地址,多个用逗号分隔 | 192.168.1.100, 192.168.1.101 | | 影响时间段 | 维护时间范围 | 2024/01/15 14:00-18:00 | ### 时间格式说明 - 格式:`YYYY/MM/DD HH:MM-HH:MM` - 示例:`2024/01/15 14:00-18:00` 表示 2024年1月15日 14:00 到 18:00 - 支持跨天:如 `2024/01/15 22:00-24:00` 或 `2024/01/15 22:00-02:00`(次日) - 支持 24:00 表示结束时间为次日 00:00 ### Excel 示例 | 内网IP | 影响时间段 | |--------|-----------| | 192.168.1.100 | 2024/01/15 14:00-18:00 | | 192.168.1.101,192.168.1.102 | 2024/01/16 09:00-12:00 | ## API 接口 ### 认证相关 | 接口 | 方法 | 说明 | |------|------|------| | `/login` | GET/POST | 用户登录 | | `/logout` | GET | 用户登出 | ### 页面路由 | 接口 | 方法 | 说明 | |------|------|------| | `/` | GET | 首页(需登录) | | `/my_maintenances` | GET | 我的维护列表(需登录) | | `/all_maintenances` | GET | 全部维护列表(需登录) | | `/problems` | GET | 问题监控页面(需登录) | ### 维护管理 API | 接口 | 方法 | 说明 | |------|------|------| | `/create_single_maintenance` | POST | 创建单个维护 | | `/update_maintenance` | PUT | 更新维护 | | `/upload_excel` | POST | Excel 批量导入 | | `/delete_maintenance/` | DELETE | 删除单个维护 | | `/delete_selected_maintenances` | POST | 批量删除维护 | | `/get_zabbix_maintenances` | GET | 获取 Zabbix 维护列表 | | `/get_host_groups` | GET | 获取主机组列表 | | `/verify_hosts_and_groups_existence` | POST | 验证主机/主机组是否存在 | ### 问题管理 API | 接口 | 方法 | 说明 | |------|------|------| | `/api/problems` | GET | 获取问题列表 | | `/api/problems/acknowledge` | POST | 确认问题 | | `/api/problems/close` | POST | 关闭问题 | ## 目录结构 ``` zabbix_web/ ├── app.py # 应用入口 ├── requirements.txt # Python 依赖 ├── README.md # 说明文档 │ ├── common/ # 公共模块 │ ├── __init__.py │ └── decorators.py # 装饰器(如登录验证) │ ├── infra/ # 基础设施 │ ├── __init__.py │ └── runtime.py # 运行时配置(日志、路径、Zabbix 配置) │ ├── routes/ # 路由模块 │ ├── __init__.py │ ├── auth.py # 认证路由 │ ├── pages.py # 页面路由 │ ├── problems.py # 问题管理路由 │ └── maintenance.py # 维护管理路由 │ ├── services/ # 服务层 │ ├── __init__.py │ ├── storage.py # 数据存储服务 │ ├── time_utils.py # 时间工具 │ ├── log_archive.py # 日志归档服务 │ └── zabbix.py # Zabbix API 服务 │ ├── templates/ # HTML 模板 │ ├── login.html │ ├── index.html │ ├── my_maintenances.html │ ├── all_maintenances.html │ └── problem_monitor.html │ ├── uploads/ # 上传文件目录 ├── data/ # 数据存储目录(运行时创建) │ └── maintenances.json # 维护数据 └── logs/ # 日志目录(运行时创建) ├── app.log └── archive/ # 归档日志 ``` ## 安全注意事项 1. **生产环境必须设置强密钥**:使用随机生成的密钥,不要使用默认值 2. **启用 HTTPS**:生产环境应使用 SSL/TLS 加密 3. **限制访问**:配置防火墙只允许受信任的 IP 访问 4. **定期更新**:保持依赖包更新到最新版本 5. **日志监控**:定期检查日志文件,发现异常及时处理 ## 常见问题 ### Q: 登录时提示 "CSRF token is missing" A: 这是正常的 CSRF 保护机制。请确保登录表单中包含了 CSRF token 字段。 ### Q: 上传 Excel 失败 A: 请检查: 1. Excel 文件格式是否正确 2. 是否包含"内网IP"和"影响时间段"两列 3. 时间格式是否符合要求 ### Q: 无法连接到 Zabbix A: 请检查: 1. `ZABBIX_URL` 环境变量是否正确 2. 网络连接是否正常 3. Zabbix API 是否可访问 ### Q: 维护创建成功但 Zabbix 中没有 A: 请检查: 1. 主机名称是否正确 2. 是否有权限访问这些主机 3. 查看日志文件排查具体错误 ## 许可证 MIT License