fmhc/strategic-osint-dashboard
GitHub: fmhc/strategic-osint-dashboard
基于CesiumJS 3D地球仪的可自托管实时OSINT态势感知仪表盘,聚合约25个公开数据源并支持可选的LLM分析。
Stars: 0 | Forks: 0
# 🎯 战略 OSINT 仪表盘
一个实时、可自托管的 **OSINT (开源情报) 仪表盘**,可在交互式 3D 地球仪上呈现地缘政治和自然事件信号。它聚合了约 25 个免费/公开的数据源(航班、船舶、地震活动、灾难、网络威胁、互联网健康状况、天气、空间天气、新闻等),并可在实时态势上运行可选的 LLM 分析师。
后端:Node.js + Express + Socket.IO。前端:可自托管的 **CesiumJS** WebGL 地球仪。可选的 Prometheus + Grafana 用于指标监控。




## 功能
- **3D 地球仪** (CesiumJS),支持按需渲染、就地实体更新以及针对密集区域的 billboard 聚类。
- **约 25 个数据源模块**,从 `modules/` 自动发现 —— 例如:
- ✈️ 航班追踪 (OpenSky)、🚢 AIS 船舶 (AISStream)、🌍 地震活动 (USGS + EMSC)
- 🌋 灾难 (GDACS)、🛰️ NASA EONET 自然事件、🔥 NASA FIRMS 热特征
- 💻 网络安全 (CISA KEV 被利用的 CVE)、🌐 互联网健康状况 / IXPs / 海底电缆
- 🌤️ 天气、🌌 空间天气、☢️ 辐射、📰 新闻 (RSS),以及更多
- **可选的 LLM 分析师** —— 通过任何兼容 **OpenAI** 的 endpoint (OpenAI, vLLM, LiteLLM, LM Studio, …) 或 Ollama 生成态势评估和每个实体的情报。
- **警报推送**、威胁等级评分以及每个模块的 **`/healthz`** endpoint。
- 位于 `/metrics` 的 **Prometheus 指标**,可选的 Grafana 仪表盘。
- 优雅降级:失效/触发速率限制的数据源永远不会导致其他模块崩溃。
## 快速开始
```
# 安装 deps
npm install
# 本地 vendor CesiumJS(离线,不使用 CDN)— 约 20 MB 到 public/vendor/cesium
npm run setup:cesium
# 配置(所有值可选;应用合理的默认值)
cp .env.example .env
$EDITOR .env
# 运行
npm start # → http://localhost:3333
```
打开 **http://localhost:3333**。
### Docker
```
cp .env.example .env
docker compose up -d # backend :3333, Grafana :3001, Prometheus :9091
```
在镜像构建期间会自动获取 Cesium 构建版本。
## 配置
所有配置均通过环境变量进行(参见 **`.env.example`**):
| 变量 | 用途 |
|-----|---------|
| `PORT` | HTTP 端口 (默认为 `3333`) |
| `LLM_BASE_URL`, `LLM_API_KEY`, `LLM_MODEL` | 用于分析师的兼容 OpenAI 的 LLM endpoint (可选) |
| `LLM_MODEL_FAST` | 可选的更便宜模型,用于高频的每个实体分析 |
| `OLLAMA_URL`, `OLLAMA_MODEL` | 未设置 `LLM_BASE_URL` 时使用的后备方案 |
| `AISSTREAM_API_KEY` | 用于实时 AIS 船舶追踪的免费密钥 |
| `OPENSKY_USER` / `OPENSKY_PASS` | 可选,提升 OpenSky 免费层级的配额 |
| `ALLOWED_ORIGINS` | 以逗号分隔的 CORS 白名单 (留空 = 开放) |
LLM 是 **可选的** —— 没有它仪表盘也能正常运行;只是 AI 面板会保持空白。
## HTTP endpoint
| 路由 | 描述 |
|-------|-------------|
| `/` | 仪表盘 |
| `/api/state` | 完整的当前全局状态 (所有模块) |
| `/api/status` | 模块注册表 + 计数 |
| `/api/` | 每个模块的数据 |
| `/health` | 存活状态 (运行时间、内存、模块计数) |
| `/healthz` | 每个模块的健康状况 (最后更新时间、陈旧度、错误) |
| `/metrics` | Prometheus 指标 |
## 架构
```
server.js Express + Socket.IO, cron scheduler, global state, routes
modules/loader.js auto-discovers modules/, schedules updates, broadcasts deltas
modules/*.js one data source each (return data via a detected update method)
modules/llm-client.js shared OpenAI-compatible / Ollama client
public/ the Cesium frontend (index.html, app.js, styles.css)
public/vendor/cesium self-hosted CesiumJS (gitignored; run npm run setup:cesium)
test/smoke.js boot + endpoint smoke test (npm test)
```
添加数据源 = 放置一个 `modules/.js`,导出一个带有 `update()` (或类似) 方法的实例来返回数据;加载器会注册它,暴露 `/api/`,并自动广播更新。
## 开发
```
npm run dev # nodemon
npm test # smoke test: node --check all modules + boot + assert endpoints
```
## 许可证
MIT — 详见 [LICENSE](LICENSE)。
基于免费/公开的数据源和开源库构建 (CesiumJS, Express, Socket.IO, prom-client, …)。请遵守各上游服务提供商的条款和速率限制。
标签:3D地球, CesiumJS, ESC4, GNU通用公共许可证, HTTP/HTTPS抓包, MITM代理, Node.js, OSINT, 态势感知, 自定义脚本, 自定义请求头, 请求拦截