macOS 菜单栏系统健康监控器
实时日志分析 · 异常模式检测 · 零依赖原生应用
Owl 监听 macOS 统一日志流(Unified Log),通过 14 个模式检测器实时识别系统异常,并在菜单栏以颜色变化呈现告警。
macOS 已经在日志中记录了所有重要的系统事件——热节流、进程崩溃、内存压力杀死、蓝牙断连——只是没人看。Owl 替你看。
┌─────────────┐ ┌───────────────┐ ┌──────────────┐ ┌────────────┐
│ log stream │────▶│ 14 Patterns │────▶│ 4 Detector │────▶│ Menu Bar │
│ (ndjson) │ │ (filter) │ │ Engines │ │ (alerts) │
└─────────────┘ └───────────────┘ └──────────────┘ └────────────┘
性能:内存 ~12 MB,零外部依赖,100% 原生 Swift。
- 热节流检测 — 内核功率预算低于阈值时发出警告
- 进程崩溃循环 — 追踪 launchd 服务反复崩溃重启
- 磁盘刷写延迟 — APFS tx_flush 超过阈值时告警
- WiFi 信号衰退 — RSSI 值持续低于安全范围
- 沙盒违规风暴 — 统计进程被 Sandbox/SystemPolicy 拒绝的签名多样性
- 睡眠断言泄漏 — 追踪 powerd Created/Released 配对,检测未释放断言
- 进程崩溃信号 — 检测 QUIT/SIGABRT/SIGSEGV 等异常退出
- 蓝牙断连 — 按 MAC 地址分组追踪设备断连频率
- TCC 权限风暴 — 检测应用被系统反复拒绝权限请求
- Jetsam 内存杀 — 单次杀死即时告警,频繁杀死升级为严重
- 应用挂起 — 追踪 WindowServer 报告的 App Not Responding
- 网络连接失败 — 全局统计 ping 失败和网络异常
- USB 设备错误 — 按设备 ID 分组追踪 abortGated 错误
- DarkWake 异常唤醒 — 检测系统频繁异常唤醒
从 Releases 下载最新 Owl.dmg,打开后将 Owl.app 拖入 /Applications。
Owl 以菜单栏应用运行(无 Dock 图标)。点击猫头鹰图标查看系统状态、活跃告警和历史记录。右键点击可进入设置或退出。
| # | 模式 | 算法 | 说明 |
|---|---|---|---|
| 1 | Thermal Throttling | Threshold | 内核功率预算阈值检测 |
| 2 | Crash Loop | Rate | launchd 服务崩溃频率 |
| 3 | Disk Flush Delay | Threshold | APFS tx_flush 延迟 |
| 4 | WiFi Degradation | Threshold | RSSI 信号强度 |
| 5 | Sandbox Violation | Signature | 沙盒拒绝签名多样性 |
| 6 | Sleep Assertion Leak | State | 睡眠断言配对追踪 |
| 7 | Crash Signals | Rate | 进程异常退出信号 |
| 8 | Bluetooth Disconnect | Rate | 蓝牙设备断连频率 |
| 9 | TCC Permission Storm | Rate | 权限请求拒绝频率 |
| 10 | Jetsam Memory Kill | Threshold + Rate | 内存压力杀死(混合检测) |
| 11 | App Hang | Rate | 应用无响应事件 |
| 12 | Network Failure | Rate | 网络连接失败 |
| 13 | USB Device Error | Rate | USB 设备错误 |
| 14 | DarkWake | Rate | 系统异常唤醒 |
owl/
├── Sources/
│ ├── Owl/ # 应用入口 (AppDelegate, Menu Bar)
│ └── OwlCore/ # 核心库 (全部可测试逻辑)
│ ├── Detectors/ # Threshold / Rate / Signature / State 四种引擎
│ ├── Models/ # LogEntry, Alert, Severity
│ ├── Patterns/ # 14 个模式配置 + PatternCatalog
│ ├── Pipeline/ # DetectorPipeline, AlertStateManager
│ ├── Services/ # LogStreamReader, SystemMetricsPoller
│ ├── Settings/ # AppSettings, DetectorCatalog
│ └── UI/ # SwiftUI views, AppState, StatusItemMapper
├── Tests/OwlCoreTests/ # 485 tests / 42 suites
├── scripts/ # build, notarize, DMG 打包
└── docs/ # 设计文档
| 层 | 技术 |
|---|---|
| 语言 | Swift 6 + swift-tools-version 5.9 |
| UI 框架 | SwiftUI (MenuBarExtra) |
| 日志采集 | /usr/bin/log stream --style ndjson(内核侧谓词过滤) |
| 并发模型 | Swift Concurrency (Actor, AsyncSequence) |
| 系统接口 | IOKit (CPU/内存/磁盘指标) |
| 构建 | Swift Package Manager |
| 测试 | Swift Testing |
环境要求:macOS 14 Sonoma 或更高版本,Xcode 16+
快速开始:
git clone https://github.com/nocoo/owl.git
cd owl
swift build -c release --product Owl
nohup .build/release/Owl > /dev/null 2>&1 &常用命令:
| 命令 | 说明 |
|---|---|
swift build |
Debug 构建 |
swift build -c release --product Owl |
Release 构建 |
swift test |
运行全部 485 个测试 |
swift test --filter Integration |
仅运行集成测试 |
./scripts/build.sh |
构建 .app bundle |
./scripts/package-dmg.sh |
打包 DMG |
./scripts/release-gh.sh |
打包并发布到 GitHub Releases |
./scripts/notarize.sh |
公证 .app |
./scripts/notarize.sh --dmg |
公证 .dmg |
| 层 | 内容 | 触发时机 |
|---|---|---|
| L1 | 485 个单元 + 集成测试 (Swift Testing) | swift test / pre-commit |
| L2 | SwiftLint strict mode(零违规) | pre-commit |
| L3 | 11 个端到端集成测试(日志流 → Pipeline → 告警) | swift test --filter Integration |
| 文档 | 内容 |
|---|---|
| 01-overview.md | 项目概述 |
| 02-architecture.md | 技术架构 |
| 03-patterns.md | 可检测模式目录 |
| 04-detection-algorithms.md | 检测算法设计 |
| 05-ui-design.md | 菜单栏 UI 设计 |
| 06-distribution.md | 构建与分发 |
| 07-development-plan.md | 开发计划 |
MIT © 2026

