Yesterday my app went down. My PaaS provider had decided to update their platform late that evening. This caused an obscure bug which kept my Docker containers from spinning up again. The consequence was devastating: My app was offline for hours. I had no way of fixing a bug over which I had no control.
Worse yet: I had no good way of letting my users know what was going on. I could only email everyone and apologize in person.
Here’s an email you don’t want to get at 11:24 PM
Of course I had set up automatic monitoring of my app’s web page and API endpoints. But it’s not enough if you know that your server is down — unless you’re the only one using it! If anyone else is depending on your service, you need to have a communication channel when (not if!) something goes wrong.
A status page can be an important element in your relationship with your users. It helps you achieve the following goals:
TransparencyBe open about what’s gone wrong and what you’re doing to fix it
Fast crisis responsePublish information and updates about service interruptions right as they happen
Building user trustBeing transparent and responsive is the best way to show your users that they can trust you. They see that they can rely on your service even when things go bad.
There are plenty of status-page-as-a-service providers around. One prominent example is Atlassian Statuspage which powers the status pages of sites like Vimeo, Dropbox or Reddit. Similarly well-known is Status.io which is behind the status pages of Twitter, Docker and Let’s Encrypt. Other commercial alternatives include Sorry, Statusy and AdminLabs.
None of them come cheap; Statuspage’s smallest plan (which doesn’t include SMS notifications) comes in at USD 348/year; Status.io’s Basic plan (again, no SMS notifications, and this time even without HTTPS encryption) is available for no less than USD 948/year. I’m sure this pricing makes perfect sense for VC-backed Silicon Valley companies — but not for bootstrapped startups or freelancers like myself. This is why I decided to set up my own status page.
There are really three boxes that a good status page needs to check:
☐ Automatic updates from monitoring servicesThe status page needs to be able to display monitoring and/or performance data from external sources
☐ Communication of current status and planned maintenanceThe main purpose of a status page: Communicating the availability of your services to your users
☐ It needs to look goodWell, obviously!
Fortunately, there is an open-source (Apache-2.0-licensed) status page that fulfills all my requirements: LambStatus. LambStatus is a status page you can install on AWS with one click.
Even though its name evokes cuddly, woolly sheep babies, LambStatus is actually named for Amazon’s serverless platform AWS Lambda. LambStatus is essentially a bunch of node.js functions, glued together by some AWS configuration. The functions are stored in AWS Lambda and only executed on request. This means: Other than a few additional resources (such as a handful of files on S3), there are almost no operating costs for running LambStatus. How low are the operating costs? Here’s an estimate from the LambStatus website:
A status page only occasionally gets huge traffic. The system takes $1 per 30,000 visitors and almost $0 if no visitors.
Let’s recap our requirements:
LambStatus can display data from AWS CloudWatch which automatically monitors many AWS resources. It can also receive data from external monitoring services via an API.
On top of that, you can also set up your own monitoring for custom HTTP(S) endpoints. I’ve written an guide about that here:
With LambStatus, your users can subscribe to incidents via RSS or email. You can announce planned maintenances and provide updates for incidents as they happen.
Clean, clear, minimalist. What more can you want from a status page?
I’m planning to write a step-by-step guide with some personal tips for setting up LambStatus. Make sure to subscribe to my newsletter so you don’t miss the next article!
Are you interested in best practices for application deployment? Make sure to subscribe to my newsletter!
If you don’t want to wait: Getting started with LambStatus is really simple. The only think you need is an AWS account. Thanks to LambStatus’ CloudFormation template, you can set it up in a matter of only a few clicks. Take a look at the official Getting Started guide!