3.2 KiB
Logging, retention and database maintenance
ActivePush is designed so that nothing grows without bounds. This page lists every place where data accumulates and how it is limited.
Server log
-
Written to stdout/stderr, collected by journald under the systemd unit. ActivePush does not write log files itself, so there is nothing to rotate with logrotate.
-
Level:
RUST_LOGin/etc/active-push/environment(defaultactive_push=info,warn).ACTIVE_PUSH_LOG_JSON=trueswitches to JSON lines (ELK, Loki, Vector). -
Size is controlled by journald. Recommended drop-in:
# /etc/systemd/journald.conf.d/size.conf [Journal] SystemMaxUse=500M SystemKeepFree=1G MaxRetentionSec=30daythen
systemctl restart systemd-journald. Read the log withjournalctl -u active-push -f. -
Volume at
infois roughly one line per notable event (new device, provisioning, failed login, sent mail, errors) - routine Sync/Ping requests are not logged individually. -
Debug WBXML (
logging.log_wbxmlorlogging.debug_users) logs full requests and responses including message bodies. Enable it only for a short diagnosis and for chosen mailboxes.
If you redirect output to a file yourself (e.g. a container without journald), rotate it with
copytruncate:
/var/log/active-push/active-push.log {
daily
rotate 14
compress
missingok
notifempty
copytruncate
}
In-memory buffers (panel)
| Buffer | Limit |
|---|---|
| Log viewer | logging.ring_size lines (default 2000, 100..100000) |
| Live request stream | last 500 requests |
| Minute statistics | 24 hours (1440 buckets) |
| Active mailbox tracking | entries older than 24 h are pruned every minute |
| Failed login counters / lockouts / login cache | expire automatically, pruned every minute |
| Loop detection, stale collections, time zone cache | bounded and expiring |
All of these are lost on restart by design; persistent history is in the database.
Database
/var/lib/active-push/active-push.db (SQLite, WAL). Hourly housekeeping:
| Data | Retention |
|---|---|
| Hourly statistics | logging.stats_retention_days (default 90) |
| Audit log | logging.audit_retention_days (default 365) |
| Panel sessions, setup tokens | removed when expired |
Devices not seen for panel.device_inactive_days (default 180, 0 = never) |
removed with their sync states and folder statistics; a device that returns later simply resynchronises |
| Sync states | at most two per folder and device (current + previous for retries); removed with the device, on folder deletion and on FolderSync reset; states untouched for more than 400 days are dropped |
| Folder/item id maps | removed for mailboxes that no longer have any device |
| WAL file | checkpointed and truncated every hour |
| Free pages | incremental auto-vacuum (databases from 0.1.0 are converted once automatically) |
Typical size: a few hundred kilobytes per device, mostly sync states of large mail folders. The panel shows the database and WAL size on the Overview page (Server card).
Backups
sqlite3 /var/lib/active-push/active-push.db ".backup '/root/active-push-$(date +%F).db'"
Losing the database never loses mail data: devices perform a full resynchronisation.