Skip to content

Monitors

/monitors. Needs module.monitors.

Uptime-style monitoring of the internal services you care about: the intranet, the print server, the Wi-Fi controller, the library system.

KindChecks
HTTPA GET or HEAD against a URL, optionally asserting a status code or a keyword in the body
TCPOpens a socket to a host and port
TLSCompletes a handshake and checks certificate expiry
PINGBest-effort reachability
AGENTHeartbeat freshness of a connector agent

The agent kind is inverted from the others. Nothing can reach an agent inside a customer network, so the check is “did it report recently” rather than an outbound probe.

Give it a name, a kind, a target, an interval and a timeout.

Names matter more than you would think. Intranet is better than http://10.0.4.19:8080, because the name is what appears in an alert at 7am and on the public status page.

The most useful option on an HTTP monitor. A web server returning 200 with an error page is a service that is down and a check that passes.

Assert on a keyword that only appears when the thing genuinely works: a student’s name on a dashboard, a term that only renders after a successful database query.

Monitors raise severity-based alerts when something goes down or degrades, and send the monitor.down email to staff who can view monitors.

Send alerts to a monitored mailbox, not a personal one. Somebody on leave is not reading them.

Each monitor keeps its check history, so you can answer “how long has this been flapping” rather than guessing.

A service that fails one check in twenty is a different problem from one that has been down since Tuesday, and the history is what tells them apart.

Mark a monitor public and it appears on the public status page at /status, which needs module.statusPage.

Publish the things your community asks about: the Wi-Fi, the intranet, the printing. Do not publish internal infrastructure whose name would mean nothing to a student and everything to somebody scanning your network.

A monitor that lives inside the thing it is watching cannot tell you the thing is down.

Point an external uptime check at /api/health/ready. See keeping an eye on it.

Plugboard blocks outbound requests to private, loopback and link-local addresses by default, so a monitor target cannot be used to reach internal hosts or a cloud metadata service.

A self-hosted install that legitimately monitors LAN addresses needs:

Terminal window
ALLOW_PRIVATE_EGRESS=1

A managed deployment needs a connector agent instead, or a target reachable from the internet.

PermissionAllows
monitor.viewSee monitors and their history
monitor.manageCreate and configure them