# 网站监控预警系统 **Repository Path**: caodaimin/jk ## Basic Information - **Project Name**: 网站监控预警系统 - **Description**: 一个实时监控网站状态并提供预警通知的开源系统,支持多种监控策略和告警方式,确保网站稳定运行。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-02 - **Last Updated**: 2026-04-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 自用型 Python 网站监控系统 一个面向个人站长的 MVP 监控工具,用于在 Linux 服务器上定时检测网站是否异常,并在发现标题异常或跨域跳转时通过 SMTP 邮件提醒。项目不包含 Web 后台,重点是能跑、能监控、能告警、能留证据。 ## 功能概览 - 直接访问检测 - 记录原始 URL、最终 URL、HTTP 状态码、页面标题、响应耗时、跳转链 - 检测标题是否匹配预期 - 检测最终是否跳转到白名单外域名 - 搜索引擎入口检测 - 支持百度、必应、Google - 使用 Playwright 搜索关键词并点击命中的目标结果 - 记录搜索引擎、关键词、命中链接、最终落地 URL、标题、跳转链 - 搜索点击后如果落地到其他网站,判定为严重告警 - 异常时优先保留截图和 HTML 快照 - 邮件告警 - 支持 SMTP、多个收件人 - 标题异常发普通提醒 - 直接访问跨域跳转、搜索入口跨域跳转发严重告警 - 同类异常 30 分钟内去重 - 本地 SQLite 存储 - 内置 `websites`、`search_rules`、`check_tasks`、`check_logs`、`alert_logs`、`smtp_configs`、`domain_whitelists`、`system_logs` ## 项目结构 ```text . ├─ main.py ├─ requirements.txt ├─ examples/ │ ├─ bootstrap.sql │ └─ cron.example ├─ site_monitor/ │ ├─ cli.py │ ├─ db.py │ ├─ logging_utils.py │ ├─ models.py │ ├─ repositories.py │ ├─ schema.sql │ ├─ settings.py │ ├─ checks/ │ ├─ services/ │ └─ utils/ └─ tests/ ``` ## 运行环境 - Python 3.11+ - Linux cron - Chromium 运行依赖 - SMTP 邮箱账户 ## 安装 1. 创建虚拟环境并安装依赖 ```bash python3.11 -m venv .venv source .venv/bin/activate pip install -r requirements.txt python -m playwright install chromium ``` 2. 初始化数据库 ```bash python main.py init-db ``` 3. 导入最小示例配置 ```bash sqlite3 data/monitor.db < examples/bootstrap.sql ``` 4. 按你的站点信息修改数据库中的配置 - `websites`: 主站 URL、预期标题、主域名 - `domain_whitelists`: 允许跳转到的域名 - `search_rules`: 搜索引擎、关键词、目标域名 - `smtp_configs`: SMTP 参数和收件人列表 ## 命令 ```bash python main.py init-db python main.py run-all python main.py run-site --id 1 ``` 命令说明: - `init-db`: 创建 SQLite 表和索引 - `run-all`: 执行全部启用的网站检测任务 - `run-site --id 1`: 执行站点 `id=1` 的直接访问检测,以及该站点下所有启用的搜索规则 ## 数据与日志目录 - 数据库默认路径:`data/monitor.db` - 日志目录:`logs/site_monitor.log` - 证据目录:`data/evidence/` 异常时会保存: - 直接访问异常:HTML 快照 - 搜索入口异常:截图和 HTML 快照 ## 判定规则 - 主域名判定不依赖公共后缀库,MVP 仅按 hostname 与白名单规则判断 - 标题匹配支持 `exact` 和 `contains` - 搜索页验证码、结果未命中、选择器失效默认记为 `ENGINE_FAILURE` 或 `RESULT_NOT_FOUND` - 只有“点击搜索结果后落地到白名单外域名”才视为严重告警 ## Linux cron 示例 见 [examples/cron.example](/D:/AI-pyhton/jk/examples/cron.example)。 示例逻辑: - 每 10 分钟执行一次全量检测 - 标准输出与错误输出写入 cron 日志 ## Playwright 运行提示 - Google、百度、Bing 搜索页可能受地区、验证码、反爬策略影响 - 首次部署后建议先手动执行 `python main.py run-site --id 1` - 如果服务器缺少浏览器运行库,请按 Playwright 官方提示补装系统依赖 ## 测试 ```bash python -m unittest tests.test_schema tests.test_domains tests.test_direct_check tests.test_search_check tests.test_alerts ``` ## 当前 MVP 边界 - 不包含 Web 后台、用户系统、权限系统 - SMTP 密码当前明文保存在 SQLite,适合单机自用,不适合多人共享环境 - 搜索结果点击策略优先选择首个命中目标域名的可见链接,不做复杂 SEO 结果解析