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