Readable conditions
[STATUS] == 200. [CERTIFICATE_EXPIRATION] > 48h. Not a pile of YAML.
Self-hosted endpoint monitoring
In ops, nominal means everything is within expected parameters. Nominal tells you when it isn’t.
Why Nominal
[STATUS] == 200. [CERTIFICATE_EXPIRATION] > 48h. Not a pile of YAML.
Monitors live in the database you choose. GraphQL and Terraform if the admin isn’t the source of truth.
Public status pages, badges, incidents. Slack, email, PagerDuty, webhooks.
Checks
Outbound probes, inbound heartbeats, and the databases they depend on.
Hit a URL. Check status, body, or the cert.
POST a query. Same checks as HTTP.
ICMP, or TCP if ping is blocked.
Open a host and port.
Look up a record. Check the answer.
Handshake a port. Watch the certificate.
Your jobs ping a URL. Missed pings fail.
Send a packet. Read a reply if there is one.
Connect, then optionally send a message.
Log in and run a query.
Log in and run a command.
Log in and run a query.
Conditions
Nominal evaluates them on every run. Condition reference.
[STATUS] == 200[RESPONSE_TIME] < 400[CERTIFICATE_EXPIRATION] > 48h[BODY] == pat(*"ok"*)Get started
One Compose file. Postgres. Open the admin.
docker pull ghcr.io/returnearly/nominal:latest