# 服务状态监控系统 ## 项目概述 这是一个基于Django框架开发的服务状态监控系统,用于实时监控各种服务的运行状态,支持多种检测方式,并提供Web界面和REST API接口。 ## 主要功能 ### 1. 服务管理 - 支持服务分组管理 - 可添加多种类型的服务监控: - Ping检测:通过ICMP ping检查主机可达性 - TCP端口检测:检查指定主机的TCP端口是否开放 - HTTP请求:发送HTTP请求检查Web服务状态 - 自定义脚本:支持通过自定义脚本进行服务检测 - 支持服务启用/禁用功能 ### 2. 状态监控 - 实时记录服务状态变化 - 保存服务检测历史记录 - 记录响应时间和错误信息 - 自动更新服务状态 ### 3. Web界面 - 服务列表展示 - 服务详细信息查看 - 检测记录历史查询 - 直观的状态可视化 ### 4. REST API - 提供完整的API接口 - 支持服务信息查询 - 支持检测记录查询 - 支持API文档浏览 ## 技术栈 - **后端框架**:Django 4.2 - **API框架**:Django REST Framework - **数据库**:SQLite(默认),支持扩展到MySQL/PostgreSQL - **语言**:Python 3.8+ - **前端**:Django模板系统 ## 安装部署 ### 1. 环境准备(Ubuntu 22.04/24.04) ```bash # 更新系统包 sudo apt update && sudo apt upgrade -y # 安装Python3和pip sudo apt install python3 python3-pip python3-venv python3-dev -y # 安装Git sudo apt install git -y # 克隆项目(示例路径,根据实际情况调整) cd /opt sudo git clone https://your-repo-url/statuspage.git cd statuspage # 创建虚拟环境 sudo python3 -m venv venv # 激活虚拟环境 source venv/bin/activate # 安装依赖 pip install --upgrade pip pip install -r requirements.txt ``` ### 2. 数据库迁移 ```bash # 激活虚拟环境(如果未激活) source venv/bin/activate # 执行数据库迁移(使用自定义settings文件) python manage.py migrate --settings=statuspage.生产系统settings # 创建超级用户(用于后台管理) python manage.py createsuperuser --settings=statuspage.生产系统settings ``` ### 3. 收集静态文件 ```bash # 激活虚拟环境(如果未激活) source venv/bin/activate # 收集静态文件(使用自定义settings文件) python manage.py collectstatic --noinput --settings=statuspage.生产系统settings ``` ### 4. 开发服务器(仅用于测试) ```bash # 激活虚拟环境(如果未激活) source venv/bin/activate # 启动开发服务器(仅本地访问,使用自定义settings文件) python manage.py runserver --settings=statuspage.生产系统settings # 或允许外部访问(开发环境) python manage.py runserver 0.0.0.0:8000 --settings=statuspage.生产系统settings ``` 访问地址:http://your-server-ip:8000 ### 5. 生产环境部署(Ubuntu) #### 5.1 安装Gunicorn和Nginx ```bash # 激活虚拟环境 source venv/bin/activate # 安装Gunicorn pip install gunicorn # 退出虚拟环境 deactivate # 安装Nginx sudo apt install nginx -y ``` #### 5.2 创建Gunicorn系统服务 ```bash # 创建服务文件 sudo nano /etc/systemd/system/statuspage.service ``` 在文件中添加以下内容: ```ini [Unit] Description=Gunicorn instance to serve statuspage After=network.target [Service] User=www-data Group=www-data WorkingDirectory=/opt/statuspage Environment="PATH=/opt/statuspage/venv/bin" Environment="DJANGO_SETTINGS_MODULE=statuspage.生产系统settings" ExecStart=/opt/statuspage/venv/bin/gunicorn --workers 3 --bind unix:/opt/statuspage/statuspage.sock statuspage.wsgi:application [Install] WantedBy=multi-user.target ``` 启动并启用服务: ```bash # 重新加载systemd sudo systemctl daemon-reload # 启动服务 sudo systemctl start statuspage # 开机自启 sudo systemctl enable statuspage # 查看服务状态 sudo systemctl status statuspage ``` #### 5.3 配置Nginx ```bash # 创建Nginx配置文件 sudo nano /etc/nginx/sites-available/statuspage ``` 添加以下配置: ```nginx server { listen 80; server_name your-domain.com www.your-domain.com; charset utf-8; location / { include proxy_params; proxy_pass http://unix:/opt/statuspage/statuspage.sock; } location /static/ { alias /opt/statuspage/static/; expires 30d; } location /media/ { alias /opt/statuspage/media/; expires 30d; } # 错误页面配置 error_page 404 /404.html; error_page 500 502 503 504 /500.html; location = /500.html { root /opt/statuspage/static; } } ``` 启用站点并重启Nginx: ```bash # 启用站点 sudo ln -s /etc/nginx/sites-available/statuspage /etc/nginx/sites-enabled/ # 测试Nginx配置 sudo nginx -t # 重启Nginx sudo systemctl restart nginx ``` #### 5.4 配置防火墙 ```bash # 允许SSH、HTTP和HTTPS流量 sudo ufw allow ssh sudo ufw allow 'Nginx Full' # 启用防火墙 sudo ufw enable # 查看防火墙状态 sudo ufw status ``` #### 5.5 配置HTTPS(推荐) 使用Certbot获取免费SSL证书: ```bash # 安装Certbot sudo apt install certbot python3-certbot-nginx -y # 获取并配置SSL证书 sudo certbot --nginx -d your-domain.com -d www.your-domain.com # 配置自动续约 sudo certbot renew --dry-run ``` ## 6. 部署验证 访问以下地址验证部署: - Web界面:http://your-domain.com 或 https://your-domain.com - Django后台:http://your-domain.com/admin - API文档:http://your-domain.com/api/docs/ ## 7. 生产环境配置注意事项 在生产环境部署前,务必修改以下配置项: ### 7.1 修改配置文件 编辑 `statuspage/生产系统settings.py` 文件,修改以下关键配置: ```python # 1. 关闭DEBUG模式 DEBUG = False # 2. 设置允许的主机名或IP地址 ALLOWED_HOSTS = ['your-domain.com', 'www.your-domain.com', 'your-server-ip'] # 3. 生成新的SECRET_KEY # 可以使用Django提供的密钥生成工具: # python -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())" SECRET_KEY = 'your-new-secret-key-here' # 4. 可选:配置更安全的数据库(如PostgreSQL或MySQL) # DATABASES = { # 'default': { # 'ENGINE': 'django.db.backends.postgresql_psycopg2', # 'NAME': 'statuspage', # 'USER': 'dbuser', # 'PASSWORD': 'dbpassword', # 'HOST': 'localhost', # 'PORT': '5432', # } # } ``` ### 7.2 重启服务 修改配置后,需要重启Gunicorn服务: ```bash sudo systemctl restart statuspage ``` ## 项目结构 ``` . ├── status/ # 主应用目录 │ ├── migrations/ # 数据库迁移文件 │ ├── templates/ # HTML模板 │ │ └── status/ # 状态相关模板 │ ├── __init__.py │ ├── admin.py # Django后台管理 │ ├── api_urls.py # API路由配置 │ ├── api_views.py # API视图 │ ├── apps.py # 应用配置 │ ├── models.py # 数据模型 │ ├── serializers.py # API序列化器 │ ├── tests.py # 测试文件 │ ├── urls.py # Web路由配置 │ ├── utils.py # 工具函数 │ └── views.py # Web视图 ├── statuspage/ # 项目配置目录 │ ├── __init__.py │ ├── asgi.py # ASGI配置 │ ├── urls.py # 根路由配置 │ ├── wsgi.py # WSGI配置 │ └── 生产系统settings.py # 生产环境配置 ├── .gitignore ├── db.sqlite3 # SQLite数据库文件 ├── manage.py # Django管理脚本 └── requirements.txt # 项目依赖 ``` ## 使用说明 ### Web界面 1. **服务列表**:访问首页查看所有服务的状态 2. **服务详情**:点击服务名称查看详细信息和历史记录 3. **API文档**:访问 `/api/docs/` 查看API文档 ### API接口 #### 主要API端点 - `GET /api/services/` - 获取所有服务列表 - `GET /api/services//` - 获取单个服务详情 - `GET /api/services//records/` - 获取服务检测记录 - `GET /api/groups/` - 获取服务分组列表 ## 开发说明 ### 日志记录 项目使用loguru库进行日志记录,在关键操作处添加了日志输出,便于调试和监控。 ### 扩展建议 1. 添加定时检测任务(可使用Celery或Django Q) 2. 添加告警功能(邮件、短信、微信通知等) 3. 添加服务状态统计和图表展示 4. 实现更完善的权限管理 5. 添加服务依赖关系管理 ## 许可证 MIT License