仰望星辰工作室

better-staridc-MNBT

better-staridc-MNBT/ docs/integration/node-connector.md 5.2 KB · 126 行 原始文件
Z zfhsh first commit 1 天前
1---
2title: MNBT 节点连接器
3description: MNBT 私有宝塔面板 Python 插件,支持违禁词扫描、站点访问统计与远程查询
4---
5
6# MNBT 节点连接器
7
8MNBT 私有节点宝塔面板插件。支持文件扫描、站点访问统计等功能。
9
10---
11
12## 目标
13
14- **违禁词扫描** — 增量/全量扫描站点文件,检测违禁词并上报
15- **站点访问统计** — 实时采集 nginx 访问日志,聚合 PV/UV/IP/URI/IP排行/客户端/蜘蛛/状态码等指标,存储在本地 SQLite
16- **远程查询** — MNBT 主控通过 BT 面板 API 按需查询统计数据,不主动上报
17
18---
19
20## 架构
21
22```
23┌─ BT 节点服务器 ───────────────────────────────────────────────────┐
24│ │
25│ /www/wwwlogs/*.log │
26│ │ stat 检测变化 │
27│ ▼ │
28│ worker.py (后台常驻,每 10s 一轮) │
29│ ├─ heartbeat → MNBT /api/node.php?act=heartbeat │
30│ ├─ collect_site_stats → 解析新行 → maxiaole.db (SQLite 聚合) │
31│ ├─ forbidden_scan → 扫描文件 → 上报 MNBT │
32│ └─ pull_task → 执行 MNBT 下发的任务 │
33│ │
34│ mnbt_connector_main.py (BT 面板插件 API 入口) │
35│ ├─ get_status / start / stop / run_once │
36│ ├─ trigger_full_scan │
37│ └─ get_site_list / get_site_detail / get_site_trend / ... │
38│ ↑ │
39│ maxiaole.db (SQLite) ←── 查询数据 │
40└─────────────────────────────────────────────────────────────────────┘
41```
42
43---
44
45## 站点统计功能
46
47| 功能 | 说明 |
48|------|------|
49| 实时采集 | 轮询 `/www/wwwlogs/*.log`,stat 检测文件变化,增量读取新行 |
50| 小时级聚合 | 每小时 PV/UV/流量,支持折线趋势图 |
51| URI 排行 | 当日 Top URI 请求数 + 流量 |
52| IP 排行 | 当日 Top IP 请求数 + 流量 |
53| 状态码分布 | 2xx / 3xx / 4xx / 5xx 各状态码请求数和流量 |
54| 蜘蛛统计 | 识别 Baidu/Google/Bing/Sogou/360 等蜘蛛 |
55| 客户端统计 | PC vs 移动端、Chrome/Firefox/Safari/Edge 等浏览器分布 |
56| 日志位置追踪 | SQLite `log_position` 表记录每个日志文件的 inode/size/mtime,支持日志轮转 |
57
58---
59
60## SQLite 表结构 (maxiaole.db)
61
62| 表名 | 用途 | 唯一键 |
63|------|------|--------|
64| `log_position` | 文件读取位置追踪 | site_name |
65| `site_hourly_stats` | 小时级 PV/UV/流量 | site_name + hour |
66| `site_uri_stats` | URI 排行 | site_name + date + uri |
67| `site_ip_stats` | IP 排行 | site_name + date + ip |
68| `site_spider_stats` | 蜘蛛统计 | site_name + date + spider_name |
69| `site_client_stats` | 客户端分布 | site_name + date + client_type + client_name |
70| `site_status_stats` | 状态码分布 | site_name + date + status_code |
71| `site_method_stats` | 请求方式统计 | site_name + date + method |
72| `site_error_logs` | 错误日志逐条存储 | 自增 id |
73
74---
75
76## 插件 API
77
78通过 BT 面板插件路由调用:`POST /plugin?action=a&name=mnbt_connector&s={method}`
79
80| 方法 | 参数 | 返回 |
81|------|------|------|
82| `get_status` | - | 运行状态、节点信息 |
83| `start` | - | 启动工作进程 |
84| `stop` | - | 停止工作进程 |
85| `run_once` | - | 执行一次工作周期 |
86| `trigger_full_scan` | - | 触发全量扫描 |
87| `get_site_list` | - | 所有站点 + 今日 PV/UV/流量 |
88| `get_site_overview` | site, range | 今日/昨日/7d/30d 概览指标 |
89| `get_site_trend` | site, range | 趋势数据点列表 |
90| `get_site_spider_analysis` | site, date | 蜘蛛来访分析 |
91| `get_site_client_stats` | site, date | 客户端分布 |
92| `get_site_method_stats` | site, date | 请求方式统计 |
93| `get_site_ip_rank` | site, date, limit | IP 排行 |
94| `get_site_uri_rank` | site, date, limit | URI 排行 |
95| `get_site_error_logs` | site, date, limit, min_status | 错误日志列表 |
96| `get_site_recent_logs` | site, lines | 原始日志(实时读文件) |
97
98---
99
100## Config
101
102| 字段 | 说明 |
103|------|------|
104| `mnbt_url` | MNBT 主控地址 |
105| `platform_secret` | 平台密钥 (MN_config.api) |
106| `node_id` | 节点 ID |
107| `node_secret` | 节点密钥 |
108| `interval_seconds` | 工作间隔 (秒) |
109| `capabilities` | 能力列表 |
110
111---
112
113## 部署
114
115```bash
116# 安装插件
117bash /www/server/panel/plugin/mnbt_connector/install.sh
118
119# 编辑配置
120vim /www/server/panel/plugin/mnbt_connector/config.json
121
122# 手动执行一次
123python3 /www/server/panel/plugin/mnbt_connector/worker.py --once
124```
125
126> 源码目录:`bt_plugins/mnbt_connector/`