status.<input I4> as slo_ingestion, slo_dashboard, slo_freshness-web and
slo_freshness-api (../reference/observability.md, “Measures”).
Gatus keeps raw results for only about a week (20,160 per endpoint) and hourly uptime for 30
days, which is shorter than a month. So cmd/sloreport copies each day’s raw results into
docs/slo/data/<YYYY-MM-DD>.json and writes the month’s report from those files to
docs/slo/<YYYY-MM>.md.
Normal operation (automatic)
The workflow.github/workflows/slo-report.yml runs every day at 00:30 UTC:
- collects yesterday with
go run ./cmd/sloreport collect -gatus "$STATUS_BASE_URL" -day <day> -out docs/slo/dataand commits it to the branchslo/<YYYY-MM>; - on the day after a month’s last day, writes the report with
go run ./cmd/sloreport report -month <YYYY-MM> -data docs/slo/data -out docs/slo, commits it and opens a pull requestslo report <YYYY-MM>tomain.
STATUS_BASE_URL (https://status.<input I4>); without it the
first step fails with repository variable STATUS_BASE_URL is not set.
Each month (operator)
- Review the pull request. The report states the covered range, partial days, probe gaps, missing days, and per measure the results, availability, verdict against the objective, coverage and downtime budget used, then every incident (a run of failed results) with its first error. Missing days count as unmeasured, never as available.
- Explain every incident that used budget: link it to the alert, runbook or change that caused it, in the pull request or the incident record.
- Check coverage. Low coverage means the probe or Gatus was down; it lowers trust in the availability number. Investigate a coverage below 99%.
- Merge. The report is public in the repository.
By hand (when the workflow did not run)
The days must be collected while Gatus still holds them (about a week):-page-size defaults to 20160, which must equal observability_gatus_max_results in the
observability role. Then, once every day of the month is collected:
wrote docs/slo/<YYYY-MM>.md. -through <YYYY-MM-DD> writes a partial report up to a day.
Exercised
Not yet exercised: collection from a real status page (published as in
../deploy/probe.md section 5) and the scheduled
workflow (GitHub Actions fails at start-up on the account). The test-stack numbers are not
availability figures of the platform.