Skip to content

Monitoring & health ​

A collector you can't see is a collector you can't trust. This page covers how to know your fleet is healthy and get told when it isn't — the difference between running a deployment and hoping.

Where you do this: Two surfaces.

  • In the dashboard (kilasec.com/app/) — Collectors (fleet state), Health (on-demand self-checks), Logs → Collector (diagnostics timeline), Dashboard tab (first-run checklist, pending approvals), Settings → Notifications (alert channels). Requires the tenant_admin role.
  • From your external uptime monitor — probe https://kilasec.com/api/healthz. Configured wherever your uptime tool lives (Better Uptime, Pingdom, cron+curl), not in the Kilasec dashboard.

Where to look ​

Dashboard → Collectors shows each collector's live state — online/offline, time since last heartbeat, version, and IP — refreshing every 10 seconds. Until traffic is flowing, Dashboard → Dashboard shows a first-run checklist so you can tell "not set up yet" from "broken".

Health checks ​

In the dashboard → Health (under Operate in the sidebar). One card per active collector: online/offline, the build it runs, any recent warning badges (policy sync failing, passed uninspected, degraded, dropped events, …), and a Run checks button.

Run checks asks the collector to run its on-box self-checks and report back. It picks the request up on its next status poll, so results land within about 30 seconds — no SSH needed:

CheckFails whenCode
Proxy portthe :8080 proxy (PAC / explicit-proxy clients) isn't accepting connectionsAFW-111
Device port (Kilasec Connect)the device TLS hop isn't accepting connections. When it passes, it lists every port devices are told to use (:443 and :8443)AFW-111
Device port :443devices can only reach this collector on :8443, with the reason (see Firewall & ports)AFW-113
PAC-TLS portthe :9443 PAC server isn't accepting connectionsAFW-111
Port conflictanother process on the host already held one of the collector's ports at boot, so that listener wasn't startedAFW-112
TLS-inspection CAthe CA is missing, unreadable, expired, or expires within 30 daysAFW-120
Cloud reachablethe collector can't reach the cloud (latency is shown when it can)AFW-510
Cloud auth (collector token)the cloud rejects the collector's token, or the plan has lapsedAFW-511 / AFW-410
Clock skew vs cloudthe host clock is more than two minutes offAFW-512
Enforcing (not degraded)the collector has fallen back to pass-throughAFW-220
File-descriptor limitthe open-files hard limit is below 8192 (the data plane raises its own soft limit to the hard one)AFW-140
Disk spaceunder 1 GB free on the data volumeAFW-141

Every failed row carries an AFW-### chip — hover it for the cause and the fix, or look it up in Error codes. An offline collector runs a requested check when it reconnects; until then you see its last results. The same panel is in each collector's detail view on Collectors (Health check section).

Logs → Collector is the passive side: the collector's diagnostics timeline (sync failures, fail-open/fail-closed episodes, shedding, dropped events, update reverts), each row tagged with its code.

On the collector host, docker exec kilasec-collector kilasec test connectivity runs the same checks.

Liveness: how "online" is decided ​

Every collector heartbeats to the cloud roughly every 10 seconds (its uplink cycle). A collector counts as online if its last heartbeat was within 60 seconds. Two timestamps are tracked:

  • last seen — updated on every heartbeat; "is it alive?"
  • last event — updated only when real traffic flows through it; "is it actually inspecting anything?"

A collector can be online but idle (alive, no AI traffic yet) or online and busy. The board surfaces both so you can tell a quiet network from a broken one.

Offline alerting ​

Dashboard → Settings → Notifications. When a collector that was heartbeating goes dark for more than 5 minutes, Kilasec fires an alert (once per offline episode; it re-arms after the collector comes back). Configure the channel here — a Slack-compatible webhook and/or email — and use Send test to confirm it reaches you.

The health endpoint ​

From your external uptime monitor. GET https://kilasec.com/api/healthz is a real probe suitable for external uptime tools:

json
{ "ok": true, "service": "agentfw-cloud", "db": "ok", "collectors": 3, "collectors_online": 2 }

It probes the database and returns HTTP 503 when degraded (e.g. the DB is unreachable), so a monitor actually trips instead of getting a hardcoded ok. Point your uptime checker (Better Uptime, Pingdom, a simple cron + curl) at that URL and alert on non-200.

A monitoring baseline for a beta ​

  1. Dashboard → Settings → Notifications: configure an alert channel (webhook or email) so offline events reach you.
  2. External uptime tool: add a check on https://kilasec.com/api/healthz.
  3. Dashboard → Health: glance on your normal cadence — any warning badge or red check names its fix.
  4. Dashboard → Dashboard: watch the approval backlog — a growing pending approval count means requests are being held and nobody's resolving them.

When a collector shows offline ​

See Collector is offline for the triage steps — reachability, the container, the uplink, and the host. For a collector that is online but misbehaving, start with Run checks on the Health page.

Documentation for kilasec — the AI Agent Firewall.