The moment it happens
Get alerted when a Heroku dyno crashes
When any dyno of your app enters a crashed state, you get one email about it.
- Runs
- The moment it happens
- Apps
- Heroku
- AI
- Not needed
- Access
- read
Send this to your assistant
Create a ClickRuntime automation: email me when any dyno of my Heroku app 'shop-api-prod' crashes, with the dyno name and time. Only send one email per crash.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
A crashed dyno on Heroku is usually restarted automatically, so the failure hides itself. The app comes back, a few requests return 503 errors and nobody notices until the pattern repeats: a memory leak that restarts a worker every 40 minutes, an unhandled exception in a web process, a boot loop after a bad config change. By the time customers complain, the app has been unstable for hours or days.
When a dyno crash event arrives (or the dyno list shows state crashed), the team is notified with the app and dyno name. The notification is sent once per incident, so a repeated crash loop does not produce a flood of messages.
It suits teams without a full monitoring stack, and anyone who wants a direct signal about dynos separate from application-level error tracking.
What you get out of it
Crash loops are caught early
A dyno crashing every few minutes is serious but invisible from the outside. A message ensures someone looks at the logs before customers feel the effect. That moves the discovery from a customer complaint to a Slack message.
Memory leaks show up as a pattern
Repeated notices about the same dyno at regular intervals point at a leak. That tells engineers where to look, without a month of guessing. Matching crash times to traffic or scheduled jobs tells engineers where to start.
Config mistakes are found quickly
A boot crash right after a config change points straight at the change. The alert arrives while the change is still fresh in everyone's mind. Rolling back a bad setting immediately takes a minute, and finding it a day later takes hours.
No flood during an incident
One notice per incident keeps the channel readable while the team works the problem. Constant pings during an outage only add stress. A readable channel also lets people coordinate on a fix instead of muting notifications.
Fills a gap beside error trackers
Error trackers catch exceptions, but not always the process itself dying. A dyno-level alert covers failures that never produce a neat stack trace. That makes it a useful second layer on top of whatever error tracking you already use.
How it works
What happens, step by step
When a dyno in your Heroku app changes, Heroku tells ClickRuntime straight away. A five-minute check is available as a fallback.
ClickRuntime ignores everything except dynos that have crashed.
You get one email per crash with the dyno, the app and the time, rather than a repeat on every check.
Before it runs live
- Connect Heroku
- Paste your automation's link into the other app's webhook settings
What you get
Build your own
Need it to work differently?
Your own rules
Conditions, thresholds, filters and exceptions, written the way you'd explain them to a colleague.
Any number of apps
One automation can read from one app and update several others. Over 248 apps are ready, and anything with an API works too.
AI where it helps
Summaries, classification, extraction and drafts use ClickRuntime's built-in AI, with no extra key.
On a schedule or on each event
Runs as often as every 5 minutes, or the moment an app sends an event, and keeps track of what it already handled.
Changes you can ask for
- Act only on the items that match your own rules, and skip the rest
- Add an AI step, for example to summarize, sort or draft a reply
- Add another app, for example also send it to Slack
- Combine it with other Heroku steps into one automation
Under the hood
The code that runs this automation
from clickruntime import on_event, notify, state
@on_event
def handle(event):
body = event.json
dyno = body.get("data", {})
if body.get("resource") != "dyno" or dyno.get("state") != "crashed" or dyno.get("app", {}).get("name") != "shop-api-prod":
return {"skipped": True}
key = f"{dyno['name']}@{dyno['updated_at']}"
if state.get("last_crash") == key:
return {"duplicate": True}
notify.email_me(f"Dyno {dyno['name']} crashed on shop-api-prod", f"Dyno: {dyno['name']}\nTime: {dyno['updated_at']}")
state.set("last_crash", key)
return {"alerted": key}FAQ
Common questions
What counts as a crash?
How does it avoid repeating the same incident?
Can the alert go to PagerDuty or email instead?
What permissions does it need?
Does it need AI?
How many runs does it use?
Can I change how it works?
Related
You might also like
Tell the team in Slack when a Heroku release fails
A failed release is posted to your team channel, so it isn't only the person who pushed who knows.
See how it worksGet a weekly list of your Heroku apps and dynos
Each Monday you see every app with its dyno types and counts, which makes forgotten apps easy to spot.
See how it worksGet a monthly report of Heroku add-on costs
On the 1st you receive every add-on across your apps with its plan and monthly price, with new ones highlighted.
See how it worksKeep exploring
Set up “Get alerted when a Heroku dyno crashes” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.