miketigerblue/tiger2go

GitHub: miketigerblue/tiger2go

一个用 Go 重写的高并发威胁情报摄取引擎,专注于可观测性、可靠性和生产级运维,解决大规模数据流的高效摄取与去重问题。

Stars: 1 | Forks: 0

TigerFetch — hunt the signal

Tiger2Go - TigerFetch

hunt_the_signal()

## 为什么选择 Rust → Go 的移植? 你看到的大多数开源移植都是 **Go → Rust**(性能、内存安全、严肃系统的感觉)。 这个项目**故意反方向**进行。 `tiger2go` 仓库是 **tigerfetch** 的 Go 移植版本,原作者使用 Rust 实现。这里的目标不是“Go 比 Rust 更好”,而是: **在这个系统中,核心问题不是内存所有权,而是运营摄取(ingestion)**: - 高吞吐 I/O(RSS/Atom、NVD JSON、KEV、每日 EPSS) - 不可信输入(Feed 就像是穿着雨衣的用户输入) - 并发、重试、退避、速率限制 - 指标、健康度、长期运行行为 - 在现实故障模式下的可靠性 Go 天然适合这类场景: - Goroutine 与成熟运行时让并发工作协调更轻松, - 代码整体更易读、更易运维。 Rust 依然优秀——尤其在内存所有权与对抗环境下的正确性是关键时。 但在这个系统中,这类战斗主要发生在别处:调度、摄取卫生、可观测性。 因此移植方向不是“降级”,而是**为交付与运维优化**。 一个实际副作用:原始 Rust 实现边界清晰、数据流明确。这让移植变得可行(且可审查),因为架构能干净地映射到 Go。 如果你关心“分层”哲学: - **Rust** 擅长基础层(解析器、密码学、运行时、热路径) - **Go** 擅长控制面(摄取器、调度器、服务、指标) - **Python** 擅长推理层(增强、ML、语义胶水) `tiger2go` 有意落在“控制面”区域。 ### 设计重点 数据源 → 摄取 → 标准化 → 存储 → 下游分析 - 来源:RSS/Atom、NVD、CISA KEV、EPSS - 摄取:并发 Worker、速率限制、重试/退避 - 卫生:清洗、校验、幂等/去重 - 运维:`/metrics`、`/healthz`、迁移、可部署性 ## 🚀 功能特性 * **RSS/Atom 摄取**:使用 `gofeed` 并通过 `bluemonday` 进行并行获取与清洗。 * **CVE 增强**: * **NVD**:按时间窗口获取 CVE 详情(120 天分片),支持 API Key 与速率限制(v2.0 API)。 * **CISA KEV**:同步存储已知被利用漏洞目录。 * **EPSS**:每日批量摄取漏洞利用预测评分系统(约 30 万条/天)。 * **数据库**:使用 `pgx/v5` 连接池的 PostgreSQL 存储。 * **迁移**:使用 `pressly/goose` 的嵌入式 Schema 迁移。 * **可观测性**:Prometheus 指标(`/metrics`)、健康检查(`/healthz`),并提供两个预置 Grafana 仪表板(运营 + 威胁情报)。 * **Grafana 仪表板**: * **TigerFetch 运营** ~30 个 Prometheus 面板:Feed 健康、NVD/EPSS/KEV 流水线状态、上游延迟、DB 池、Go 运行时。 * **威胁情报** ~20 个 SQL 面板:EPSS Top 25、CVSS × EPSS 危险区、NVD 严重度分布、CISA KEV 目录、Feed 内容覆盖。 ## 🛠️ 构建与运行 ### 先决条件 * Go 1.26+ * PostgreSQL 16+ ### 构建 ``` # 构建二进制文件(通过 ldflags 注入版本/提交信息) make build ``` ### 运行 确保工作目录中有 `Config.toml`(或使用环境变量)。 ``` # 运行应用程序 ./tigerfetch ``` 应用将: 1. 运行待处理的数据库迁移。 2. 在 `:9101` 启动 HTTP 指标服务。 3. 启动 RSS 源、NVD、KEV、EPSS 的并发 Worker。 ### 全栈(Docker Compose) ``` docker compose up --build ``` 这会启动 PostgreSQL、TigerFetch、Prometheus 与 Grafana。仪表板会自动预置: | 服务 | URL | 凭证 | |------|-----|------| | TigerFetch 指标 | http://localhost:9101/metrics | — | | Prometheus | http://localhost:9090 | — | | Grafana | http://localhost:3000 | admin / admin | ### 测试 集成测试需要运行的数据库连接。 ``` # 运行单元测试和集成测试 go test -v ./internal/... ``` ## ⚙️ 配置 配置通过 `Config.toml` 与环境变量管理。关键字段: | 节 | 键 | 描述 | |----|----|------| | 全局 | `database_url` | PostgreSQL DSN 连接串 | | 全局 | `server_bind` | 指标服务器地址:端口(默认 `0.0.0.0:9101`) | | 全局 | `ingest_interval` | Feed 轮询间隔(默认 `1h`) | | `[[feeds]]` | `name`、`url`、`feed_type`、`tags` | RSS/Atom 源 | | `[nvd]` | `enabled` | 启用 NVD 摄取 | | `[nvd]` | `api_key` | 可选 NVD API Key 以提升速率限制 | | `[nvd]` | `poll_interval` | NVD 轮询间隔 | | `[nvd]` | `page_size` | 每页结果数 | | `[epss]` | `enabled` | 启用 EPSS 摄取(文件较大) | | `[epss]` | `poll_interval` | EPSS 轮询间隔 | | `[epss]` | `page_size` | EPSS API 分页大小 | | `[kev]` | `enabled` | 启用 CISA KEV 摄取 | | `[kev]` | `poll_interval` | KEV 轮询间隔 | ## 🏗️ 项目结构 * `cmd/tigerfetch`:应用入口。 * `internal/config`:Viper 配置加载。 * `internal/db`:数据库连接与迁移逻辑。 * `internal/ingestor`:RSS/Atom Feed 处理逻辑。 * `internal/cve`:NVD、KEV、EPSS 专用模块。 * `internal/metrics`:Prometheus 指标定义、pgxpool 收集器、HTTP 中间件。 * `grafana/`:预置 Grafana 仪表板与数据源配置。 * `migrations/`:SQL 迁移文件(兼容 Goose)。
标签:API集成, Atom, CVE, EPSS, ESC4, EVTX分析, Go, JSON, KVE, LLM增强, NVD, OSINT, RSS, Ruby工具, Tigert2Go, 下游系统, 健康检查, 内存安全, 去重, 可观测性, 可视化界面, 威胁情报, 实时威胁, 并发, 开发者工具, 搜索引擎优化, 摄取引擎, 操作可靠性, 数字签名, 数据流, 日志审计, 测试用例, 管道, 结构化输出, 自定义请求头, 重试与退避, 长时运行, 高I/O