all
guides & tutorials
user stories
operations & observability
engineering culture
news

Resolve Serverless Errors the Easy Way- with Tags

written by  
  Verne Lindner

Debugging Serverless Application Errors

When a customer reports an issue that you can’t replicate, but you still need to solve, what do you do? You can release a change with a log statement, then start monitoring logs to try and catch the customer’s function, and hope you see the error again. That can be a long and fruitless task.

We’ve been there ourselves! That’s why we’ve added tags to the Serverless Framework dashboard’s debugging tool, the explorer.

Tags in dashboard

Our new tag filters can do the tracking for you. Now, when you’re trying to debug an issue that’s hard to track or hard to replicate, try this: log when you’re in the error state, tag that log line, and output a JSON object that represents some state of your application. Open the explorer, filter on that tag and view the invocations the explorer finds for you.

Tags in dashboard

Here’s an example of how we’ve used it; the API that powers the Serverless Framework dashboard is monitored within the dashboard (yes, we eat our own dogfood). One of our customers reported a query error, but no actual errors were being raised. We created a tag, and used it to find their invocation logs, so we could study the state of our application during the time their functions were invoked.

Instead of trying to track their invocations ourselves, we let the explorer do it. The time we spent was entirely focused on understanding the issue, not hunting for logs.

If you want to try tags in the explorer, you’ll first need to add some to your Serverless.yml file.

Tagging with NodeJS

If you’re using NodeJS, update serverless with npm update -g serverless

Add this code to your Serverless.yml file:

module.exports.hello = async event, context => {
 context.serverlessSdk.tagEvent('customerId', 5, { newCustomer: true, isDemo: true, demoExpire: '2019-12-01' })
 tagEvent('200 OK')
 return {
   statusCode: 200,
   body: JSON.stringify(
     {
       message: 'Go Serverless v1.0! Your function executed successfully!',
       input: event,
     },
     null,
     2
   ),
 };
};

Tagging with Python

If you’re using Python, add this:

def hello(event, context):
   context.serverless_sdk.tag_event('python-transaction', 'true', {'foo': 'bar'})
   body = {
       "message": "Go Serverless v1.0! Your function executed successfully!",
       "input": event
   }

   response = {
       "statusCode": 200,
       "body": json.dumps(body)
   }

If you’d like to learn more about tagging Lambda functions, check out Jeremy Daly’s blog post, “How to tag your Lambdas for smarter serverless applications".

Learn more about debugging with the explorer, and open up your Serverless Framework Dashboard and explore tags for yourself!

About Verne Lindner

Verne Lindner is the Director of User Experience at Serverless, Inc.

 - 02.11.17

Dave Copeland - contract-based testing for event-driven architectures

We're posting the full videos and transcripts from Emit 2017! Here's Dave on contract-based testing for event-driven architectures.

written by Andrea Passwater

 - 01.09.16

Defining Serverless and Why It Matters to Developers

You’ve probably heard the term serverless. But what does it actually mean? And more importantly, as a developer, why should you care?

written by Stefanie Monge

New to serverless?

To get started, pop open your terminal & run:

npm install serverless -g