Checks
Checks
A check fetches an endpoint on a schedule and records whether it answered. It is the fastest thing in Tailglow to set up, and the only one that needs nothing else to exist first: give it a URL and you have real data within a minute, without instrumenting anything or sending us a single event.
Use a check when you want to know that something is up. Use a pull when you want what the endpoint returns.
Set up a check
Pick a source for the results to land in, name the check, and give it the HTTPS URL to watch. Everything else has a working default.
Schedule decides how often it runs, down to once a minute. Collection decides where the results land inside the source, and you name it yourself, because which collection a check writes to is the thing that decides what it charts alongside.
Point several checks at the same collection and they chart together: one strip per check, with an overall row above them taking the worst result of any check in each bucket. That is a status page. Give each check its own collection to keep them apart.
Test check on the Activity tab fetches the endpoint once, right now, and tells you what came back. It stores nothing, so use it freely while you get the configuration right.
What gets recorded
Every run writes exactly one row, whether it succeeded or not:
| Field | Meaning |
|---|---|
check_id | Which check ran |
checked_at | The scheduled time of the run, not the moment the row was written |
up | 1 when the endpoint answered with a 2xx, 0 when it did not |
http_status | The status it answered with, or 0 when nothing answered |
response_time_ms | How long the request took |
error_stage | request when nothing answered, response when it answered wrongly |
error_message | What went wrong |
attempts | 2 when a failure was confirmed by a second check |
Because up is a number, the average of up across a period is the uptime for that period, as a fraction between 0 and 1. A view that multiplies it by 100 first reads as a percentage instead, which is the form thresholds are written in: the Colors tab’s uptime preset expects 99 and 99.9, not 0.99 and 0.999. Views built by setup carry that field already, as uptime_percent.
A run that was never dispatched writes no row at all. Tailglow did not ask the endpoint anything, so it makes no claim about whether it was up, and the gap renders as no data rather than as downtime.
Confirming failures
Confirm failures after waits the given number of seconds and checks once more before recording a failure. A single refused connection is a flake as often as an outage, and without this one blip becomes a red cell on your chart. When the second attempt succeeds, the run is recorded as up.
Charting uptime
- Create a view over the checks collection.
- Create a metric on that view: display value Average, over the
upfield. Group bycheck_idif several checks share the collection. - Set the chart type to Uptime, colour mode By value, and use the uptime preset in the Colors tab. Rules are read worst-first, so red comes before amber before green.
- Add a monitor with a sustained condition if you want an alert. The chart shows every bucket; the monitor decides what counts as an outage worth waking someone for.
A check never stops itself
This is the difference between a check and a pull. A pull that has been failing for 72 hours is switched off, because a collector with nothing to collect is only wasting requests. A check keeps going for as long as the outage lasts, because documenting that outage is the entire job. Your chart stays honest through the worst week you have.
A check stops only when you pause it.
Limits
Each request times out after 20 seconds, and a confirmation attempt after 10. A POST request body is capped at 4 KB.
Security
Endpoints must be public HTTPS addresses. Tailglow re-validates the address on every single run, not just when you save the check, and rejects private, loopback and link-local targets. That re-validation is what stops a hostname that resolved publicly at save time from being repointed at an internal address later.
Headers are stored encrypted and never returned. Responses list only the header names you configured.