Skip to content

LoRexxar/LMonitor

Repository files navigation

LMonitor 基础架构

1. 项目概览

LMonitor 是一个基于 Django 的监控/采集平台,主要包含两类运行形态:

  • Web 服务:提供 Dashboard 页面、认证、以及若干 API 与 Webhook 接口。
  • 后台守护进程:从数据库读取监控任务,按任务类型分发到插件执行扫描/采集逻辑。

核心入口:

  • Django 管理入口:manage.py
  • Django 配置:settings.py(可选本地覆盖:settings_local.py.example)
  • 路由定义:urls.py

2. 目录结构(关键部分)

  • LMonitor/:Django project 配置层
    • settings.py:数据库、静态资源、外部服务配置、线程配置(会尝试导入 settings_local.py 做覆盖)
    • settings_local.py.example:本地覆盖示例(通常只放数据库等环境差异配置)
    • urls.py:Web、API、Webhook 路由
    • wsgi.py / asgi.py:部署入口
  • botend/:核心业务 App(模型、后台任务、插件、Dashboard)
    • models.py:监控任务/采集结果/SimC 等数据模型
    • controller/:扫描插件体系(各类 monitor/scan)
    • dashboard/:Dashboard 页面与 API(CRUD、SimC 相关)
    • portal/:Portal 页面与 API(面向只读展示)
    • webhook/:对外回调入口(如 gewechat、卦象等)
    • management/commands/:自定义 Django 命令(后台守护进程、第三方初始化)
  • core/:通用能力(线程池、Chrome headless、单次 LLM 请求)
    • threadingpool.py
    • glm.py
  • utils/:基础工具(日志、HTTP/浏览器请求封装等)
    • LReq.py
  • templates/static/:Web 模板与静态资源
  • 脚本:
    • webstart.sh:启动 Web(runserver 0.0.0.0:18000)
    • start.sh、stop.sh:Linux 后台守护
    • winstart.ps1:Windows 后台守护

3. 运行拓扑与职责边界

3.1 Web 服务(Django)

路由集中在 urls.py:

  • Dashboard 页面:/dashboard/(入口视图在 dashboard.py)
  • 认证:/auth/login//auth/register//auth/logout//auth/change-password/(视图在 botend/dashboard/auth_views.py
  • API:/api/...(主要在 api.py)
  • Webhook:/webhook/...(在 botend/webhook/

Web 服务以数据库为中心:Dashboard 展示与管理表数据;API 对部分业务能力提供程序化入口(例如 SimC 相关能力)。

3.2 后台守护进程(监控任务调度与执行)

后台入口为自定义 Django command:LMonitorCoreBackend.py,会调用 LMonitorCoreBackend。

核心调度逻辑位于 botend/views.py:

  • LMonitorCoreBackend:负责创建线程池并启动多个 LMonitorCore.scan 线程循环。
  • LMonitorCore.scan
    • 使用数据库表 MonitorTask 作为任务队列/配置源;
    • wait_time 做最小间隔控制;
    • 根据 type 映射到对应插件类并执行 scan(target)
    • 请求能力通过 LReq 提供(可选 Chrome headless)。

并发控制:

  • 线程池封装在 ThreadPool;
  • 最大线程数、线程限制等参数来自 settings.py 的 THREADPOOL_MAX_THREAD_NUMTHREAD_LIMIT_NUM

4. 插件体系(任务类型 → 扫描实现)

任务类型的映射定义在 config.py:

  • Monitor_Type_BaseObject_List[task.type] 返回对应的扫描类
  • 插件实现位于 botend/controller/plugins/*

典型扩展方式:

  1. botend/controller/plugins/<domain>/ 下新增扫描类(保持与既有插件一致的初始化签名与 scan() 行为)。
  2. 在 config.py 中导入并追加到 Monitor_Type_BaseObject_List(注意顺序决定 type 值)。
  3. 在数据库中创建/更新 MonitorTask,将 type 设置为对应索引。

5. 数据模型(数据库是系统中枢)

核心表集中在 models.py,按用途可粗分为:

  • 监控任务与认证:
    • MonitorTask:监控任务定义(目标、类型、扫描间隔、启用状态)
    • TargetAuth:目标站点认证信息(Cookie 等)
    • MonitorWebhook:任务相关 webhook 配置
  • 采集内容存储:
    • WechatArticleRssArticleWowArticle:内容类数据
    • VulnData:漏洞信息存储
  • SimC 相关:
    • SimcTask:任务执行记录(结果文件、状态等)
    • SimcProfile:配置档案
    • SimcAplKeywordPair:关键字对照
    • SimcTemplate:模板存储

6. 外部集成与能力模块

  • 浏览器/采集:utils/LReq.py + core/chromeheadless.py(插件可选使用真实浏览器渲染)
  • 消息/机器人接口:botend/interface/(如企业微信、gewechat、dify 等)
  • 单次 LLM 请求封装:core/glm.py(当前设计为“初始化一次、每次调用独立 messages”的单轮请求)

7. 运行与部署(最小集)

本节提供“从零到可跑”的最小路径。仓库当前未提供 requirements.txt/pyproject.toml,建议以既有运行环境为准(或在可运行环境中执行 pip freeze > requirements.txt 固化依赖)。

7.1 环境与依赖

  • Python:建议 Python 3.8+(项目最初基于 Django 3.0.1,见 settings.py)
  • 数据库:默认 MySQL;本地快速验证可切到 SQLite(见下文)
  • 配置覆盖:项目会尝试导入 LMonitor/settings_local.py 覆盖配置(参考 settings_local.py.example)

7.2 SQLite 快速启动(推荐用于本地验证)

  1. 设置环境变量:LMONITOR_USE_SQLITE=1
  2. 初始化数据库:python manage.py migrate
  3. 创建管理员:python manage.py createsuperuser
  4. 启动 Web:python manage.py runserver 0.0.0.0:18000(见 webstart.sh)
  5. 启动后台:python manage.py LMonitorCoreBackend(见 start.sh、winstart.ps1)

7.3 MySQL 启动(默认模式)

  1. 准备数据库:创建 LMonitor(或自定义库名),并确保账号/权限可用
  2. 配置连接:在 LMonitor/settings_local.py 中覆盖 DATABASES(示例见 settings_local.py.example)
  3. 初始化数据库:python manage.py migrate
  4. 创建管理员:python manage.py createsuperuser
  5. 启动 Web 与后台:同 7.2

7.4 常用初始化/同步命令

自定义命令位于 botend/management/commands/,常用的包括:

  • python manage.py SyncMonitorTasksFromPlugins:按插件同步任务类型/默认任务
  • python manage.py SyncPortalToolsFromKuangBaoZhanpython manage.py SyncPortalFavicons:同步 Portal 工具与图标
  • python manage.py GewechatInit:gewechat 初始化

7.5 功能入口与访问路径

路由汇总见 urls.py:

  • Portal 首页:/
  • Dashboard:/dashboard/
  • 认证:/auth/login//auth/register//auth/logout//auth/change-password/
  • Portal API:/portal/api/...
  • 业务 API:/api/...
  • Webhook:/webhook/gethexagram/webhook/gewechat

8. 文档与脚本索引

  • 项目结构说明(本文档):README.md
  • SimC 专项研发记录:
    • 规划:task_plan.md
    • 过程记录:progress.md
    • 阶段结论:findings.md
  • 本地预览:preview/(包含静态预览 HTML 与 serve_preview.ps1)
  • 调试与一次性脚本:scripts/(包含 wago/技能差异等相关脚本)

9. 安全与配置建议

settings.py 涉及数据库、Webhook、外部 API、存储等配置项;为避免密钥泄露与环境串用,建议:

  • 不在仓库中保存任何真实 Token/密钥/AK(优先放在 LMonitor/settings_local.py 或环境变量中)
  • 本地与线上环境分别维护配置,避免将测试配置误用于生产
  • 对外回调(Webhook)地址、机器人回调地址优先通过环境变量配置并在发布前复核

About

LMonitor

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors