Missing Telemetry
Symptom
The Manager console or API shows no (or incomplete) events:
- empty
GET /api/v1/security-logs - Hosting status missing,
runtime_available: false, or collectors notactive - Hosting events list empty
- Virtualization traffic/VM views empty
- operators expected “every packet/log arrived once”
Likely verified causes
- Agent disconnected — no upload path (Agent Disconnected).
- Wrong profile: Hosting collectors do not run on
zwall-agent.service; Virtualization does not expose Hosting status APIs. - Hosting source state
permission_blocked(file ACL) orsource_not_present(path not on this OS). There is no shipped universal Hosting ACL. - Hosting loader not active; observer socket
/run/zwall-hosting-ebpf/observer.sockmissing. Pass-only programs do not drop; missing network telemetry is often “loader not attached,” not “observation off.” - Hosting events API is category-safe: no raw payload / customer IPs in the projection. Empty-looking events may still be collecting (
collection_status: COLLECTING,review_state: COLLECTING). - Security-log ingest uses Agent capability auth (
POST /api/v1/security-logs). AdminGETis a different path. - Event-delivery exactly-once is an open engineering gap. Gaps are not proof of a collector bug by themselves.
- Virtualization: libvirt/KVM not present, wrong
vm_bridge_name, or Agent not posting VM data.
Diagnostic commands/endpoints
Any Agent:
zwallctl list-agents
zwallctl list-events --hours 24 --limit 100GET /api/v1/security-logs
GET /api/v1/security-logs/summary
GET /api/v1/dashboard/logsAdmin auth. Agent ingest is POST /api/v1/security-logs (and /batch) with classified Agent auth, not the admin JWT.
Hosting (Enterprise; requires Hosting v2 profile):
GET /api/v1/agents/:id/hosting/status
GET /api/v1/agents/:id/hosting/events?limit=50Events projection fields: event_id, source, category, severity, timestamp, parser, contract_version, review_state. Limit 1–100 (default 50). Non-v2 or non-hosting → 404 Hosting v2 profile not available.
On the Hosting node:
sudo systemctl status zwall-hosting-ebpf-loader
sudo systemctl status zwall-hosting-agent
ls -l /run/zwall-hosting-ebpf/observer.sockSocket path is product-fixed: loader --socket default /run/zwall-hosting-ebpf/observer.sock; non-approved paths are rejected.
Virtualization:
sudo systemctl status zwall-agent
# libvirt is an operator tool, not a Zwall command
virsh -c qemu:///system list --allGET /api/v1/virtualization/vms
GET /api/v1/dashboard/ebpf-healthebpf-health is Enterprise (DashboardHandler.GetEBPFHealth). Community V1 router has no ebpf-health route.
What each result means
Security logs
Scroll sideways to see the full table. Use the arrow keys when focused.
| Result | Meaning |
|---|---|
| GET list empty, Agents offline | Upload never happened. Fix connectivity first. |
| GET list empty, Agents online | Ingest failing, filters, or no matching log types. Check Agent journal for upload errors. |
| POST ingest 401/403 | Agent JWT/capability missing (CapabilitySecurityLogIngest). |
Hosting status / sources
Source states verified in config/schema include active, available_but_disabled, source_not_present, permission_blocked, parser_unsupported, degraded, failed, stopped, unavailable.
Scroll sideways to see the full table. Use the arrow keys when focused.
| State | Meaning | Safe action |
|---|---|---|
active | Collector is reading the configured path | None |
permission_blocked | zwall-hosting cannot read the exact file | Grant exact-path read. Hosting v2 unit SupplementaryGroups=adm only; never join a customer-content group. v1 unit also lists psaserv for an approved log class — still not a blanket content ACL. |
source_not_present | Path not on this OS / not configured | Point hosting.sources[].path at the real file or accept absence (PHP-FPM / alternate MariaDB often this). |
runtime_available: false | No Hosting status persisted yet | Loader + Agent + successful observation heartbeat |
Events items: [] with collection_status: COLLECTING | Projection has no Hosting log types yet | Not proof of packet drop; Hosting does not drop |
404 Hosting v2 profile not available | Agent is not Hosting v2 observation | Wrong Agent or profile |
Network telemetry: loader loads hosting_observe.o (pass-only). If the socket is missing, the Agent cannot poll observer events (hosting.network.socket_path in example).
Virtualization
Scroll sideways to see the full table. Use the arrow keys when focused.
| Result | Meaning |
|---|---|
| No VMs | Not KVM/libvirt, or discovery URI/bridge wrong (qemu:///system, example vm_bridge_name: viifbr0) |
| Traffic empty | Agent not syncing / eBPF not attached — Enforcement / eBPF |
Safe remediation
- Confirm the Agent profile and unit.
- Hosting: start loader, confirm socket, start Agent, then re-read Hosting status.
- For
permission_blocked: add a precise POSIX ACL/read grant forzwall-hostingon that file. Do notchmod 777 /var/log. - For
source_not_present: fix the path or accept that the source is absent on this image. - Interpret Hosting events as category-safe investigation signals, not raw customer logs.
- Virtualization: fix libvirt and Agent connectivity; do not enable Hosting enforcement flags.
- If some events are missing under load: treat as the delivery gap (no lossless contract). Do not claim exactly-once.
Do-not-do warnings
- Do not interpret Hosting pass-only as “observation is off” without checking the loader and socket.
- Do not load Virtualization firewall objects on a shared hosting node to “get telemetry.”
- Do not expect Hosting events JSON to include raw payloads or customer IPs.
- Do not claim lossless or exactly-once delivery.
- Do not use Hosting sources as automatic/provider AI input.
- Do not invent a universal Hosting ACL.
- Do not publish PPS or “every flow visible.”
Escalation condition
Escalate when:
- loader is active, socket exists, source state is
active, heartbeats succeed, and no category-safe events appear for an interval where the source is known to be writing - pass-only Hosting programs drop traffic (product defect — do not “fix” by attaching firewall objects)
- Community operators need
ebpf-health— that handler is not in the Community router (product gap, not an operator misconfig)
Related documentation
- Hosting troubleshooting
- Hosting telemetry
- Signals and events
- Event model
- Enforcement
- eBPF
- Log sensitivity
Edition
SHARED security logs. Hosting status/events, observer socket, and Hosting collector states are ENTERPRISE_ONLY. dashboard/ebpf-health is Enterprise.
Status
SUPPORTED for diagnosis. The exactly-once delivery and universal-ACL issues remain product gaps.