Skip to content

karlentwistle/dark_knight

Folders and files

NameName
Last commit message
Last commit date
Nov 27, 2024
Feb 19, 2023
Mar 13, 2023
Mar 2, 2023
Mar 2, 2023
Feb 23, 2023
Feb 11, 2023
Feb 20, 2023
Aug 21, 2024
Aug 21, 2024
Mar 17, 2025
Feb 11, 2023
Feb 14, 2023
Feb 20, 2023
Feb 14, 2023
Feb 14, 2023

Repository files navigation

Dark Knight

The Dark Knight automatically restarts your Heroku dynos if they start swapping to disk R14 - Memory Quota Exceeded in Ruby (MRI).

Once a Heroku dyno starts swapping to disk, it becomes comparatively slow and unresponsive, so taking it out of the formation is the best course of action.

He's a silent guardian, a watchful protector. A dark knight.

~ Jonathan Nolan, The Dark Knight

Setup

Deploy

Deploying the Dark Knight

To deploy the service:

$ git clone https://github.com/karlentwistle/dark_knight.git
$ heroku create <your_dark_knight_app_name>
$ heroku buildpacks:add heroku/ruby
$ heroku config:set APP_ID_OR_NAME=<ID_OR_NAME_OF_HEROKU_APP_BEING_MONITORED>
$ heroku config:set DRAIN_PASSWORD=<YOUR_DRAIN_PASSWORD>
$ heroku config:set AUTH_TOKEN=<HEROKU_API_AUTHENTICATION_TOKEN>
$ heroku config:set DYNO_TYPES=web,worker
$ heroku config:set RACK_ENV=production
$ git push heroku main

Instrumenting an App

To instrument an app:

$ heroku labs:enable log-runtime-metrics --app <ID_OR_NAME_OF_HEROKU_APP_BEING_MONITORED>
$ heroku drains:add https://user:<YOUR_DRAIN_PASSWORD>@<YOUR_DARK_KNIGHT_APP>.herokuapp.com/logs --app <ID_OR_NAME_OF_HEROKU_APP_BEING_MONITORED>

Configuration

The following is the full list of ENV configuration options:

ENV name Description Example Default Required
DRAIN_PASSWORD HTTPS drain password DRAIN_PASSWORD=password N/A
APP_ID_OR_NAME ID or name of Heroku app being monitored APP_ID_OR_NAME=whatismyip N/A
AUTH_TOKEN Heroku API authentication token AUTH_TOKEN=cf0e05d9-4eca-4948-a012-b91fe9704bab N/A
DYNO_TYPES Dynos to restart when swapping (R14) or over specified threshold DYNO_TYPES=web,worker web
{DYNO_TYPE}_RESTART_THRESHOLD Threshold in megabytes for specific dyno type to restart if breached WEB_RESTART_THRESHOLD=1024 Dyno memory quota
{DYNO_TYPE}_RESTART_WINDOW Restart rate limit in seconds for specific dyno type WEB_RESTART_WINDOW=300 10 minutes (600)
SLACK_WEBHOOK_URL Slack messages webhook URL SLACK_WEBHOOK_URL=https://hooks.slack.com/services/top/secret/password N/A

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published