Monitoring
PutFS has no built-in metrics endpoint. Monitor the components it delegates to: nginx and the filesystem.
nginx
stub_status
Exposes active connections, accepts, handled, requests. Useful for saturation alerts.
Prometheus
nginx-prometheus-exporter scrapes stub_status and exposes standard metrics:
Access logs as event stream
With access_log off (recommended for performance), there's no request-level telemetry. If you need it, use buffered file logging:
Then ship to your pipeline:
Each log line contains method, path, status, response time — enough to derive per-dataset write rates, error rates, and latency percentiles.
Warning
Logging to stdout (access_log /dev/stdout) causes a 27x throughput penalty. Always log to a buffered file if you need access logs.
ZFS
Pool I/O
ARC
Key metrics:
- ARC hit rate – above 90% is good, above 98% means most reads come from RAM
- Demand metadata hits – directory lookups / stat calls. Drops here degrade listing performance
- L2ARC hit rate – if low, working set exceeds SSD + RAM
Prometheus
zfs_exporter exposes pool, dataset, and ARC metrics:
Alerting suggestions
| Alert | Condition | Why |
|---|---|---|
| Disk full | zpool list -Hp capacity > 85% |
PutFS returns 507 when full |
| ARC hit rate drop | arcstat demand_hits / demand_total < 0.9 |
Reads falling through to disk |
| Replication lag | zrepl status last snapshot > 15 min |
Gap exposure increasing on failure |
| nginx errors | 5xx rate > threshold | API or filesystem issues |