Status · Plans and data
Troubleshooting
Each problem as you meet it, why it happens, and what to do. Status says most of it in words on its own pages: start there.
Send a test alert first
In the project's Settings, choose Send a test alert. The message after it names the channels that took it and why any didn't, such as "Slack didn't take it" with Slack's answer. "No channel took the test: no one to e-mail and no Telegram or Slack set" means nobody would hear a down. Each row of Who gets told also shows what that route answered last time.
For a webhook, use Send a test on the endpoint's page, and read the attempt it lists.
No alert arrives
Open the monitor's page: for each downtime it says who was told and whether it reached them. Then look for these:
- Incidents took it. With the project's Incidents connected, a down opens an incident there, and email, Telegram and Slack aren't used. Look in Incidents.
- It's held back on purpose. The monitor waits before telling (Tell when it's been down for), depends on a monitor that is down, is in a maintenance window, or is flapping and has had its one alert. When people are told has each rule.
- The email went elsewhere. Alerts go to everyone who may open the project, as the project's people are set at id.my-beast.com. The subject starts with
[Status]: look in spam. - Telegram or Slack refused. A bot not in the chat, a wrong chat id or a revoked Slack webhook are refused, and Settings shows the answer. Set it up again.
It says down, but the site works
Status checks from the internet, not from your network. The monitor's page shows the failed answer as it came (its status, headers, the start of its body, its timings and the IP address it reached), and that usually says which of these it is:
- A firewall or a bot filter. The site answers your browser, but refuses Status or answers it
403or429. Status's calls sayMyBeast-Status/1.0 (+https://status.my-beast.com): find them in your logs and let them through. - Only reachable inside. An address on your private network, or one that only resolves there, fails from outside: "does not resolve" or "is a private address".
- Too slow. "Timed out after 10 s": the whole answer has to come within 10 seconds. A health route that answers quickly is a better address than a heavy page.
- The text moved. "… is not in the answer": the page changed, or the text comes after its first 512 KB.
- The certificate. "The certificate is not trusted": often an incomplete chain, which browsers fill in for you and other clients don't. Serve the whole chain.
After a fix, choose Check now on the monitor's page instead of waiting for the next check.
A heartbeat stays Waiting
It hasn't had a ping yet. Call its address by hand from the server the job runs on:
curl -fsS -m 10 https://services.my-beast.com/status/ping/abc123def456ghi789jkl012OK, and the heartbeat turns up: the address is right, so the job isn't calling it. Check that the line is in the crontab, and that with&&the job before it succeeds.Not found, with404: the token is wrong. Copy the address again from the heartbeat's page. A heartbeat removed and added again has a new one.- No answer: the server can't reach the internet, or a firewall stops calls out.
A heartbeat is down, but the job ran
- The job takes longer than its grace. A ping is due by the last one plus the period and the grace. Give a long job more grace.
- It started and never said it finished. After
/start, a run with no ping within the heartbeat's period is down. Make sure the end of the job pings too. - The schedule's clock. On a cron schedule, a time zone that isn't the server's moves every deadline. Set the zone the crontab runs in.
- The ping failed.
curl -fsSprints why to the job's output, which cron mails or logs. A ping refused with429came more than 60 times in a minute.
A monitor is refused
The form, or a deploy's list, says why in words:
| It says | What to do |
|---|---|
| The … package has room for … monitors | The plan is full. Remove a monitor the project no longer needs, or move to a bigger plan at id.my-beast.com. |
| The … package checks a monitor as often as every … | The interval is shorter than the plan allows. Choose the one it names, or a longer one. |
| … is a private address, and this server calls public ones only | Status calls addresses on the internet only. Check a public address of the same service. |
| “qa” isn't one of the project's environments | The environment isn't the project's. Pick one it has, or have an admin add it at id.my-beast.com. |
| A HEAD answer has no body to look in | “The answer contains” needs GET. Change the method, or leave the text empty. |
| … subscription ended …: nothing new is taken in or added | Buy Status for the project again at id.my-beast.com. |
The API answers 401, 402, 422 or 429
- 401: the secret is missing, wrong or revoked. Check that
MYBEAST_STATUS_SECRETis set where the script runs. Settings → Status keys shows when each key was last used. - 402: the project's subscription ended. Only a deploy's list is refused this way.
- 422: the
messagesays what is wrong, naming the monitor in a list. Nothing was changed. - 429: more than 120 requests a minute with one secret. Wait a minute.
curl -f stops at an error without printing the answer. To see the message, use --fail-with-body instead (curl 7.76 or later).
Webhooks fail or don't verify
The endpoint's page lists each attempt with its status, its time and the start of the answer.
- Not a 2xx in time. The endpoint has 5 seconds. Answer first, then do the work.
- A redirect. Redirects aren't followed, so an
http://address that sends you tohttps://fails every time. Use the final address. - "Not sent". The address is private, or became private: Status calls public addresses only.
- The signature doesn't match. Check it over the raw body, before any JSON parsing; use the whole secret, decoding the part after
whsec_; and keep your server's clock right. Verify signatures has working code.
The public page answers 404
- No monitor of the project is marked public yet: a project without one has no page.
- The address isn't the one Status gives. Copy it from the Public status page button or step 5 of the setup guide: it answers only there.
- The subscription ended: the page then says it isn't available, until Status is bought again.
Every page says nothing is checked
Status's own checker hasn't finished a run for two minutes, so nothing is being checked and every project page says so. The public page says Not confirmed instead of All up. This is on our side, and nothing in your project needs to change: checks go on when it runs again. If it lasts, tell us.