- 首页
- 深入了解
- 技术架构
技术架构
进程模型
| main(qidun-main) | guard(qidun-guard) | |
|---|---|---|
| 端口 | 529:HTTPS(API + Web 面板单端口,mTLS) | 530:心跳 /ping + 蜜罐(仅本机回环合法) |
| 职责 | 全部监控模块 + Web 服务 + 配置 + 审计 | 仅看门狗上报 + 守卫(心跳 / 蜜罐 / 拉起 main) |
| 运行载体 | 同一可执行文件,run --role main|guard 区分;Windows 注册为两个 SCM 服务,Linux 注册为两个 systemd unit | |
| 互保 | 每 2 秒互探;连续 3 次失联 → 自动拉起对方(先服务管理器,后派生进程),30 秒重启间隔保护 | |
模块自愈机制
- 模块 panic 不拖垮进程:捕获、记日志、按指数退避(5s → 10s → 20s → 40s…)自动重启。
- 连续 panic 5 次才永久停用并记日志;运行状态登记到模块健康注册表。
- 三层保活叠加:模块级(上述兜底)→ 进程级(guard 互拉)→ 系统级(SCM / systemd 重启策略)。
数据目录
Windows: C:\ProgramData\Qidun Linux: /var/lib/qidun
├── qidun.db # SQLite 主库(WAL 模式,busy_timeout=5s;运行时伴随 -wal/-shm)
├── certs/ # mTLS 证书体系(ca / server / client-local)
├── logs/
│ ├── qidun-main.log # main 进程日志
│ └── qidun-guard.log # guard 进程日志
└── mysql-backups/ # MySQL 备份产物:<实例名>/<库名>-时间戳.sql[.gz]
- 数据库连接
MaxOpenConns=1+ WAL:双进程并发访问安全,迁移带锁重试。 - 配置存 settings 表(键前缀
cfg.),WebUI 保存后即时生效,部分项需重启(见 配置项)。 - 全部业务表默认保留 180 天,后台每日自动清理。
- 数据目录解析优先级:
--data-dir参数 >QIDUN_DATA_DIR环境变量 > 自动探测运行中服务 > 平台默认目录。
优雅重启与升级
- 面板「保存端口 / 手动重启」触发优雅重启:先拉起新进程成功,再让旧进程走正常关停(HTTP 优雅关闭 3 秒 → 模块退出 → 关库并 checkpoint WAL);拉起失败则保持旧进程继续服务,杜绝空窗。
- 服务模式下重启走 SCM / systemd(不产生孤儿进程);前台模式自动派生分离的自身进程。
- 升级流程(替换二进制 → 幂等重装服务 → 重置自检基线)详见 升级与维护。
技术栈
| 层 | 选型 |
|---|---|
| 语言 / 运行时 | Go 1.23+(跨平台交叉编译,Linux 构建 CGO_ENABLED=0) |
| 存储 | SQLite(modernc 纯 Go 驱动,无 cgo 依赖) |
| 系统指标 | gopsutil v4(CPU / 内存 / 磁盘 / 网络 / 进程 / IO) |
| 服务管理 | kardianos/service(Windows SCM / Linux systemd) |
| 认证与加密 | bcrypt(口令)、EC P-256 自签 CA、AES-256-GCM(MySQL 密码落库)、SHA-256 + HMAC(自检基线) |
| 前端 | 原生 JS + ECharts(go:embed 内嵌,无外部 CDN 依赖) |
| 测试 | go test ./...(约 50 用例,含 -race) |
性能特征
- 常驻内存极小(面板实时显示自身内存占用并设阈值告警,默认 1GB)。
- 大目录指纹用「相对路径 + 大小 + mtime」聚合,不逐文件读内容;单文件快速路径一致即跳过重哈希。
- 历史指标环形缓冲 720 点(约 12 小时 @60 秒采集),趋势图直接读内存。
- 告警上报批量(每 3 秒最多 10 条)、队列仅保留最新 500 条 pending/fail,防 DB 膨胀。
Qidun 启盾 v1.2.17 · 离线静态文档 · 界面基于 KuoqiUI · 返回首页