Documentation
Docs Home › Virtualization Agent › Troubleshooting

Troubleshooting

Virtualization Agent troubleshooting

Purpose

Diagnose a Virtualization Agent that will not stay up, will not attach XDP/TC, will not list VMs, or will not apply rules — without converting the node into a Hosting profile or enabling incomplete UID/GID ABI.

Audience

On-call operators with root on the hypervisor and admin on the Manager.

Edition

SHARED. Enterprise adds GET /api/v1/dashboard/ebpf-health.

Status

SUPPORTED diagnostics. Kernel minimum is not certified as a single number.

Prerequisites

  • Unit name zwall-agent.service
  • Config /etc/zcs/agent.yml (Enterprise) unless Community used another path
  • Admin JWT / zwallctl with --manager-url set

Required permissions

Root on the node. Admin on the Manager.

Procedure — first checks

systemctl is-active zwall-agent
journalctl -u zwall-agent -n 200 --no-pager
id -u   # Agent must be root; unit User=root
curl -k https://manager.example.com:8443/health/ready
zwallctl login --manager-url https://manager.example.com:8443 --username admin
zwallctl list-agents

Confirm this is not zwall-hosting-agent.service. Hosting cannot receive rules or restart commands.

Symptom table

Scroll sideways to see the full table. Use the arrow keys when focused.

SymptomLikely causesDiagnosticSafe remediation
Agent exits immediatelynot root; eBPF preflight; bad configjournal; min_kernel_version; strict_kernel_version_checkrun as root; fix YAML; do not pick a kernel from Community README vs 5.8.0 as “certified”
“must be run as root”Hosting not enabled (correct for this profile)hosting.enabledrun zwall-agent.service as root; do not enable Hosting to dodge root on a hypervisor
Agent missing in Managerenrollment; TLS; manager_url; Community 4th AgentAgent log; GET /api/v1/agentsEnrollment
No VMslibvirt off; virtualization.enabled false; wrong vm_bridge_namevirsh -c qemu:///system list --allenable KVM/libvirt; set URI; correct bridge
Rules not applyingsync failure; testing mode; Hosting target 409zwallctl list-rules; test-flush-status; assign errorrestore connectivity; disable testing mode only when intended; assign to this Agent id
Attach failureXDP mode; driver; integrityxdp_attach_mode; ebpf-health; dmesgcontrolled generic fallback; never disable verify_artifact_integrity for convenience
UID/GID surprisesexample YAML enables incomplete ABIenable_uid_gid_filteringset false until a stable customer contract is published
Maps empty after restartpinned maps off; pin dir not writable/sys/fs/bpf; unit ReadWritePathsuse shipped unit; enable_pinned_maps: true
zwallctl start/stop no-opnot implementedprinted messagesystemd
Restart API “success” but process staysrestart is a request, not guaranteed SIGTERMhandler contractsystemctl restart zwall-agent
Edge mode odditiesoperating_mode: edgeYAMLrevert to host
Detection profiles ignoredexample list vs map tagsdetection.profiles list vs map mismatchdo not trust example detection.profiles list

Verification after repair

Verification. Agent online, eBPF health, VM/interface list on a populated libvirt host, testing mode understood before drops.

Expected result

A single primary cause from the table, with a systemd or API evidence line.

Failure modes that need engineering/owner

Scroll sideways to see the full table. Use the arrow keys when focused.

IssueClass
Which kernel is supportedOS/kernel matrix not certified
UID/GID customer contractUID/GID filtering not a customer contract
hybrid vs virtualization profilehybrid example vs Hosting profile identity
SIGHUP vs restartSIGHUP not certified live-apply
Edge modeEdge mode not certified

Security considerations

  • Break-glass allow_unsigned_artifacts and allow_insecure_remote_tls are incident-only.
  • Do not attach hosting_observe.o to “fix” virt attach.
  • Do not collect customer packet payloads; this is map policy plus security logs.

Limitations

XDP earlier than netfilter can surprise operators who expected iptables counters to see the same packets. That coexistence is not certified.