Health, Doctor and preflight

Check that 3AM is up, that every part of it works, that its host is fit, and that it can reach every tool.

3AM Doctor

Doctor checks a running install part by part. Each check says what it found and, when something is wrong, what to do. Open 3AM Doctor in the console (also under the ? menu), or run it from the command line:

./install.sh --doctor                                   # on a server, from the 3am-<version> folder
podman exec 3am-core /opt/3am/3am-core doctor           # or: doctor --json, for automation
kubectl -n 3am exec statefulset/threeam -- /opt/3am/3am-core doctor
AreaCheckHealthy when
Core3AMOperating (not in setup), and the runtime loaded without an error
CoreAlert intakeThe intake loop ran in the last few poll intervals
CoreWhat-changed snapshots3AM read your systems' setup in the last 30 minutes
CoreInvestigationsHow many are running, and how many incidents are still firing
LicenceLicence, confirmed with WardenValid, not near expiry, and confirmed (or offline by choice)
ConnectionsEach connectionIts health check passes now, with how long it took
ModelsModel placementOn a GPU or behind endpoints. Fails on a host without a GPU whose models are missing or local
ModelsSystem 1, the investigatorEach answers (or is deliberately not configured)
ApprovalsWaiting for a decisionNothing pending for over an hour
ApprovalsEscalationEvery step's channel is connected
ApprovalsLab auto-approverOff. Fails while it is on: it approves everything
PolicyFix mode, raising autonomyShown for information: advise or draft, and the quorum
DiagnosisAccuracyAt least 90% of judged diagnoses were right
AuditLedger integrityThe hash chain and the seals verify
StorageData volumeAt least 15% free

The overall status is the worst check's: ok, warn (working, but needs attention soon) or fail (something 3AM needs isn't working). The console's answer is cached for 15 seconds; Check again re-runs it. GET /v1/doctor returns the same report (API). When you contact support, include Doctor's report.

Is it up?

GET /health answers {"status": "ok"} without signing in. Use it from your load balancer or monitoring:

curl -s http://127.0.0.1:8700/health

The container's own health check runs 3am-core health, which needs no curl.

GET /v1/status (also without signing in) says which mode 3AM is in: setup (no valid licence yet), configuring (no connections yet) or operating, and why.

Preflight

Preflight checks the host and the network, before or after install:

3am-core preflight            # host, licence, disk, accelerator, and a TCP connect to every configured tool
3am-core preflight --deep     # also asks each connector for its health (credentials, permissions)
3am-core preflight --json     # for automation

Each line is ok, warn or fail, and the command exits non-zero on any fail. Run it after install, after every upgrade, and whenever a tool changes its address or credentials.

Connectors

3am-core connectors list      # every connector kind in this build, and its capabilities
3am-core connectors check     # health of each configured connector

The console's Connections page shows the same, with the last problem each connector reported.

Monitoring 3AM itself

WatchHow
The serviceGET /health every minute; alert after three failures
Everything elseGET /v1/doctor (with the admin token): alert when status is fail
The containerPodman and Docker's own health check (3am-core health, run directly, no shell): podman ps shows (healthy)
DiskThe data volume (/var/lib/3am): the audit log grows with incidents. Alert at 80%
The licenceGET /v1/status: licence.expires_at, and licence.in_grace once it has expired
The audit logledger-verify weekly (Logs and the audit log)

On this page