diff --git a/README.md b/README.md index d78f4c3..c09f732 100644 --- a/README.md +++ b/README.md @@ -12,13 +12,13 @@ license

-## 项目简介 +## 📖 项目简介 `syscall_monitor` 在 Linux 内核 `raw_syscalls:sys_enter` 跟踪点上挂载一段 eBPF 程序,按系统调用号在内核态做哈希计数;用户态由 Python 每秒读取一次快照,并在 Flask Web 页面上展示配置项中关心的系统调用调用次数。 由于挂载 eBPF 需要内核能力(CAP_BPF / root),整个程序必须以 root 权限运行。 -## 主要特性 +## ✨ 主要特性 - 内核态全量计数,用户态按需展示:BPF 程序对所有系统调用号自增计数,配置变化无需重新挂载探针。 - 可在 Web 页面动态增删需要监控的系统调用名称,无需重启进程。 @@ -26,7 +26,7 @@ - 后台采集线程 + 配置文件原子写入(`tmp` → `replace`),并发读写不丢更新。 - 提供 `setup.sh` / `run.sh` / `stop.sh` 三个部署脚本,配套 Gitea Actions CI/CD 工作流。 -## 技术栈 +## 🧰 技术栈 | 类别 | 选型 | 来源 | |------|------|------| @@ -37,7 +37,7 @@ | 前端 | 服务端模板 + 原生 JS `fetch` 轮询 | [web/templates/](web/templates/) | | CI/CD | Gitea Actions(self-hosted runner) | [.gitea/workflows/](.gitea/workflows/) | -## 项目结构 +## 📁 项目结构 ```text syscall_monitor/ @@ -66,7 +66,7 @@ syscall_monitor/ └── LICENSE ``` -## 模块关系 +## 🧬 模块关系 ```mermaid flowchart LR @@ -80,7 +80,7 @@ flowchart LR Flask -->|/config| ConfigPage[配置页] ``` -## 快速开始 +## 🚀 快速开始 ### 环境要求 @@ -129,7 +129,7 @@ sudo ./run.sh sudo ./stop.sh ``` -## 接口 +## 🔌 接口 | 方法 | 路径 | 处理函数 | 说明 | |------|------|----------|------| @@ -140,7 +140,7 @@ sudo ./stop.sh 来源:[web/app.py](web/app.py)。 -## 部署 +## 🚢 部署 仓库内附带的 Gitea Actions 工作流面向 **self-hosted Linux runner**: @@ -149,16 +149,16 @@ sudo ./stop.sh 完整的 runner 准备步骤(系统包安装、部署目录创建、免密 sudo 配置等)见 [.gitea/README.md](.gitea/README.md)。 -## 开发说明 +## 🛠️ 开发说明 - `main.py` 中 `app.run(..., use_reloader=False)` 是关键:开启 Flask 自动重载会让主进程被 fork,导致 eBPF 探针被加载两次而冲突。 - BPF 程序在内核里对**所有**系统调用号计数,过滤逻辑放在 Python 端 `_refresh_snapshot()` 里,因此修改配置无需重建 BPF 程序。 - `SyscallTracer` 通过模块级 `_tracer` 单例保证 BPF 程序在进程内只挂载一次。 -## 安全与隐私 +## 🔒 安全与隐私 运行该程序需要 root / CAP_BPF 权限,会读取整机所有进程的系统调用频率信息,请勿在不受信任的环境或未脱敏的多租户主机上长期开启。监听地址默认 `0.0.0.0:5000`,对外暴露前请自行加上反向代理与访问控制。 -## 许可证 +## 📄 许可证 本项目以 MIT License 发布,详见 [LICENSE](LICENSE)。