A small CLI-based system monitoring tool that captures raw OS signals and turns them into clear health decisions.
This project focuses on resource pressure, not dashboards or raw metrics.
The system is built as a simple pipeline:
Collect
│
▼
Snapshot
│
▼
Analyze
- Collectors (Bash) read low-level system data.
- Coordinator (Python) merges data into a single snapshot.
- Analyzer (Python) evaluates system health and emits decisions.
The result is a monitoring tool suitable for automation, not just observation.
system-health-analyzer/
├── analyzer/
│ └── analyze.py
├── collectors/
│ ├── disk_collector.sh
│ ├── memory_collector.sh
│ └── process_collector.sh
├── data/
│ └── metrics.json
└── coordinator.py
Located in collectors/
Each collector:
- Reads system state directly from the OS
- Emits valid JSON to stdout
- Contains no thresholds or decisions
| Collector | Description |
|---|---|
memory_collector.sh |
Reads /proc/meminfo |
disk_collector.sh |
Reads df |
process_collector.sh |
Reads ps |
The coordinator:
- Runs all collectors
- Parses their JSON output
- Merges data into one snapshot
- Writes the snapshot to
data/metrics.json
This ensures data integrity and prevents malformed JSON.
The analyzer:
- Loads the snapshot
- Applies health rules
- Emits OK / WARNING states
- Returns automation-safe exit codes
| Code | Meaning |
|---|---|
| 0 | Healthy |
| 1 | Warning (resource pressure) |
| 2 | Invalid or incomplete data |
python3 coordinator.pypython3 analyzer/analyze.py- Clear separation between data collection and decision logic
- Raw OS signals over synthetic metrics
- JSON as a strict data contract
- Fail fast on invalid data
- Designed for cron, CI, or automation hooks
This project was built to understand:
- How Linux exposes real system pressure
- Why monitoring should drive decisions, not dashboards
- How to design small, composable system tools reopening
- Developed and tested on Arch Linux
- Intentionally minimal by design
- Built as a systems-learning artifact, not a full monitoring suite