logo
0
0
WeChat Login

XScan-Scheduler

XScan-Scheduler 是一个分布式扫描任务调度系统,用于管理和协调多个扫描节点(Agent)执行安全扫描任务。

项目概述

XScan-Scheduler 作为中央调度器,负责任务分发、节点管理和状态监控。系统通过 RabbitMQ 消息队列进行任务分发,通过 gRPC 心跳服务监控节点状态,并将扫描结果存储在 MySQL 数据库中。

主要功能

  • 任务调度:从数据库获取待执行的扫描任务,并通过 RabbitMQ 分发到合适的扫描节点
  • 节点管理:通过心跳服务监控各扫描节点的状态、资源使用情况和在线情况
  • 任务状态跟踪:实时监控扫描任务的执行状态,包括运行中、完成和异常状态
  • 消息通知:通过企业微信机器人发送任务状态变更通知

系统架构

核心组件

  1. 心跳服务 (Heartbeat Service)

    • 通过 gRPC 接收各节点的心跳包
    • 监控节点状态(CPU、内存使用率等)
    • 处理节点上线、离线事件
    • 接收并处理任务执行状态更新
  2. 消息队列服务 (MQ Service)

    • 连接 RabbitMQ 消息中间件
    • 从数据库获取待执行任务并发布到对应队列
    • 动态管理扫描队列的创建和删除
    • 处理任务取消指令

技术栈

  • 编程语言:Go
  • 消息队列:RabbitMQ
  • 数据库:MySQL
  • 通信协议:gRPC (节点心跳)、HTTP API (RabbitMQ 管理)
  • 配置管理:Viper
  • 日志系统:自定义日志模块

快速开始

环境要求

  • MySQL 5.7+
  • RabbitMQ 3.8+
  • 程序运行将会自动创建Rabbit交换机和队列等

配置说明

config.yaml 文件包含以下主要配置项:

mysql: delay_time: 5 # 轮询数据库时间间隔(秒) db: host: 127.0.0.1 port: 3306 user: root password: password dbname: mcp_server rabbitMQ: address: 127.0.0.1 port: 5672 user: guest api_port: 15672 password: guest logs: log_level: "debug" # 日志级别:debug, info, warn, error log_file: "logs/app.log" max_size_mb: 100 max_backups: 3 max_age: 7 enable_tasks: ["heartbeat_service", "base_mq_service"] # 启用的服务模块 robot: weixin_webhook: https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=your-key heartbeat: port: 8972 host: "0.0.0.0"

节点管理

节点状态

节点状态由心跳服务维护,包括以下几种状态:

  • 在线:节点正常发送心跳包
  • 离线:节点超过 1 分钟未发送心跳包
  • 已删除:节点在配置中被标记为删除

节点配置

节点配置包括:

  • 节点名称 (AgentName)
  • 公网 IP (PublicIp)
  • 并发数 (Concurrency)
  • 线程数 (Threads)
  • 扫描策略 (Tactics)
  • 超时设置 (GlobalTimeout, ModelTimeout)
  • 队列名称 (QueueName)

任务管理

任务状态

  • 等待中:任务已创建但尚未分发
  • 已分发:任务已发送到 RabbitMQ 队列
  • 运行中:任务正在被节点执行
  • 已完成:任务执行完毕
  • 异常:任务执行出错
  • 已取消:任务被手动取消

任务操作

  • 创建任务:在数据库中创建新的扫描任务
  • 取消任务:向节点发送取消指令
  • 查询状态:通过数据库或心跳服务获取任务状态

开发指南

项目结构

xscan-scheduler/ ├── assets/ # 静态资源 ├── config/ # 配置相关 │ ├── common/ # 通用配置 │ └── module/ # 模块配置 ├── dist/ # 编译输出 ├── logs/ # 日志文件 ├── pkg/ # 公共包 │ ├── application/ # 应用框架 │ ├── dao/ # 数据访问对象 │ ├── log/ # 日志模块 │ ├── messages/ # 消息通知 │ ├── model/ # 数据模型 │ ├── mysql/ # 数据库连接 │ └── proto/ # gRPC 协议定义 ├── service/ # 服务实现 │ ├── heartbeat/ # 心跳服务 │ └── scan_mq/ # 消息队列服务 ├── main.go # 主程序入口 ├── config.yaml # 配置文件 └── Dockerfile # Docker 构建文件

添加新服务

  1. service 目录下创建新的服务包
  2. 实现 application.Service 接口
  3. main.go 中注册新服务
  4. config.yamlenable_tasks 中启用新服务

许可证

本项目采用 LICENSE 许可证。

联系方式

如有问题或建议,请提交 Issue 或联系项目维护者。

About

xscan调度程序

304.00 KiB
0 forks0 stars1 branches0 TagREADMEApache-2.0 license
Language
Go88.2%
License5.6%
Markdown4.8%
gitignore0.9%
Others0.5%