Github开源单机监控软件学习SysWatch
学习摘要
整体效果还行,但是没有精确到没一个进程的io情况以及网络情况,看效果还可以,但是实际想发现问题还是很困难的.

SysWatch
单主机系统诊断终端工具。 当你感觉系统不对劲时——在打开 htop、iostat、nettop、powermetrics 以及记满单行命令的笔记本之前——你会先打开这个终端。
NetWatch 的姊妹项目。同样的界面风格,同样的配色方案。十二个标签页,涵盖单台机器上运行的一切。
功能一览
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
htop
top -d、mpstat |
|
|
|
free
vm_stat、htop 内存面板 |
|
|
|
iostat
iotop(聚合视图) |
|
|
|
df -h
df -i、mount |
|
|
|
htop
ps auxf、pstree |
|
|
|
ioreg AGXAccelerator PerformanceStatistics
/sys/class/drm |
|
|
|
pmset
ioreg AppleSmartBattery / /sys/class/power_supply |
|
|
|
launchctl list
systemctl list-units |
|
|
|
nettop
iftop |
|
|
|
|
|
|
|
|
如果说 htop 告诉你什么正在运行,那么 SysWatch 告诉你正在发生什么——涵盖 CPU、内存、IO、GPU、电源、服务——并且当某个指标异常时,会用通俗易懂的中文告诉你原因。
安装
git clone https://github.com/matthart1983/syswatch.git &&cd syswatch
cargo build --release
./target/release/syswatch
前置要求: Rust 1.75+。Linux 下无系统依赖。macOS 链接系统框架。
Crates.io / Homebrew / 预编译二进制文件将在 v0.1 正式发布时提供。
使用方式
syswatch # 默认 1Hz 刷新
syswatch --tick500# 2Hz 刷新
syswatch --tab procs # 启动时直接进入指定标签页
快捷键
1 2 3 4 5 6 7 8 9 → 概览 / CPU / 内存 / 磁盘 / 文件系统 / 进程 / GPU / 电源 / 服务
0 - + → 网络 / 时间轴 / 洞察
Tab / Shift-Tab → 切换标签页
↑ / ↓ → 选择行(进程、服务)
s → 切换排序(进程、服务)
← / → → 向后 / 向前拖拽会话历史
Home / End → 最早样本 / 实时
p → 暂停
q / Ctrl-C → 退出
独特之处
洞察 (Insights) 标签页。 对滚动会话进行启发式异常检测——包括交换分区抖动、失控进程、磁盘已满、内存压力、高负载、僵尸进程泛滥——以纯文本卡片形式展示,并建议跳转到哪个标签页查看。概览页底部的信息条和标签栏的 [+] 角标让你在任何页面都能注意到异常。
全会话拖拽回放。 时间轴标签页通过 ←/→ 可以回退整个应用——每个面板透明地展示历史状态。会话环形缓冲区是 v0.2 中快照/对比 (Snapshot/Diff) 和录制 (Recording) 功能的基础。
诚实面对平台限制。 当某些数据需要 sudo 权限时(如风扇转速、各组件功耗、Apple Silicon 上的 GPU 利用率),标签页会显示我们免费能获取到什么,并附一行说明哪些数据被权限门槛挡住了。不伪造数据,不弹窗提示。
非目标 (Anti-goals)
-
不是多主机工具。 如需集群视角,请使用 NetWatch 的 Web 仪表盘。
-
不是守护进程。 没有长期运行的采集器,不向 Prometheus 推送数据。会话本身就是数据库。
-
不提供交互式修复。 刻意保持只读。我们不杀进程、不调优先级、不卸载、不重启。
-
不是日志产品。 我们将 OOM 杀死事件作为内存页的一个信号展示;我们不是日志搜索界面。
-
不是为截图而生的漂亮图表。 块状迷你图、真实数字、没有平滑曲线、没有每周一换的主题。
v0.1 功能范围
全部十二个标签页在 macOS 和 Linux 上都能渲染真实数据。跨平台采集通过 sysinfo 实现。网络接口计数器和聚合磁盘 IO 通过 netwatch-sdk 传输,因此 SysWatch 和 NetWatch 代理共享同一套解析器。
推迟到 v0.2 —— 快照+对比 (页脚 S/D)、配置文件 (P)、录制/回放 (R)、设置 (,)、帮助 (?)、筛选 (/)。
需要 sudo 权限(已推迟) —— 风扇、各组件功耗、GPU 温度 + 各轨道功耗(都需要 powermetrics);macOS 热区温度(需要 IOReport 私有 FFI)。Apple Silicon 上的 GPU 利用率和已用内存无需 sudo,可通过 ioreg 的 AGXAccelerator PerformanceStatistics 获取。Linux 通过 sysfs 免费获取热区温度。
需要特性开关(已推迟) —— NVIDIA 实时 GPU 统计(gpu-nvidia cargo 特性,nvml-wrapper)、SMART 磁盘健康(smart cargo 特性,smartctl --json)。
架构
src/
├── main.rs CLI + 入口
├── app.rs 事件循环、标签页状态、回放 plumbing
├── collect/ 每个子系统一个采集器;Snapshot 为传输格式
│ ├── collector.rs sysinfo 支持的 CPU/内存/进程 + 分发
│ ├── gpu.rs system_profiler / sysfs DRM
│ ├── power.rs ioreg / pmset / sysfs power_supply
│ ├── services.rs launchctl / systemctl
│ └── ring.rs 有界历史记录 + nth_back 用于回放
├── insights/ 基于 (History, &Snapshot) 的纯函数
├── tabs/ 每个标签页一个文件;基于模型的薄渲染层
└── ui/
├── chrome.rs 头部、标签栏、页脚
├── palette.rs 统一配色源
└── widgets.rs block_bar、sparkline、panel
刷新模型:CPU/内存/进程/网络/IO 采用 1Hz 快循环;电源/服务采用 5s 慢循环(macOS 上子进程开销大)。UI 在 tick 或按键时重绘;空闲时 CPU 占用目标 < 0.5%。
许可证
MIT
夜雨聆风