SaikiranReddyG/PULSE
GitHub: SaikiranReddyG/PULSE
PULSE 是一个单机安全事件集成平台,将 sentinel、syswatch 和 netlab 等本地工具的事件统一归集到 SQLite,通过 Redis 分发并提供 Discord 告警和终端仪表盘可视化。
Stars: 0 | Forks: 0
# PULSE 平台
PULSE 是一个单机安全事件平台。它接收来自本地工具的事件,将其存储在 SQLite 中,通过 Redis 进行分发,针对高优先级信号发送 Discord 警报,并在终端仪表盘中展示所有内容。
它专为在单台 Linux 机器上运行而构建,运维开销低。该技术栈是有意保持精简的:一个 HTTP 接收器、一个数据库、一个事件流、一对后台 worker,以及一个用于实时可视化展示的 Textual 仪表盘。
## 解决的问题
当 sentinel、syswatch 和 netlab 都在产生有用的数据时,问题不再是如何收集,而在于如何进行关联。PULSE 为您提供了一个统一归集这些事件的平台,让您可以查看发生了什么、正在发生什么,以及哪些需要关注。
## 工作原理
```
flowchart LR
Sentinel[sentinel] -->|POST /events| Receiver[pulse receiver]
Syswatch[syswatch] -->|POST /events| Receiver
Netlab[netlab] -->|POST /events| Receiver
Receiver --> SQLite[(SQLite)]
Receiver --> Redis[(Redis Streams)]
Receiver -->|high / critical| Discord1[Discord webhook]
Redis --> AlertWorker[pulse-alert-worker]
AlertWorker --> Discord2[Discord webhook]
SQLite --> DigestWorker[pulse-digest-worker]
DigestWorker --> Discord3[Discord digest]
SQLite --> Dashboard[Textual dashboard]
```
接收器会验证传入的事件,如果提供了 `event_id` 则据此进行去重,将其写入 SQLite,并发布到名为 `pulse:events:` 的 Redis stream 中。高优先级和严重事件可立即触发 Discord。当启用 `PULSE_RETENTION_DAYS` 时,保留任务会移除旧的数据行。
警报 worker 监听 sentinel Redis stream 并应用来自 `config/alert_rules.yml` 的警报规则。摘要 worker 读取过去 24 小时的数据库活动并发送预定的摘要。仪表盘以只读模式读取数据库,并通过最近的总数、严重程度细分、来源细分以及特定于来源的标签页,保持终端视图的实时更新。
## 关键组件
- [receiver/app.py](receiver/app.py) 暴露 `GET /health` 和 `POST /events` 接口。
- [receiver/storage.py](receiver/storage.py) 负责 SQLite 持久化、去重以及 Redis stream 分发。
- [receiver/alerting.py](receiver/alerting.py) 针对高优先级事件发送即时的 Discord webhook。
- [workers/alert_worker.py](workers/alert_worker.py) 处理 sentinel stream 事件并应用限流的警报规则。
- [workers/digest_worker.py](workers/digest_worker.py) 生成预定的 24 小时摘要。
- [dashboard/pulse_dashboard/app.py](dashboard/pulse_dashboard/app.py) 渲染 Textual 界面。
- [systemd/](systemd) 包含用于启动技术栈和传感器服务的 unit 文件。
- [tmux/launch-pulse-ops.sh](tmux/launch-pulse-ops.sh) 打开一个包含仪表盘和实时服务日志的 tmux 会话。
## 事件契约
接收器接受单个事件对象或包含事件的 JSON 数组。每个事件应包含:
- `schema_version`
- `timestamp`
- `source`
- `event_type`
- `severity`
- `payload`
可选字段包括 `source_version`、`host` 和 `event_id`。
支持的来源有 `sentinel`、`netlab` 和 `syswatch`。其他来源也会被接受,但会发出警告,因为本项目是围绕这三个来源设计的。
严重程度取值包括 `info`、`low`、`medium`、`high` 和 `critical`。
## 仓库结构
- `receiver/` HTTP 摄取、存储和即时警报。
- `workers/` 用于警报和摘要的后台 worker。
- `dashboard/` Textual TUI 及其只读查询层。
- `config/` 警报规则和运行时配置文件。
- `systemd/` 用于主机级启动的 service unit 和环境变量文件。
- `tmux/` 用于本地运维的终端工作流辅助脚本。
- `tests/` 接收器冒烟测试和单元测试。
## 快速开始
### 前置条件
- Python 3.11+
- Docker 及 Compose v2
- SQLite3 命令行工具
### 本地设置
```
cp .env.example .env
make up
```
`make up` 会在需要时初始化 SQLite 数据库,并通过 Docker Compose 启动接收器、Redis 和 worker。
### 查看仪表盘
```
make dashboard
```
仪表盘使用本地 SQLite 数据库,并每隔几秒自动刷新一次。键盘快捷键为:`q` 退出,`r` 刷新,`1-4` 切换标签页。
### 发送事件
将事件 POST 到 `.env` 和 `.env.example` 中定义的接收器 endpoint,通常为:
```
POST http://127.0.0.1:8765/events
```
如果您想在接收器上启用 bearer-token 保护,请设置 `PULSE_RECEIVER_TOKEN`。
## 常用命令
- `make up` 启动完整技术栈。
- `make down` 停止技术栈,但不删除 volume。
- `make logs` 跟踪查看服务日志。
- `make smoke` 运行端到端冒烟测试。
- `make test` 运行接收器测试。
- `make clean` 停止技术栈并移除本地 SQLite 和 Redis 数据。
## 运维模式
### Docker Compose
默认工作流通过 Docker Compose 在本地运行技术栈。接收器和 Redis 服务被设计为绑定到 `127.0.0.1`。
### systemd
`systemd/` 目录包含用于主机级启动的 unit 文件:
- `pulse-platform.service` 通过 `docker compose up -d --build` 启动接收器、Redis 和 worker。
- `pulse-sentinel.service` 启动 sentinel 传感器。
- `pulse-syswatch.service` 启动 syswatch 传感器。
### tmux
tmux 辅助脚本会启动一个 `pulse-ops` 会话,仪表盘位于一个窗格中,右侧显示传感器的实时 journal 输出。它适用于当您希望在一个终端工作区内同时查看控制与信号的日常本地运维场景。
## 近期历史
本仓库已从一个基础的接收器和仪表盘演变成单机 SOC 风格技术栈。近期的工作添加了原生警报和摘要 worker、特定于来源的仪表盘标签页、syswatch 噪声过滤、sentinel 高频通话者视图、即时 Discord 通知支持,以及 systemd/tmux 启动辅助工具。
## 许可证
[查看 LICENSE 文件](./LICENSE)
标签:Python, Redis, SQLite, Textual, 安全运营平台, 搜索引擎查询, 无后门, 版权保护, 逆向工具