Logs
Purpose
Find Manager, Agent, and security-event logs without treating them as a lossless SIEM contract.
Prerequisites
journalctlfor systemd units- Permission to read the unit journal and any
logging.filepath
Where logs go
systemd journal
journalctl -u zwall-manager -e
journalctl -u zwall-agent -e
journalctl -u zwall-hosting-agent -e
journalctl -u zwall-hosting-agent-v2 -e
journalctl -u zwall-hosting-ebpf-loader -eFollow: journalctl -u zwall-manager -f.
Hosting units set LogRateLimitIntervalSec / LogRateLimitBurst (Agent 30s/200, loader 30s/100). Burst suppression can hide a flood; that is a hardening control, not a bug.
Configured files (examples)
Scroll sideways to see the full table. Use the arrow keys when focused.
| Component | Example YAML logging.file / agent.log_file | Unit ReadWritePaths |
|---|---|---|
| Manager | /var/log/zcs/firewall-manager.log | /var/log/zwall-manager |
| Virtualization Agent | /var/log/zcs/firewall-agent.log | /var/log/zcs |
| Hosting Agent | Hosting example / journal | Hosting unit does not grant /var/log/zcs; prefer journal |
If YAML points at a path the unit cannot write (ProtectSystem=strict + ReadWritePaths), the process logs elsewhere or fails. Confirm with systemctl cat and the live YAML.
Manager flags -log-file, -verbose, -debug override when used on the command line. The Enterprise unit does not pass those flags.
Security events in the Manager
Operators read events via:
zwallctl log --lines 50
zwallctl list-events --hours 24 --limit 100
zwallctl grep 203.0.113.10API: GET /api/v1/security-logs with limit (default 100), offset (default 0), filters log_id, log_type, agent_id, severity, action, source_ip, destination_ip, start_time, end_time.
zwallctl log --follow prints that follow is not implemented.
Hosting observation events: GET /api/v1/agents/:id/hosting/events. Those payloads are category-safe; do not expect raw log lines or customer IPs.
Verification
- Journal shows the unit started without repeating crash loops.
GET /api/v1/security-logsreturns 200 for an admin (empty list is valid).- Hosting: parser/source health in hosting status, not silence in nginx access logs on the Manager.
Failure modes
Scroll sideways to see the full table. Use the arrow keys when focused.
| Symptom | Meaning | Action |
|---|---|---|
| no file at YAML path | unit cannot write, or logging.file unused | journal + ReadWritePaths |
| empty security-logs | Agents offline, filters too tight, or Hosting category-safe path | Missing telemetry |
| journal rate-limited | Hosting LogRateLimit | inspect loader/Agent status rather than flooding journal |
| lossless delivery assumed | delivery gap open | do not claim exactly-once |
Security considerations
- Journals and dump files may contain source IPs, hostnames, usernames (Virtualization path). Hosting path is category-safe by design.
- Do not paste JWT, license keys, backup passphrases, or 2FA secrets into tickets.
- AI Preview redaction is a separate path; keep
ai.redact.enabledtrue when AI is enabled. export_audit_logs.shexists for PostgreSQL export; treat output as confidential.
Limitations
- No public log-retention SLA.
- Community vs Enterprise log directory names differ.
- WebSocket dashboard is not a public streaming product.