varpulis/varpulis
GitHub: varpulis/varpulis
基于 Rust 的高性能流处理引擎,专为安全检测与反欺诈设计,能以单二进制文件部署,实时识别跨事件流的复杂攻击模式并进行预测性告警。
Stars: 2 | Forks: 0
用于实时检测的 Rust 流处理引擎。
专为检测工程、欺诈防范和 MITRE ATT&CK 覆盖而构建的开源 Apache Flink 替代方案。
150 万事件/秒 · 单个 15MB 二进制文件 · 无 JVM
[](https://github.com/varpulis/varpulis/actions/workflows/ci.yml)
[](https://crates.io/crates/varpulis-cli)
[](https://docs.rs/varpulis-core)
[](LICENSE-MIT)
[文档](https://www.varpulis-cep.com/docs/) · [在线演示](https://demo.varpulis-cep.com) · [快速开始](#quick-start) · [示例](examples/) · [基准测试](docs/PERFORMANCE_ANALYSIS.md)
Varpulis 实时检测**跨事件流的模式** —— 即单事件规则会遗漏的“接着发生了什么接着又发生了什么”。将检测逻辑编写为声明式的 VPL 程序,以单个二进制文件进行部署,每核每秒处理 150 万个事件。当您不想要 JVM 集群时,可以用它代替 Apache Flink CEP;当您希望使用一个积极维护的引擎时,可以用它代替 Esper;当您需要查询语言时,可以用它代替编写自定义 Rust 代码。
```
stream FraudAlert = Login as login
-> all Transfer where user_id == login.user_id as txs
-> Logout where user_id == login.user_id
.within(5m)
.trend_aggregate(total: sum_trends(txs.amount), transfers: count_events(txs))
.where(total > 10000)
.forecast(confidence: 0.7, horizon: 2m, warmup: 50)
.emit(user: login.user_id, total: total, transfers: transfers)
```
登录 → *所有* 转账 → 在 5 分钟内登出。捕获每一次转账;以 O(n) 复杂度聚合。仅当总金额超过 1 万美元时才触发。`.forecast()` 预测该模式**即将**完成 —— 在最后一个事件到达之前。没有其他开源流式引擎能做到这一点。
## 快速开始
```
curl -sSf https://raw.githubusercontent.com/varpulis/varpulis/main/scripts/install.sh | sh
varpulis interactive --no-tui
```
```
vpl> event Tick: price: float
vpl> stream Spike = Tick .where(price > 100) .emit(alert: "spike", price: price)
vpl> Tick { price: 42.0 }
vpl> Tick { price: 150.0 }
→ Spike: {"alert":"spike","price":150}
vpl> :save spike_detector.vpl
```
复制粘贴。30 秒。无需文件,无需连接器,无需 Docker。
默认的 `varpulis interactive` 会打开一个分屏 TUI,显示拓扑结构、实时事件、输入和指标。添加 `--no-tui` 使用纯文本 shell,`--json` 用于代理自动化。
## Playground:3 行代码检测温度升高
`.increasing(temperature)` 检测严格上升的传感器值 —— 当趋势中断时发出一次警报。8 个事件输入,1 个警报输出:HVAC-01 在 4 个步骤内从 22 上升到了 55。[在线试用](https://varpulis-cep.com/playground)。
## 安全:杀伤链检测
Varpulis 检测单事件 SIEM 规则会遗漏的**多步攻击序列**。重命名了 PsExec?换了不同的 C2 工具?没关系 —— 行为模式能捕捉到签名规则无法捕捉的内容。
```
# Blue 模式:在 Sysmon 日志中检测 kill chains
varpulis detect --rules rules/ --events sysmon.jsonl
# Red 模式:测试哪些规则能绕过 evasion
varpulis analyze --rules rules/ --baseline normal.jsonl --evasion evasion.jsonl
```
```
┌───────────────────┬─────────────────────┬────────────┬────────────┬───────────┐
│ Rule ┆ MITRE ┆ Baseline ┆ Evasion ┆ Verdict │
╞═══════════════════╪═════════════════════╪════════════╪════════════╪═══════════╡
│ sigma_psexec ┆ T1021.002 ┆ DETECT (1) ┆ MISS ┆ EVADABLE │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌┤
│ behavioral_psexec ┆ T1021.002,T1036.003 ┆ DETECT (1) ┆ DETECT (1) ┆ RESILIENT │
└───────────────────┴─────────────────────┴────────────┴────────────┴───────────┘
```
在 25K+ 事件/秒的速度下,使用真实的 [MORDOR APT29](https://securitydatasets.com/) 数据集进行了验证。关于 Sigma 盲区的深入分析,请参阅 [SIEM 规避实验室](docs/siem-evasion-lab-01-psexec.md) 系列。
## 为什么选择 Varpulis?
| | Varpulis | Flink CEP | Esper | Siddhi |
|---|---|---|---|---|
| **时序模式** (Kleene `+/*`,否定,within) | 原生支持 (SASE+) | 有限 | 支持 | 部分 |
| **预测性预报** | 内置 `.forecast()` | 不支持 | 不支持 | 不支持 |
| **部署** | 单个二进制文件 (15 MB) | JVM 集群 | 嵌入式 JVM | 嵌入式 JVM |
| **DSL** | VPL (专用) | Java API | EPL | SiddhiQL |
| **吞吐量** | 150 万 事件/秒 (单核) | ~50 万 事件/秒¹ | ~100 万 事件/秒¹ | ~30 万 事件/秒¹ |
¹ 近似数据来源于已发布的基准测试和供应商文档;取决于具体负载。
**`.forecast()` 是独一无二的。** 它使用概率后缀树来预测模式*即将*完成 —— 在最后一个事件到达之前。结合 Hawkes 过程强度估计和保形预测区间,它将响应式 CEP 转变为主动式警报。
## 性能
| 项目 | 速度 |
|------|-------|
| 核心 SASE+ 模式匹配 | **150 万 事件/秒** |
| 完整 VPL 流水线 (过滤 + 发出) | **41 万 事件/秒** |
| CLI 端到端 (文件 → 处理 → 输出) | **25.6 万 事件/秒** |
| 多查询 Hamlet (50 个并发) | **95 万 事件/秒** |
| 单符号预测 | **51 ns** |
单核。[详细基准测试 →](docs/PERFORMANCE_ANALYSIS.md)
## 连接器
| | 状态 | 方向 |
|---|---|---|
| MQTT, Kafka, NATS, HTTP | **经过实战检验** | 输入/输出 |
| PostgreSQL/MySQL/SQLite, Redis | 已测试 | 输入/输出 |
| Kinesis, S3, Elasticsearch, Pulsar, CDC | 可用 | 视情况而定 |
每个连接器都是一个独立的 crate。默认二进制文件包含所有连接器;使用 `--features mqtt,kafka` 构建以获得最小化的二进制文件。
## 功能
语言
- 流水线操作符:`.where()`, `.window()`, `.aggregate()`, `.emit()`, `.to()`, `.alert()`
- SASE+ 模式:序列 (`->`)、Kleene 闭包 (`+`, `*`)、否定 (`AND NOT`)
- 预测:`.forecast()` — 基于 PST 的预测,支持置信度和时间范围
- 告警 Webhook:`.alert(webhook: "url", message: "{field}")` — 即发即弃
- 窗口:滚动、滑动、会话、基于计数
- 聚合:15+ 函数(sum, avg, ema, percentile, stddev, ...)— SIMD 加速
- 连接:inner、LEFT、RIGHT、FULL outer,支持 null 填充
- 命令式:`var`、`if/else`、`while`、`for`、函数、lambdas
- 编译时元编程:`for row in 0..4:` 生成流
开发者体验
- 带有分屏拓扑/事件/指标的交互式 TUI (`varpulis interactive`)
- 从样本数据推断 Schema (`varpulis infer --input data.jsonl`)
- 流水线跟踪 / 解释模式 (`--trace`)
- 带有自动重载的监视模式 (`--watch`)
- VS Code 扩展 (LSP:诊断、补全、悬停、跳转定义)
- 用于 AI 辅助开发的 MCP 服务器
- 用于代理自动化的 JSON-line 协议 (`--json`)
运维
- 单个二进制文件、Docker、Kubernetes(包含 Helm chart)
- 基于 Raft 共识的 Coordinator/worker 集群
- 带有 RBAC 和 SSO/OIDC 的多租户 SaaS 模式
- Prometheus 指标、OpenTelemetry 追踪、Grafana 仪表板
- RocksDB 状态持久化,支持可选的 AES-256-GCM 加密
- 熔断器、死信队列、背压信号
## 文档
| | |
|---|---|
| [入门指南](docs/tutorials/getting-started.md) | [交互式 Shell 教程](docs/tutorials/interactive-shell-tutorial.md) |
| [VPL 语言教程](docs/tutorials/language-tutorial.md) | [SASE+ 模式指南](docs/guides/sase-patterns.md) |
| [预测架构](docs/architecture/forecasting.md) | [CLI 参考](docs/reference/cli-reference.md) |
| [集群教程](docs/tutorials/cluster-tutorial.md) | [生产部署](docs/PRODUCTION_DEPLOYMENT.md) |
| [系统架构](docs/architecture/system.md) | [所有教程 →](docs/tutorials/) |
## 贡献
欢迎贡献 —— 请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。
## 许可证
双重许可,采用 [MIT](LICENSE-MIT) 或 [Apache-2.0](LICENSE-APACHE)。
## 致谢
SASE/SASE+ — [Wu et al. SIGMOD 2006](https://dl.acm.org/doi/abs/10.1145/1142473.1142520), [Agrawal et al. SIGMOD 2008](https://www.lix.polytechnique.fr/~yanlei.diao/publications/sase-sigmod08-long.pdf) · Hamlet — [Poppe et al. SIGMOD 2021](https://arxiv.org/abs/2101.00361) · 使用 [Pest](https://pest.rs/) 和 [Tower-LSP](https://github.com/ebkalderon/tower-lsp) 构建
标签:Apache Flink 替代方案, CEP, Cloudflare, DNS解析, HTTP/HTTPS抓包, MITRE ATT&CK, Rust, 便携式工具, 单文件部署, 可视化界面, 声明式语言, 复杂事件处理, 大数据, 子域名突变, 实时检测, 开源项目, 态势感知, 无 JVM, 时间序列分析, 模式匹配, 欺诈检测, 流处理, 目录扫描, 网络安全, 网络流量审计, 自动化资产收集, 请求拦截, 通知系统, 隐私保护, 预测分析, 风控引擎