Common issues
Fix the frequent failure modes fast: a server that shows offline, firewall metrics that stop appearing, and the exact error messages the console returns.
Last updated
On this page
Match your symptom to a section below and work through the checks in order. Most problems come down to the fleet daemon on the server, the metrics key saved in the console, or network reachability between the two.
Server shows offline
A fleet server shows offline when its daemon hasn't checked in for over two minutes —
the daemon (xdpd) normally reports every ~15 seconds, and an offline server's health
score is capped at 50. Work through these in order:
- Check the daemon on the box. Run
systemctl status xdpdon the server. If the service is stopped or failed, start it there — nothing in the console can reach a dead daemon. - Check outbound connectivity. The daemon polls the console over HTTPS, so the server needs outbound access to it. A firewall or DNS regression on the box looks exactly like a daemon crash from the dashboard.
- Restart a live-but-stuck daemon from the console. On the server's Products
tab, under Server actions, Restart cycles the
xdpdservice; reporting resumes within ~30 seconds. Queued actions only run when the daemon checks in, so this helps a flaky daemon, not a stopped one. - Re-enroll when the enrollment itself is broken. Also under Server actions, Re-enroll mints a fresh single-use enroll command — use it after wiping the daemon config or moving the box. Run the command on the server as root; the token expires shortly after and is never shown again. The current enrollment keeps working until the command runs, so minting one is safe.
If the server still shows offline after all four, open a ticket with the server label,
the output of systemctl status xdpd, and when the box was last reachable.
Firewall metrics not appearing
The OpenShield-XDP product console polls the agent's metrics API on your server with a
stored osk_… key. The failure mode tells you which side to fix:
invalid API key (401)— the key saved in the console no longer matches the agent. Runopenshield keyon the server to print the current key, then update the saved one with Rotate key in the server row's menu on the product page.this dashboard's IP is not in the server's metrics whitelist (403)— the key is valid but the console's egress IP is outsidemetrics.whitelistin/etc/openshield/openshield.yaml. Add a covering CIDR, thenopenshield reload.- Timeout after 20 seconds — the server is offline, blocking the console's IPs, or
busy applying a large geo/feed update. If timeouts persist, set
auto_fetch.mode: 'dedicated'and confirm the metrics port is reachable. 502— the console's metrics proxy couldn't get an answer from the agent. Check the agent on the server withopenshield status, thenopenshield reloadif the config changed.
If the server row is healthy but some panels are empty, the agent is omitting those
sections: make sure metrics.enabled: true is set, run openshield reload after every
config edit, and update the agent if it predates the panel — older agents simply don't
send newer sections. If a teammate sees data you don't, your account lacks the
analytics grant — ask an admin; nothing on the server needs to change.
Common error messages
Match the message verbatim, then apply the fix. The Test connection button reports
ok, invalid API key (401), source IP not allowed (403), server returned <status>, or unreachable — the same fixes apply.
| Message | Meaning | Fix |
|---|---|---|
invalid API key (401) — check the key on the server with: openshield key | Saved metrics key doesn't match the agent | Rotate the key (above) |
this dashboard's IP is not in the server's metrics whitelist (403) | Console IP outside metrics.whitelist | Add a covering CIDR, openshield reload |
server returned <status> | The agent answered with an unexpected status | openshield status on the server; reload if the config changed |
forbidden: analytics access required (403) | Your account lacks the analytics grant for this server | Ask an admin to grant access |
unknown control path (400) | The control proxy asked for a path the agent doesn't recognize — typically an older agent | Update the agent |
On the public REST API, the three failures to know are 401
(missing, revoked, or disabled-account token), 404 (unknown id — or a resource owned
by someone else, by design), and 429 (over the 120 requests/minute per-token limit;
wait the Retry-After seconds).
Open a ticket
When every check passes and the problem persists, open a ticket from My tickets in the console sidebar. Copy the error message verbatim — the wording identifies which component rejected the request — and include the server name as shown in the console.